summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchanywa <cbible.kim@samsung.com>2015-11-12 11:08:50 +0900
committerchanywa <cbible.kim@samsung.com>2015-11-12 11:35:29 +0900
commitb917eed51a7c87775d9c260798fa9996fccf5d8a (patch)
treeed32779c88c51b5a9e47c08eaa52acefe758f90b
parentcc8a5b7068f17bde6f17795d8f85e87d4c818c20 (diff)
downloadmaps-plugin-here-b917eed51a7c87775d9c260798fa9996fccf5d8a.tar.gz
maps-plugin-here-b917eed51a7c87775d9c260798fa9996fccf5d8a.tar.bz2
maps-plugin-here-b917eed51a7c87775d9c260798fa9996fccf5d8a.zip
Synchronization with Tizen 2.4 and open source files of maps-plugin-here package
Change-Id: Id4da16a533fca2196bf350720ccfb7f98d09878f
-rw-r--r--CMakeLists.txt77
l---------aarch64/libheremaps-engine.so.11
-rwxr-xr-xaarch64/libheremaps-engine.so.1.0.6_6bin1316712 -> 0 bytes
l---------aarch64/libmaps-plugin-here.so1
l---------aarch64/libmaps-plugin-here.so.01
-rwxr-xr-xaarch64/libmaps-plugin-here.so.0.1.6bin1388904 -> 0 bytes
l---------arm/libheremaps-engine.so.11
-rwxr-xr-xarm/libheremaps-engine.so.1.0.6_6bin1003124 -> 0 bytes
l---------arm/libmaps-plugin-here.so1
l---------arm/libmaps-plugin-here.so.01
-rwxr-xr-xarm/libmaps-plugin-here.so.0.1.6bin1158132 -> 0 bytes
l---------i586/libheremaps-engine.so.11
-rwxr-xr-xi586/libheremaps-engine.so.1.0.6_6bin1297972 -> 0 bytes
l---------i586/libmaps-plugin-here.so1
l---------i586/libmaps-plugin-here.so.01
-rwxr-xr-xi586/libmaps-plugin-here.so.0.1.6bin1162972 -> 0 bytes
-rwxr-xr-xinc/engine/base/BaseBufferBase.h56
-rwxr-xr-xinc/engine/base/BaseByteBuffer.h37
-rwxr-xr-xinc/engine/base/BaseObject.h41
-rwxr-xr-xinc/engine/base/EventDrivenThread.h127
-rwxr-xr-xinc/engine/base/HereObject.h41
-rwxr-xr-xinc/engine/base/Timer.h169
-rwxr-xr-xinc/engine/common/Address.h307
-rwxr-xr-xinc/engine/common/ApplicationContext.h134
-rwxr-xr-xinc/engine/common/BaseQuery.h104
-rwxr-xr-xinc/engine/common/BaseReply.h99
-rwxr-xr-xinc/engine/common/CommunicationError.h142
-rwxr-xr-xinc/engine/common/ErrorBase.h120
-rwxr-xr-xinc/engine/common/GeoBoundingArea.h75
-rwxr-xr-xinc/engine/common/GeoBoundingBox.h187
-rwxr-xr-xinc/engine/common/GeoBoundingCircle.h138
-rwxr-xr-xinc/engine/common/GeoCoordinates.h169
-rwxr-xr-xinc/engine/common/GeoLocation.h219
-rwxr-xr-xinc/engine/common/HereConfig.h41
-rwxr-xr-xinc/engine/common/HereMaps_global.h128
-rwxr-xr-xinc/engine/common/Mutex.h151
-rwxr-xr-xinc/engine/common/Operators.h106
-rwxr-xr-xinc/engine/common/ParserError.h149
-rwxr-xr-xinc/engine/common/QueryListener.h107
-rw-r--r--inc/engine/common/RestItemHandle.h72
-rw-r--r--inc/engine/common/Size.h114
-rwxr-xr-xinc/engine/common/TileKey.h159
-rwxr-xr-xinc/engine/debug/EchoQuery.h44
-rw-r--r--inc/engine/debug/EchoReply.h44
-rwxr-xr-xinc/engine/finder/BaseContent.h129
-rw-r--r--inc/engine/finder/BaseFinderReply.h64
-rwxr-xr-xinc/engine/finder/Category.h172
-rwxr-xr-xinc/engine/finder/CategoryId.h180
-rwxr-xr-xinc/engine/finder/ContactDetails.h134
-rwxr-xr-xinc/engine/finder/DiscoveryQuery.h295
-rwxr-xr-xinc/engine/finder/DiscoveryReply.h125
-rwxr-xr-xinc/engine/finder/EditorialContent.h117
-rwxr-xr-xinc/engine/finder/ExtendedAttribute.h132
-rwxr-xr-xinc/engine/finder/FinderError.h118
-rwxr-xr-xinc/engine/finder/FinderQueryListener.h95
-rwxr-xr-xinc/engine/finder/ImageContent.h135
-rwxr-xr-xinc/engine/finder/LinkObject.h159
-rwxr-xr-xinc/engine/finder/PlaceDetails.h363
-rwxr-xr-xinc/engine/finder/PlaceDetailsQuery.h155
-rwxr-xr-xinc/engine/finder/PlaceDetailsReply.h70
-rwxr-xr-xinc/engine/finder/PlaceItem.h234
-rwxr-xr-xinc/engine/finder/PlacesError.h100
-rwxr-xr-xinc/engine/finder/PlacesGlobals.h39
-rwxr-xr-xinc/engine/finder/Ratings.h100
-rwxr-xr-xinc/engine/finder/RelatedItem.h128
-rwxr-xr-xinc/engine/finder/ReviewContent.h182
-rwxr-xr-xinc/engine/finder/SearchContext.h174
-rwxr-xr-xinc/engine/finder/SearchItem.h140
-rwxr-xr-xinc/engine/geocoder/GeoCoderQuery.h201
-rwxr-xr-xinc/engine/geocoder/GeoCoderQueryBase.h237
-rwxr-xr-xinc/engine/geocoder/GeoCoderQueryListener.h80
-rwxr-xr-xinc/engine/geocoder/GeoCoderReply.h89
-rwxr-xr-xinc/engine/geocoder/GeoCoderReplyParser.h192
-rwxr-xr-xinc/engine/geocoder/GeoCoderReplyParserError.h66
-rwxr-xr-xinc/engine/geocoder/MetaInfo.h123
-rwxr-xr-xinc/engine/geocoder/Result.h212
-rwxr-xr-xinc/engine/geocoder/ReverseGeoCoderQuery.h164
-rwxr-xr-xinc/engine/graphic/Bitmap.h68
-rwxr-xr-xinc/engine/graphic/BufferInfo.h291
-rwxr-xr-xinc/engine/graphic/Canvas.h57
-rwxr-xr-xinc/engine/graphic/Color.h483
-rwxr-xr-xinc/engine/graphic/Dimension.h159
-rwxr-xr-xinc/engine/graphic/DoubleMatrix4.h388
-rwxr-xr-xinc/engine/graphic/FloatDimension.h159
-rwxr-xr-xinc/engine/graphic/FloatPoint.h217
-rwxr-xr-xinc/engine/graphic/FloatRectangle.h329
-rwxr-xr-xinc/engine/graphic/Grp_GL_macro.h266
-rwxr-xr-xinc/engine/graphic/Grp_Util.h69
-rwxr-xr-xinc/engine/graphic/Grp_UtilType.h314
-rwxr-xr-xinc/engine/graphic/PngDecoder.h133
-rwxr-xr-xinc/engine/graphic/Point.h217
-rwxr-xr-xinc/engine/graphic/Rectangle.h327
-rw-r--r--inc/engine/internal/Distance.h39
-rw-r--r--inc/engine/internal/DoublePoint.h36
-rw-r--r--inc/engine/internal/DoublePoint3.h38
-rwxr-xr-xinc/engine/internal/EncodingConversion.h74
-rw-r--r--inc/engine/internal/FPSCounter.h41
-rwxr-xr-xinc/engine/internal/GeoMercatorProjection.h74
-rwxr-xr-xinc/engine/internal/GeoOpenGlRenderer.h150
-rw-r--r--inc/engine/internal/HereLogo.h4631
-rwxr-xr-xinc/engine/internal/JsonParser.h183
-rw-r--r--inc/engine/internal/Logger.h133
-rw-r--r--inc/engine/internal/Opt.h149
-rw-r--r--inc/engine/internal/Proximity.h44
-rwxr-xr-xinc/engine/internal/RestCurl.h68
-rwxr-xr-xinc/engine/internal/RestEngine.h181
-rwxr-xr-xinc/engine/internal/RestItem.h80
-rw-r--r--inc/engine/internal/ServerStringBuilder.h58
-rwxr-xr-xinc/engine/internal/StringHelper.h227
-rwxr-xr-xinc/engine/maps/DrawableBitmap.h98
-rw-r--r--inc/engine/maps/GeoMapObject.h128
-rwxr-xr-xinc/engine/maps/GeoMapObjectMarker.h165
-rwxr-xr-xinc/engine/maps/GeoMapObjectPolygon.h176
-rwxr-xr-xinc/engine/maps/GeoMapObjectPolyline.h205
-rwxr-xr-xinc/engine/maps/GeoObjectProvider.h140
-rwxr-xr-xinc/engine/maps/GeoProjection.h104
-rwxr-xr-xinc/engine/maps/GeoProjectionNode.h94
-rwxr-xr-xinc/engine/maps/GeoProvider.h115
-rwxr-xr-xinc/engine/maps/GeoProviderManager.h282
-rwxr-xr-xinc/engine/maps/GeoTile.h284
-rwxr-xr-xinc/engine/maps/GeoTileProvider.h95
-rwxr-xr-xinc/engine/maps/GeoTiledMap.h431
-rwxr-xr-xinc/engine/maps/GlTexture.h88
-rwxr-xr-xinc/engine/routes/GeoRoute.h251
-rwxr-xr-xinc/engine/routes/GeoRouteQuery.h387
-rwxr-xr-xinc/engine/routes/GeoRouteQueryListener.h79
-rwxr-xr-xinc/engine/routes/GeoRouteReply.h82
-rwxr-xr-xinc/engine/routes/GeoRouterReplyParser.h212
-rwxr-xr-xinc/engine/routes/Maneuver.h201
-rwxr-xr-xinc/engine/routes/RouteSegment.h174
-rwxr-xr-xinc/engine/routes/RouterError.h88
-rwxr-xr-xinc/engine/tilefetcher/TileFetcherError.h79
-rw-r--r--inc/engine/tilefetcher/TileFetcherMetaQuery.h99
-rw-r--r--inc/engine/tilefetcher/TileFetcherMetaQueryListener.h66
-rw-r--r--inc/engine/tilefetcher/TileFetcherMetaReply.h64
-rwxr-xr-xinc/engine/tilefetcher/TileFetcherQuery.h167
-rw-r--r--inc/engine/tilefetcher/TileFetcherQueryListener.h65
-rwxr-xr-xinc/engine/tilefetcher/TileFetcherReply.h86
-rw-r--r--inc/here_api.h75
-rw-r--r--inc/here_base.h58
-rw-r--r--inc/here_geocode.h74
-rw-r--r--inc/here_manager.h104
-rw-r--r--inc/here_place.h125
-rw-r--r--inc/here_revgeocode.h72
-rw-r--r--inc/here_route.h73
-rw-r--r--inc/here_types.h39
-rw-r--r--inc/here_utils.h148
l---------lib/aarch64/libheremaps-engine.so (renamed from aarch64/libheremaps-engine.so)0
l---------lib/aarch64/libheremaps-engine.so.11
-rwxr-xr-xlib/aarch64/libheremaps-engine.so.1.0.6_7bin0 -> 14853744 bytes
l---------lib/arm/libheremaps-engine.so (renamed from arm/libheremaps-engine.so)0
l---------lib/arm/libheremaps-engine.so.11
-rwxr-xr-xlib/arm/libheremaps-engine.so.1.0.6_7bin0 -> 12021388 bytes
l---------lib/i586/libheremaps-engine.so (renamed from i586/libheremaps-engine.so)0
l---------lib/i586/libheremaps-engine.so.11
-rwxr-xr-xlib/i586/libheremaps-engine.so.1.0.6_7bin0 -> 12141496 bytes
l---------lib/x86_64/libheremaps-engine.so (renamed from x86_64/libheremaps-engine.so)0
l---------lib/x86_64/libheremaps-engine.so.11
-rwxr-xr-xlib/x86_64/libheremaps-engine.so.1.0.6_7bin0 -> 14749152 bytes
-rw-r--r--maps-plugin-here.changes29
-rw-r--r--maps-plugin-here.pc.in14
-rw-r--r--packaging/maps-plugin-here.spec25
-rw-r--r--src/here_api.cpp538
-rw-r--r--src/here_base.cpp130
-rw-r--r--src/here_geocode.cpp284
-rw-r--r--src/here_manager.cpp481
-rw-r--r--src/here_place.cpp1316
-rw-r--r--src/here_plugin.cpp302
-rw-r--r--src/here_revgeocode.cpp202
-rw-r--r--src/here_route.cpp431
-rw-r--r--src/here_utils.cpp359
l---------x86_64/libheremaps-engine.so.11
-rwxr-xr-xx86_64/libheremaps-engine.so.1.0.6_6bin1331992 -> 0 bytes
l---------x86_64/libmaps-plugin-here.so1
l---------x86_64/libmaps-plugin-here.so.01
-rwxr-xr-xx86_64/libmaps-plugin-here.so.0.1.6bin1374216 -> 0 bytes
176 files changed, 27323 insertions, 21 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c54075..cb083d2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,78 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT("maps-plugin-here")
+SET(pkg_name "maps-plugin-here")
+PROJECT(${pkg_name} C CXX)
+SET(CMAKE_INSTALL_PREFIX /usr)
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-INSTALL(FILES ${ARCH}/libmaps-plugin-here.so DESTINATION lib/maps/plugins)
-INSTALL(FILES ${ARCH}/libheremaps-engine.so DESTINATION lib)
+# Dependencies
+SET(dependents "glib-2.0 gmodule-2.0 libxml-2.0 dlog capi-network-connection capi-appfw-app-manager capi-maps-service")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED ${dependents})
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ SET(EXTRA_CXXFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+
+# Build
+SET(CMAKE_INSTALL_PREFIX /usr)
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden -fPIC -Wall -Werror")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -Wall -fPIC -std=c++0x -fvisibility=hidden")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DEXPORT_API=__attribute__((visibility(\"default\")))")
+ADD_DEFINITIONS("-DTIZEN_DEBUG")
+
+
+# Main Include file
+SET(INC_DIR
+ inc
+ inc/engine
+)
+
+INCLUDE_DIRECTORIES(
+ ${INC_DIR}
+)
+
+#This file must be corrected
+
+# Source Lists
+SET(SRCS
+ # Maps API
+ src/here_plugin.cpp
+
+ # Here plug-in
+ src/here_api.cpp
+ src/here_base.cpp
+ src/here_manager.cpp
+ src/here_geocode.cpp
+ src/here_place.cpp
+ src/here_revgeocode.cpp
+ src/here_route.cpp
+ src/here_utils.cpp
+)
+
+ADD_LIBRARY(${pkg_name} SHARED ${SRCS})
+
+SET_TARGET_PROPERTIES(${pkg_name}
+ PROPERTIES
+ VERSION ${FULLVER}
+ SOVERSION ${MAJORVER}
+ CLEAN_DIRECT_OUTPUT 1
+)
+
+TARGET_LINK_LIBRARIES(${pkg_name} ${pkgs_LDFLAGS})
+
+# Install
+INSTALL(TARGETS ${pkg_name} DESTINATION ${LIBDIR}/maps/plugins)
+INSTALL(FILES lib/${ARCH}/libheremaps-engine.so DESTINATION lib)
+
+# Test Suite
+#IF("${BINTYPE}" STREQUAL "eng")
+#ENDIF("${BINTYPE}" STREQUAL "eng")
diff --git a/aarch64/libheremaps-engine.so.1 b/aarch64/libheremaps-engine.so.1
deleted file mode 120000
index 0fc20c3..0000000
--- a/aarch64/libheremaps-engine.so.1
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6 \ No newline at end of file
diff --git a/aarch64/libheremaps-engine.so.1.0.6_6 b/aarch64/libheremaps-engine.so.1.0.6_6
deleted file mode 100755
index eb41c8f..0000000
--- a/aarch64/libheremaps-engine.so.1.0.6_6
+++ /dev/null
Binary files differ
diff --git a/aarch64/libmaps-plugin-here.so b/aarch64/libmaps-plugin-here.so
deleted file mode 120000
index 89d69a6..0000000
--- a/aarch64/libmaps-plugin-here.so
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0 \ No newline at end of file
diff --git a/aarch64/libmaps-plugin-here.so.0 b/aarch64/libmaps-plugin-here.so.0
deleted file mode 120000
index f343856..0000000
--- a/aarch64/libmaps-plugin-here.so.0
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6 \ No newline at end of file
diff --git a/aarch64/libmaps-plugin-here.so.0.1.6 b/aarch64/libmaps-plugin-here.so.0.1.6
deleted file mode 100755
index f89f98f..0000000
--- a/aarch64/libmaps-plugin-here.so.0.1.6
+++ /dev/null
Binary files differ
diff --git a/arm/libheremaps-engine.so.1 b/arm/libheremaps-engine.so.1
deleted file mode 120000
index 0fc20c3..0000000
--- a/arm/libheremaps-engine.so.1
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6 \ No newline at end of file
diff --git a/arm/libheremaps-engine.so.1.0.6_6 b/arm/libheremaps-engine.so.1.0.6_6
deleted file mode 100755
index f25ef47..0000000
--- a/arm/libheremaps-engine.so.1.0.6_6
+++ /dev/null
Binary files differ
diff --git a/arm/libmaps-plugin-here.so b/arm/libmaps-plugin-here.so
deleted file mode 120000
index 89d69a6..0000000
--- a/arm/libmaps-plugin-here.so
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0 \ No newline at end of file
diff --git a/arm/libmaps-plugin-here.so.0 b/arm/libmaps-plugin-here.so.0
deleted file mode 120000
index f343856..0000000
--- a/arm/libmaps-plugin-here.so.0
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6 \ No newline at end of file
diff --git a/arm/libmaps-plugin-here.so.0.1.6 b/arm/libmaps-plugin-here.so.0.1.6
deleted file mode 100755
index 34228b2..0000000
--- a/arm/libmaps-plugin-here.so.0.1.6
+++ /dev/null
Binary files differ
diff --git a/i586/libheremaps-engine.so.1 b/i586/libheremaps-engine.so.1
deleted file mode 120000
index 0fc20c3..0000000
--- a/i586/libheremaps-engine.so.1
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6 \ No newline at end of file
diff --git a/i586/libheremaps-engine.so.1.0.6_6 b/i586/libheremaps-engine.so.1.0.6_6
deleted file mode 100755
index 400a010..0000000
--- a/i586/libheremaps-engine.so.1.0.6_6
+++ /dev/null
Binary files differ
diff --git a/i586/libmaps-plugin-here.so b/i586/libmaps-plugin-here.so
deleted file mode 120000
index 89d69a6..0000000
--- a/i586/libmaps-plugin-here.so
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0 \ No newline at end of file
diff --git a/i586/libmaps-plugin-here.so.0 b/i586/libmaps-plugin-here.so.0
deleted file mode 120000
index f343856..0000000
--- a/i586/libmaps-plugin-here.so.0
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6 \ No newline at end of file
diff --git a/i586/libmaps-plugin-here.so.0.1.6 b/i586/libmaps-plugin-here.so.0.1.6
deleted file mode 100755
index b2c636f..0000000
--- a/i586/libmaps-plugin-here.so.0.1.6
+++ /dev/null
Binary files differ
diff --git a/inc/engine/base/BaseBufferBase.h b/inc/engine/base/BaseBufferBase.h
new file mode 100755
index 0000000..79950de
--- /dev/null
+++ b/inc/engine/base/BaseBufferBase.h
@@ -0,0 +1,56 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_BUFFER_BASE_H
+#define BASE_BUFFER_BASE_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class BufferBase
+{
+public:
+ BufferBase(void);
+ virtual ~BufferBase(void);
+
+ int GetCapacity(void) const;
+ int GetLimit(void) const;
+
+ class _BufferData
+ {
+ public:
+ _BufferData(void);
+ virtual ~_BufferData(void);
+ byte* GetArray(void);
+
+
+ // Attribute
+ unsigned long long capacityInByte;
+ long refCount;
+ }; // _BufferData
+
+ int _capacity;
+ int _position;
+ int _limit;
+ int _mark;
+ _BufferData* _pData;
+ byte* __pArrayStart;
+}; // BufferBase
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_BUFFER_BASE_H */
diff --git a/inc/engine/base/BaseByteBuffer.h b/inc/engine/base/BaseByteBuffer.h
new file mode 100755
index 0000000..0dd4c99
--- /dev/null
+++ b/inc/engine/base/BaseByteBuffer.h
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_BYTE_BUFFER_H
+#define BASE_BYTE_BUFFER_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseBufferBase.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class ByteBuffer : public BufferBase
+{
+public:
+ ByteBuffer(void);
+ virtual ~ByteBuffer(void);
+ unsigned long Construct(const byte* pBuffer, int index, int length, int capacity);
+ byte* GetPointer(void) const;
+
+}; // ByteBuffer
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_BYTE_BUFFER_H */
diff --git a/inc/engine/base/BaseObject.h b/inc/engine/base/BaseObject.h
new file mode 100755
index 0000000..ba651a1
--- /dev/null
+++ b/inc/engine/base/BaseObject.h
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_OBJECT_H
+#define BASE_OBJECT_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Object
+{
+public:
+ Object(void);
+ virtual ~Object(void);
+ virtual bool Equals(const Object& obj) const;
+ virtual long GetHashCode(void) const;
+
+protected:
+ Object(const Object& obj);
+ Object& operator =(const Object& rhs);
+ virtual void Object_Reserved1(void) { }
+
+}; // Object
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_OBJECT_H */
diff --git a/inc/engine/base/EventDrivenThread.h b/inc/engine/base/EventDrivenThread.h
new file mode 100755
index 0000000..05215c1
--- /dev/null
+++ b/inc/engine/base/EventDrivenThread.h
@@ -0,0 +1,127 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_EVENTDRIVENTHREAD_H
+#define HERE_EVENTDRIVENTHREAD_H
+
+#include <glib.h>
+#include <sys/eventfd.h>
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EventDrivenThread;
+
+typedef std::vector<void*> FireArg_List;
+
+class EventDrivenThread : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class.
+ *
+ * @since 2.0
+ *
+ * @remarks After creating an instance of this class, one of the
+ * Construct() methods must be called explicitly to initialize this instance.
+ */
+ EventDrivenThread(void);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ *
+ */
+ virtual ~EventDrivenThread(void);
+
+ result Construct(bool Delegate);
+
+ void Quit(void);
+
+ int Join(void);
+
+ /**
+ * Sends a user event to the event-driven thread.
+ *
+ * @since 2.0
+ *
+ * @final Although this method is virtual, it must not be overridden.
+ * If overridden, it may not work as expected.
+ *
+ * @return An error code
+ * @param[in] requestId The user-defined event ID
+ * @param[in] pArgs A pointer to the list of arguments
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_STATE The thread is in an invalid state.
+ * @exception E_OUT_OF_MEMORY The memory is insufficient.
+ * @exception E_SYSTEM A system error has occurred.
+ *
+ * @see OnUserEventReceivedN()
+ */
+ int SendUserEvent(int requestType, void* pArgs);
+
+ void Fire(void* pArgs);
+
+ virtual void FireImpl( void* pArgs) = 0;
+
+ /**
+ * Called when the user event is received.
+ *
+ * @since 2.0
+ *
+ * @param[in] requestId The user-defined event ID
+ * @param[in] pArgs A pointer to the list of arguments
+ *
+ * @see SendUserEvent()
+ */
+ virtual void OnUserEventReceivedN(int requestId, void* pArgs) = 0;
+
+private:
+ bool __constructed;
+ bool __is_quit;
+ GSource* __pSource;
+ GIOChannel* __pChannel;
+ GMainContext* __pGmainContext;
+
+ int __WorkingThreadNum;
+ bool __WaitingForJoin;
+ pthread_cond_t __join_condition;
+ pthread_mutex_t __join_mutex;
+
+ class ThreadArg
+ {
+ public:
+ int requestType;
+ void* pArg;
+ void* ReqInstance;
+ };
+
+ FireArg_List FireArgs;
+ pthread_mutex_t FireArgsLock;
+
+ static void* EventDrivenThreadHandler(void* thread_arg);
+ static gboolean OnEventReceived(GIOChannel* pChannel, GIOCondition condition, gpointer data);
+ static gboolean __stopWaitingForJoin(gpointer data);
+
+}; // EventDrivenThread
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_EVENTDRIVENTHREAD_H */
diff --git a/inc/engine/base/HereObject.h b/inc/engine/base/HereObject.h
new file mode 100755
index 0000000..b0928a3
--- /dev/null
+++ b/inc/engine/base/HereObject.h
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_OBJECT_H
+#define HERE_OBJECT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class HereObject: public Object
+{
+public:
+ HereObject();
+ HereObject(void* user_data);
+ ~HereObject();
+ void set_user_data(void* user_data);
+ void* data(void);
+
+protected:
+ void* __user_data;
+
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_OBJECT_H */
diff --git a/inc/engine/base/Timer.h b/inc/engine/base/Timer.h
new file mode 100755
index 0000000..166fc40
--- /dev/null
+++ b/inc/engine/base/Timer.h
@@ -0,0 +1,169 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_TIMER_H
+#define HERE_TIMER_H
+
+#include <glib.h>
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Timer;
+
+enum TimerStatus
+{
+ TIMER_STATUS_NOT_ACTIVATED, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+ TIMER_STATUS_ACTIVATED, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+ TIMER_STATUS_CANCELED, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+ TIMER_STATUS_EXPIRED, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+ TIMER_STATUS_ACTIVATED_REPEATABLE, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+};
+
+class ITimerEventListener
+{
+public:
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~ITimerEventListener(void) {}
+
+ /**
+ * Called when the timer has expired.
+ *
+ * @since 2.0
+ *
+ * @param[in] timer The expired timer
+ */
+ virtual void OnTimerExpired(Timer& timer) = 0;
+
+}; // ITimerEventListener
+
+class Timer : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class.
+ *
+ * @since 2.0
+ */
+ Timer(void);
+
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Timer(void);
+
+ /**
+ * Initializes this instance of %Timer with the specified listener.
+ *
+ * @since 2.0
+ *
+ * @return An error code
+ * @param[in] listener The event listener
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_MEMORY The memory is insufficient.
+ * @exception E_SYSTEM A system error has occurred.
+ */
+ int Construct(ITimerEventListener& listener);
+
+ /**
+ * Starts the timer.
+ *
+ * @if OSPCOMPAT
+ * @brief <i> [Compatibility] </i>
+ * @endif
+ *
+ * @since 2.0
+ *
+ * @if OSPCOMPAT
+ * @compatibility This method has compatibility issues with Tizen API versions @b prior @b to @b 2.1. @n
+ * For more information, see @ref CompTimerStartPage "here".
+ * @endif
+ *
+ * @return An error code
+ * @param[in] timeout The timeout interval in milliseconds
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_ARG The specified input parameter is invalid.
+ * @exception E_INVALID_STATE The timer cannot start as it is in an invalid state.
+ * @exception E_SYSTEM A system error has occurred.
+ * @remarks Once the timer has been started, it cannot be started again until it has expired.
+ * @see Cancel()
+ */
+ int Start(int timeout);
+
+ /**
+ * @page CompTimerStartPage Compatibility for Start(int timeout)
+ * @section CompTimerStartPageIssueSection Issues
+ * Implementation of this method in Tizen API versions prior to 2.1 has the following issue: @n
+ * -# The method returns @c E_INVALID_ARG if timeout is equal to zero.
+ *
+ * @section CompTimerStartPageSolutionSection Resolutions
+ * The issue mentioned above is resolved in Tizen API version 2.1, and it is recommended to use Tizen API version 2.1 or above.
+ * -# In case of zero, %Timer sets the timeout to the best possible minimum interval without returning @c E_INVALID_ARG.
+ */
+
+ /**
+ * Starts the timer. @n
+ * The timer expires repeatedly until it is cancelled.
+ *
+ * @since 2.0
+ *
+ * @return An error code
+ * @param[in] interval The timeout interval in milliseconds
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_ARG The specified input parameter is invalid.
+ * @exception E_INVALID_STATE The timer cannot start as it is in an invalid state.
+ * @exception E_SYSTEM A system error has occurred.
+ * @remarks To stop the timer expiration or restart the timer, the timer must be cancelled.
+ * @see Cancel()
+ */
+ int StartAsRepeatable(int interval);
+
+ /**
+ * Cancels the timer.
+ *
+ * @since 2.0
+ *
+ * @return An error code
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_SYSTEM A system error has occurred.
+ * @remarks The started timer can be cancelled when it does not get expired. @n
+ * If the timer has already expired, this method also returns @c E_SUCCESS which causes the same effect as when cancelled normally.
+ */
+ int Cancel(void);
+
+private:
+ Timer(const Timer& rhs);
+
+ Timer& operator =(const Timer& rhs);
+
+private:
+ friend class _TimerImpl;
+ class _TimerImpl * __pTimerImpl;
+
+}; // Timer
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_TIMER_H */
diff --git a/inc/engine/common/Address.h b/inc/engine/common/Address.h
new file mode 100755
index 0000000..0ad3889
--- /dev/null
+++ b/inc/engine/common/Address.h
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ADDRESS_H
+#define ADDRESS_H
+
+#include "HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a street address. It is used both in geocoding
+ * requests and in responses received from the server.
+ *
+ */
+class EXPORT_API Address
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ Address();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs A constant reference to an <code>Address</code> object to
+ * copy.
+ */
+ Address(const Address& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~Address();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an <code>Address</code> object to
+ * copy.
+ *
+ * @return A reference to the given instance of <code>Address</code> whose
+ * contents now mirror those of the object supplied by the caller.
+ */
+ Address& operator=(const Address& rRhs);
+
+ /**
+ * This method sets the name of the country.
+ *
+ * @param sCountry A constant reference to a string containing the name of
+ * a country.
+ */
+ void SetCountry(const String& sCountry);
+
+ /**
+ * This method retrieves the country code.
+ *
+ * @return A constant reference to a string containing the country code.
+ */
+ const String& GetCountryCode() const;
+
+ /**
+ * This method sets the country code.
+ *
+ * @param sCountryCode A constant reference to a string containing the
+ * country code.
+ */
+ void SetCountryCode(const String& sCountryCode);
+
+ /**
+ * This method retrieves the name of the country.
+ *
+ * @return A constant reference to a string containing the name of
+ * a country.
+ */
+ const String& GetCountry() const;
+
+ /**
+ * This method sets the name of the county.
+ *
+ * @param sCounty A constant reference to a string containing the name of
+ * a county.
+ */
+ void SetCounty(const String& sCounty);
+
+ /**
+ * This method retrieves the name of the county.
+ *
+ * @return A constant reference to a string containing the name of
+ * a county.
+ */
+ const String& GetCounty() const;
+
+ /**
+ * This method sets the address label.
+ *
+ * @param sLabel A constant reference to a string containing the label.
+ */
+ void SetLabel(const String& sLabel);
+
+ /**
+ * This method retrieves the address label.
+ *
+ * @return A constant reference to a string containing the label.
+ */
+ const String& GetLabel() const;
+
+ /**
+ * This method sets the identifier of the state. State corresponds to a state
+ * in the USA or Bundesland in Germany.
+ *
+ * @param sState A constant reference to a string containing the name or the
+ * abbreviation of the name of the state.
+ */
+ void SetState(const String& sState);
+
+ /**
+ * This method retrieves the identifier the state. State corresponds to a
+ * state in the USA or Bundesland in Germany.
+ *
+ * @return A constant reference to a string containing the identifier of the
+ * state.
+ */
+ const String& GetState() const;
+
+ /**
+ * This method sets the name of the city.
+ *
+ * @param sCity A constant reference to a string containing the name of the
+ * city.
+ */
+ void SetCity(const String& sCity);
+
+ /**
+ * This method retrieves the name of the city.
+ *
+ * @return A constant reference to a string containing the name of the
+ * city.
+ */
+ const String& GetCity() const;
+
+ /**
+ * This method sets the name of the district. A district corresponds either to
+ * an administrative area within a city or a neighborhood, for example "Greenwich
+ * Village", "Kreuzberg" (in Berlin).
+ *
+ * @param sDistrict A constant reference to a string containing the name of the
+ * district.
+ */
+ void SetDistrict(const String& sDistrict);
+
+ /**
+ * This method retrieves the name of the district. A district corresponds
+ * either to an administrative area within a city or a neighborhood, for
+ * example "Greenwich Village", "Kreuzberg" (in Berlin).
+ *
+ * @return A constant reference to a string containing the name of the
+ * district.
+ */
+ const String& GetDistrict() const;
+
+ /**
+ * This method sets the street name.
+ *
+ * @param sStreet A constant reference to a string containing the name of the
+ * street.
+ */
+ void SetStreet(const String& sStreet);
+
+ /**
+ * This method retrieves the street name.
+ *
+ * @return A constant reference to a string containing the name of the
+ * street.
+ */
+ const String& GetStreet() const;
+
+ /**
+ * This method sets the house number (or house name if appropriate).
+ *
+ * @param sHouseNumber A constant reference to a string containing the
+ * house number (or the house name if appropriate).
+ */
+ void SetHouseNumber(const String& sHouseNumber);
+
+ /**
+ * This method retrieves the house number (or house name if appropriate).
+ *
+ * @return A constant reference to a string containing the
+ * house number (or the house name if appropriate).
+ */
+ const String& GetHouseNumber() const;
+
+ /**
+ * This method sets the post code.
+ *
+ * @param sPostalCode A constant reference to a string containing the post
+ * code.
+ */
+ void SetPostalCode(const String& sPostalCode);
+
+ /**
+ * This method retrieves the post code.
+ *
+ * @return A constant reference to a string containing the post
+ * code.
+ */
+ const String& GetPostalCode() const;
+
+ /**
+ * This method sets the identifier of the floor (within a building).
+ *
+ * @param sFloor A constant reference to a string containing the identifier
+ * of the floor.
+ */
+ void SetFloor(const String& sFloor);
+
+ /**
+ * This method retrieves the identifier of the floor (within a building).
+ *
+ * @return A constant reference to a string containing the identifier
+ * of the floor.
+ */
+ const String& GetFloor() const;
+
+ /**
+ * This method sets the identifier of suite (within a building).
+ *
+ * @param sSuite A constant reference to a string containing the identifier
+ * of the suite.
+ */
+ void SetSuite(const String& sSuite);
+
+ /**
+ * This method retrieves the identifier of suite (within a building).
+ *
+ * @return A constant reference to a string containing the identifier
+ * of the suite.
+ */
+ const String& GetSuite() const;
+
+ /**
+ * This method associates an adidtional data item with the given address.
+ *
+ * @param sKey A constant reference to a string containing the key
+ * that identifies the data item (in a map of additional data items).
+ *
+ * @param sValue A constant reference to a string containing the value of
+ * the data item identified by <code>sKey</code>.
+ */
+ void AddAdditionalData(const String& sKey, const String& sValue);
+
+ /**
+ * This method retrieves the value of an additional address data item on the
+ * basis of a key provided by the caller.
+ *
+ * @param sKey A constant reference to a string containing the key
+ * that identifies the data item to retrieve.
+ */
+ const String* GetAdditionalDataValue(const String& sKey) const;
+
+ /**
+ * This method retrieves a value indicating how many additional address data
+ * items have been associated with the given instance of
+ * <code>Address</code>.
+ *
+ * @return An integer indicating the number of additional data items that
+ * are associated with the given instance of <code>Address</code>.
+ */
+ size_t GetNumAdditionalDataEntries() const;
+
+ /**
+ * This method retrieves the key of the additional data item at the index
+ * specified by the caller.
+ *
+ * @param idx An integer value specifying the index of the additional address
+ * data item whose key is to be retrieved.
+ *
+ * @return A constant pointer to a string containing the key
+ * for an additional address data item.
+ */
+ const String* GetAdditionalDataKey(size_t idx) const;
+
+private:
+ class AddressImpl;
+ AddressImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/ApplicationContext.h b/inc/engine/common/ApplicationContext.h
new file mode 100755
index 0000000..d19dd95
--- /dev/null
+++ b/inc/engine/common/ApplicationContext.h
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef APPLICATIONCONTEXT_H
+#define APPLICATIONCONTEXT_H
+
+#include "common/HereMaps_global.h"
+
+#include <vector>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates the credentials required to use the Geocoding API.
+ * The credentials consists of the app code and app id.
+ *
+ * The class is a singleton.
+ */
+class EXPORT_API ApplicationContext
+{
+public:
+ /**
+ * This is the destructor.
+ */
+ ~ApplicationContext();
+
+ /**
+ * This method sets the preferred language, using a two-letter BCP-47 code
+ * supplied by the caller.
+ *
+ * @param sLanguage A const reference to a string containing a two-letter
+ * code identifying the preferred map language.
+ */
+ void SetPreferredLanguage(const String& sLanguage);
+
+ /**
+ * This method retrieves a string containing a BCP-47 code that indicates
+ * the preferred language.
+ *
+ * @return A constant reference to a string containing a two-letter BCP-47
+ * code indicating the preferred language.
+ */
+ const String& GetPreferredLanguage() const;
+
+ /**
+ * This method retrieves the app code.
+ *
+ * @return A constant reference to a string containing the app code.
+ */
+ const String& GetAppCode() const;
+
+ /**
+ * This method retrieves the app id.
+ *
+ * @return A constant reference to a string containing the app id.
+ */
+ const String& GetAppId() const;
+
+ /**
+ * This is a static method which returns the singleton's instance.
+ *
+ * @return A static reference to the instance of this singleton class.
+ */
+ static ApplicationContext& GetInstance();
+
+ /**
+ * This method initialises the singleton object.
+ *
+ * @param sAppCode A constant reference to a string containing the app code.
+ *
+ * @param sAppId A constant reference to a string containing the app id.
+ *
+ * @return A Boolean indicating the result of initialization,
+ * <code>true</code> on success, <code>false</code> on failure. Note
+ * that if the object already exists and has been initialized,
+ * further attempts to call this methods fail (the return value is
+ * <code>false</code>.
+ */
+ bool Initialize(const String& sAppCode, const String& sAppId);
+
+ /**
+ * This method queries initialisation status.
+ *
+ * @return A Boolean indicating the status of initialization,
+ * <code>true</code> if the object is initialized, otherwise
+ * <code>false</code>.
+ */
+ bool IsInitialized() const;
+
+ /**
+ * This method sets a flag to indicate whether a high-resolution map is to be used.
+ *
+ * @param haveHighResolution A Boolean, <code>true</code> to indicate that a
+ * high-resolution map is to be used, otherwise <code>false</code>.
+ */
+ void SetHighResolutionMap(bool haveHighResolution);
+
+ /**
+ * This method retrieves a Boolean value indicating whether a high-resolution map is used.
+ *
+ * @return A Boolean, <code>true</code> to indicate that a
+ * high-resolution map is (to be) used, otherwise <code>false</code>.
+ */
+ bool HaveHighResolutionMap() const;
+
+private:
+ /**
+ * This method is a private constructor for the singleton.
+ */
+ ApplicationContext();
+
+ HERE_MAPS_NO_COPY_NO_ASSIGN(ApplicationContext);
+
+ class ApplicationContextImpl;
+ ApplicationContextImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // APPLICATIONCONTEXT_H
diff --git a/inc/engine/common/BaseQuery.h b/inc/engine/common/BaseQuery.h
new file mode 100755
index 0000000..3123bd7
--- /dev/null
+++ b/inc/engine/common/BaseQuery.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEQUERY_H
+#define BASEQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+#include "common/RestItemHandle.h"
+#ifdef TIZEN_MIGRATION
+#include "base/HereObject.h"
+#else
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class QueryListener;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/**
+ * This class is the base class representing any rest based query class
+ * in this library
+ */
+class BaseQuery
+{
+public:
+ typedef int RequestId;
+
+ /**
+ * This is the destructor.
+ */
+ virtual ~BaseQuery();
+
+ /**
+ * This method creates the query URI. It is to be implemented be derived classes.
+ *
+ * @return URI string.
+ */
+ virtual String CreateUri() const = 0;
+
+protected:
+ /**
+ * This constant represents an illegal URL (an empty string).
+ */
+ static const String ILLEGAL_URL;
+
+ /**
+ * This is the default constructor.
+ */
+ BaseQuery();
+
+ /**
+ * This method appends authentication credentials to the query. The
+ * authentication credentials are <code>app_id</code> and
+ * <code>app_code</code>. The method obtains the credentials set at
+ * initialization and copies them to the destination provided by the caller,
+ * following the standard query-parameter format:
+ * <code>app_id=app_id_value&app_code=app_code_value<code>
+ *
+ * @param sDst A reference to a string to receive the authentication
+ * credentials.
+ *
+ * @return <code>true</code> if the destination string has been set with the
+ * authentication credentials, <code>false</code> if the the
+ * <code>ApplicationContext</code> is uninitialized.
+ */
+ bool AppendCredentials(String& sDst) const;
+
+#ifndef TIZEN_MIGRATION
+ /**
+ * This method retrieves the user data associated with the query.
+ *
+ * @return A pointer to an object containing the user data.
+ */
+ Tizen::Maps::HereObject* GetUserData() const;
+#endif
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(BaseQuery);
+
+ class BaseQueryImpl;
+ BaseQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEQUERY_H
diff --git a/inc/engine/common/BaseReply.h b/inc/engine/common/BaseReply.h
new file mode 100755
index 0000000..be04a4e
--- /dev/null
+++ b/inc/engine/common/BaseReply.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEREPLY_H
+#define BASEREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+#ifdef TIZEN_MIGRATION
+#include <base/HereObject.h>
+#else
+#include <FBaseObject.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+
+/**
+ * This class is the base class that encapsulates a reply to a REST-based query.
+ *
+ * @ingroup TODO
+ */
+class EXPORT_API BaseReply
+{
+public:
+ /**
+ * This method is a destructor.
+ */
+ virtual ~BaseReply();
+
+ /**
+ * This method retrieves error information associated with the query
+ * response received from the server.
+ *
+ * @return A constant pointer to an object containing the error details.
+ */
+ const ErrorBase* GetError() const;
+
+ /**
+ * This method sets (saves) a pointer to user data associated with the
+ * reply to the query.
+ *
+ * @param pUserData A pointer to user data.
+ */
+ void SetUserData(Tizen::Maps::HereObject* pUserData);
+
+ /**
+ * This method retrieves the pointer the user data.
+ *
+ * @return A pointer to the user data.
+ */
+ Tizen::Maps::HereObject* GetUserData() const;
+
+protected:
+ /**
+ * This method is the default constructor.
+ */
+ BaseReply();
+
+ /**
+ * This method appends information about an error associated with the server
+ * response.
+ *
+ * @param rError A reference to an object containing the error details.
+ */
+ void Append(ErrorBase& rError);
+
+private:
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize) = 0;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(BaseReply);
+ friend class RestItem;
+
+ class BaseReplyImpl;
+ BaseReplyImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<BaseReply> BaseReplyPtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEREPLY_H
diff --git a/inc/engine/common/CommunicationError.h b/inc/engine/common/CommunicationError.h
new file mode 100755
index 0000000..7d7c163
--- /dev/null
+++ b/inc/engine/common/CommunicationError.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef COMMUNICATIONERROR_H
+#define COMMUNICATIONERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FNet.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information about an error condition that may arise
+ * in network communications between the client and the server.
+ */
+class EXPORT_API CommunicationError : public ErrorBase
+{
+public:
+ /**
+ * This enumeration defines error code identifiers.
+ */
+ enum ErrorCode
+ {
+ CE_HttpError, ///< Indicates an HTTP error.
+ CE_NetworkError, ///< Indicates a network error.
+ CE_RestEngineError, ///< Indicates a REST engine error.
+ CE_MaxRequests ///< Indicates that the maximum number of requests
+ /// has been reached.
+ };
+
+ /**
+ * This typedef defines a HTTP status code as a type.
+ */
+#ifdef TIZEN_MIGRATION
+ typedef long HttpStatusCode;
+#else
+ typedef Tizen::Net::Http::NetHttpStatusCode HttpStatusCode;
+#endif
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aErrorCode A value representing an error code.
+ */
+ CommunicationError(ErrorCode aErrorCode);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aHttpStatusCode A value representing an HTTP status code as
+ * defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+ */
+ CommunicationError(HttpStatusCode aHttpStatusCode);
+
+ /**
+ * This method is a (virtual) destructor.
+ *
+ */
+ virtual ~CommunicationError();
+
+ /**
+ * This method retrieves an error code.
+ *
+ * @return A value representing an error code.
+ */
+ ErrorCode GetErrorCode() const;
+
+ /**
+ * This method retrieves a string representation of the given instance of
+ * <code>CommunicationError</code>.
+ *
+ * @return A string representation of the given instance of
+ * <code>CommunicationError</code>.
+ */
+ virtual String ToString() const;
+
+ /**
+ * This method sets an HTTP status code.
+ *
+ * @param aHttpStatusCode A value representing an HTTP status code as
+ * defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+ */
+ void SetHttpStatusCode(HttpStatusCode aHttpStatusCode);
+
+#ifdef TIZEN_MIGRATION
+ /**
+ * This method retrieves the HTTP status code associated with the given
+ * instance of the class.
+ *
+ * @return aHttpStatusCode A value representing an HTTP status code as
+ * defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+ */
+ const HttpStatusCode GetHttpStatusCode();
+#endif
+
+ /**
+ * This method associates a text string describing an error with the given
+ * instance of the class.
+ *
+ * @param sDesc A constant reference to a string containing the error
+ * description.
+ */
+ void SetErrorDescription(const String& sDesc);
+
+ /**
+ * This method retrieves the error description associated with the given
+ * instance of the class.
+ *
+ * @return A constant reference to a string containing the error
+ * description.
+ */
+ const String& GetErrorDescription() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(CommunicationError);
+
+ class CommunicationErrorImpl;
+ CommunicationErrorImpl* m_pImpl;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/ErrorBase.h b/inc/engine/common/ErrorBase.h
new file mode 100755
index 0000000..abcff3d
--- /dev/null
+++ b/inc/engine/common/ErrorBase.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ERRORBASE_H
+#define ERRORBASE_H
+
+#include "common/HereMaps_global.h"
+
+#include <iostream>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class GeoCoderReplyParser;
+
+/**
+ * This class is the base class for classes that encapsulate error conditions,
+ * for example <code>CommunicationError</code>.
+ */
+class EXPORT_API ErrorBase
+{
+public:
+ /**
+ * This enumeration defines identifiers for error categories.
+ */
+ enum ErrorCategory
+ {
+ EC_None = 0, ///< Indicates success.
+ EC_CommunicationsError, ///< Indicates a communications error.
+ EC_ParserError, ///< Indicates a parser error.
+ EC_RouterError, ///< Indicates a router error.
+ EC_TileMapError, ///< Indicates a tile map error.
+ EC_FinderError ///< Indicates a finder/places error.
+ };
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~ErrorBase();
+
+ /**
+ * This method produces a string representation of the given instance of
+ * the class. The method must be implemented by derived classes.
+ *
+ * @return A string containing a text representation of the given instance
+ * of the class.
+ */
+ virtual String ToString() const = 0;
+
+ /**
+ * This method prints the text representation of the given instance of the
+ * class to the stream identified by the caller.
+ *
+ * \sa ToString
+ *
+ * @param rSink A reference to the steam to which to output the (text
+ * representeation) of the given instance.
+ */
+ void Print(std::ostream& rSink) const;
+
+ /**
+ * This method retrieves a value representing the error category assigned to
+ * the given instance of the class.
+ *
+ * @return A value representing the error category assigned to
+ * the given instance of the class.
+ */
+ ErrorCategory GetErrorCategory() const;
+
+protected:
+ /**
+ * This method is the default constructor.
+ */
+ ErrorBase();
+
+ /**
+ * This method sets the error category for the given instance of the class.
+ *
+ * @param aErrorCategory A value representing the error category to be
+ * assigned to the given instance of the class.
+ */
+ void SetErrorCategory(ErrorCategory aErrorCategory);
+
+private:
+ // HERE_MAPS_NO_COPY_NO_ASSIGN(ErrorBase);
+
+ friend class BaseReply;
+ friend class GeoCoderReplyParser;
+ friend class GeoRouterReplyParser;
+ friend class JsonParser;
+ friend class TestErrorBase;
+
+
+ /*
+ * \brief note ownership of parameter is transferred
+ * \param rError error that is appended to linked list of error - must be allocated on heap
+ */
+ void Append(ErrorBase& rError);
+
+ class ErrorBaseImpl;
+ ErrorBaseImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoBoundingArea.h b/inc/engine/common/GeoBoundingArea.h
new file mode 100755
index 0000000..86a9b89
--- /dev/null
+++ b/inc/engine/common/GeoBoundingArea.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGAREA_H
+#define GEOBOUNDINGAREA_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a bounding area defined in terms of the geographic
+ * coordinates of its top left and bottom right corners.
+ *
+ * The virtual methods of the class must be implemented by derived classes.
+ */
+class EXPORT_API GeoBoundingArea
+{
+public:
+ /**
+ * This enumeration defines identifiers for types of bounding areas.
+ */
+ enum AreaType
+ {
+ AT_BoxType, ///< Indicates that the bounding area is a box.
+ AT_CircleType ///< Indicates that the bounding area is a circle.
+ };
+
+ /**
+ * This method is a (virtual) destructor.
+ */
+ virtual ~GeoBoundingArea()
+ {
+ }
+
+ /**
+ * This method retrieves a value indicating what type of area the given
+ * object represents.
+ *
+ * @return A value indicating the area type.
+ */
+ virtual AreaType GetType() const = 0;
+
+ /**
+ * This method checks if the given bounding area contains the location
+ * whose coordinates are provided by the caller.
+ *
+ * @param rCoordinate An object containing the geographic coordinates of the
+ * location to check.
+ *
+ * @return <code>true</code> if the location lies within the given bounding
+ * box, otherwise <code>false</code>.
+ */
+ virtual bool Contains(const GeoCoordinates& rCoordinate) const = 0;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOBOUNDINGAREA_H */
diff --git a/inc/engine/common/GeoBoundingBox.h b/inc/engine/common/GeoBoundingBox.h
new file mode 100755
index 0000000..d21b1bb
--- /dev/null
+++ b/inc/engine/common/GeoBoundingBox.h
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGBOX_H
+#define GEOBOUNDINGBOX_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingArea.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+class GeoBoundingBox;
+
+/**
+ * This typedef defines a vector of instances of <code>GeoBoundingBox</code> as
+ * a type.
+ */
+typedef std::vector<GeoBoundingBox> GeoBoundingBoxList;
+
+/**
+ * This class encapsulates a bounding box defined in terms of the geographic
+ * coordinates of its top-left and bottom-right corners.
+ */
+class EXPORT_API GeoBoundingBox : public GeoBoundingArea
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoBoundingBox();
+
+ /**
+ * This method is a copy constructor.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * used to populate the new instance of this class.
+ */
+ GeoBoundingBox(const GeoBoundingBox& rRhs);
+
+ /**
+ * This method is a constructor that creates a new instance, using the
+ * coordinates of the top-left and bottom=right corners provided by the
+ * caller.
+ *
+ * @param rTopLeft A constant reference to an object providing the
+ * geographic coordinates of the top-left corner of the given
+ * bounding box.
+ *
+ * @param rBottomRight A constant reference to an object providing the
+ * geographic coordinates of the bottom-right corner of the given
+ * bounding box.
+ */
+ GeoBoundingBox(const GeoCoordinates& rTopLeft, const GeoCoordinates& rBottomRight);
+
+ /**
+ * This method constructs a rectangle from the coordinates of its boundaries.
+ *
+ * If <code>west</code> is larger than <code>east</code>, then the new
+ * rectangle lies on the opposite side of the globe, i.e. +180 meridian.
+ *
+ * @param west A value indicating the minimum longitude.
+ * @param east A value indicating the maximum longitude.
+ * @param south A value indicating the minimum latitude.
+ * @param north A value indicating the the maximum latitude.
+ */
+ GeoBoundingBox( double west, double east, double south, double north );
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoBoundingBox();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose contents
+ * are to be copied to the given instance of the class.
+ *
+ * @return A reference to the given instance of the class after the
+ * assignment.
+ */
+ GeoBoundingBox& operator=(const GeoBoundingBox& rRhs);
+
+ /**
+ * This method sets the coordinates of the top-left corner of the given
+ * instance of <code>GeoBoundingBox</code>.
+ *
+ * @param A constant reference to an object containing the new geographic
+ * coordinates of the top-left corner of the bounding box.
+ */
+ void SetTopLeft(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the coordinates of the top-left corner of the given
+ * instance of <code>GeoBoundingBox</code>.
+ *
+ * @return A constant reference to an object containing the geographic
+ * coordinates of the top-left corner of the bounding box.
+ */
+ const GeoCoordinates& GetTopLeft() const;
+
+ /**
+ * This method sets the coordinates of the bottom-right corner of the given
+ * instance of <code>GeoBoundingBox</code>.
+ *
+ * @param A constant reference to an object containing the new geographic
+ * coordinates of the bottom-right corner of the bounding box.
+ */
+ void SetBottomRight(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the coordinates of the bottom-right corner of the
+ * given instance of <code>GeoBoundingBox</code>.
+ *
+ * @return A constant reference to an object containing the geographic
+ * coordinates of the bottom-right corner of the bounding box.
+ */
+ const GeoCoordinates& GetBottomRight() const;
+
+ /**
+ * This method calculates a bounding box that represents the union of the
+ * given <code>GeoBoundingBox</code> and the instance provided by the
+ * caller.
+ *
+ * @param A constant reference to an object for which to calculate a union
+ * with the given instance of <code>GeoBoundingBox</code>.
+ *
+ * @return An object representing the union of two instances of
+ * <code>GeoBoundingBox</code>.
+ */
+ GeoBoundingBox Union(const GeoBoundingBox& rOther);
+
+ /**
+ * This method retrieves a value indicating the area type represented by the
+ * given object.
+ *
+ * @return A value indicating the area type.
+ */
+ AreaType GetType() const;
+
+ /**
+ * This method checks if the given bounding box contains the location
+ * provided by the caller.
+ *
+ * @param rCoordinate An object containing the geographic coordinates of the
+ * location to check.
+ *
+ * @return <code>true</code> if the location lies within the given bounding
+ * box, otherwise <code>false</code>.
+ */
+ bool Contains(const GeoCoordinates& rCoordinate) const;
+
+ /**
+ * This method checks if the coordinates of the given instance of
+ * <code>GeoBoundingBox</code> are valid.
+ *
+ * @return Value <code>true</code> if the coordinates of the top-left and
+ * bottom-right corners are valid, otherwise <code>false</code>.
+ */
+ bool IsValid() const;
+
+private:
+ class GeoBoundingBoxImpl;
+ GeoBoundingBoxImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoBoundingCircle.h b/inc/engine/common/GeoBoundingCircle.h
new file mode 100755
index 0000000..a60146c
--- /dev/null
+++ b/inc/engine/common/GeoBoundingCircle.h
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGCIRCLE_H
+#define GEOBOUNDINGCIRCLE_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingArea.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a bounding circle defined in terms of the geographic
+ * coordinates of its center and a radius.
+ */
+class EXPORT_API GeoBoundingCircle : public GeoBoundingArea
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoBoundingCircle();
+
+ /**
+ * This method is a copy constructor.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * used to set the properties of a new instance of this class.
+ */
+ GeoBoundingCircle(const GeoBoundingCircle& rRhs);
+
+ /**
+ * This method is a constructor that creates a new instance, using the
+ * coordinates of the center of the circle and the length of its radius.
+ *
+ * @param rCenter A constant reference to an object providing the
+ * geographic coordinates of the center of the given
+ * bounding circle.
+ *
+ * @param rRadius A value providing the length of the radius in meters.
+ */
+ GeoBoundingCircle(const GeoCoordinates& rCenter, double rRadius);
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoBoundingCircle();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to the right-hand object whose contents
+ * are to be copied to the given instance of the class.
+ *
+ * @return A reference to the given instance of the class after the
+ * assignment.
+ */
+ GeoBoundingCircle& operator = (const GeoBoundingCircle& rRhs);
+
+ /**
+ * This method sets the coordinates of the center of the given
+ * instance of <code>GeoBoundingCircle</code>.
+ *
+ * @param A constant reference to an object containing the new geographic
+ * coordinates of the center of the bounding circle.
+ */
+ void SetCenter(const GeoCoordinates& rCenter);
+
+ /**
+ * This method retrieves the coordinates of the center of the given
+ * instance of <code>GeoBoundingCircle</code>.
+ *
+ * @return A constant reference to an object containing the geographic
+ * coordinates of the center of the bounding circle.
+ */
+ const GeoCoordinates& GetCenter() const;
+
+ /**
+ * This method sets the radius of the given
+ * instance of <code>GeoBoundingCircle</code>.
+ *
+ * @param rRadius A value providing the length of the radius in meters.
+ */
+ void SetRadius(double aRadius);
+
+ /**
+ * This method retrieves the radius of the given
+ * instance of <code>GeoBoundingCircle</code>.
+ *
+ * @return A value providing the length of the radius in meters.
+ */
+ double GetRadius() const;
+
+
+ /**
+ * This method retrieves a value indicating the area type applicable to the
+ * given object.
+ *
+ * @return A value indicating the area type.
+ */
+ AreaType GetType() const;
+
+ /**
+ * This method checks if the given bounding circle contains the location
+ * defined by the object provided by the caller.
+ *
+ * @param rCoordinate An object containing the geographic coordinates of the
+ * location to check.
+ *
+ * @return <code>true</code> if the location lies within the given bounding
+ * box, otherwise <code>false</code>.
+ */
+ bool Contains(const GeoCoordinates& rCoordinate) const;
+
+private:
+ class GeoBoundingCircleImpl;
+ GeoBoundingCircleImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOBOUNDINGCIRCLE_H */
diff --git a/inc/engine/common/GeoCoordinates.h b/inc/engine/common/GeoCoordinates.h
new file mode 100755
index 0000000..e8f6a30
--- /dev/null
+++ b/inc/engine/common/GeoCoordinates.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCOORDINATES_H
+#define GEOCOORDINATES_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+typedef std::vector<GeoCoordinates> GeoCoordinateList;
+
+/**
+ * This class represents a geographic location defined in terms of WGS84
+ * coordinates. The coordinates (latitude, longitude and altitude) are stored
+ * as doubles.
+ */
+class EXPORT_API GeoCoordinates
+{
+public:
+ static const double LATITUDE_RANGE;
+ static const double LONGITUDE_RANGE;
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoCoordinates();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs A constant reference to an instance of
+ * <code>GeoCoordinates</code> whose contents are to be copied into
+ * the object being created.
+ */
+ GeoCoordinates(const GeoCoordinates& rRhs);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param fLatitude A value specifying WGS84 latitude in degrees.
+ *
+ * @param fLongitude A value specifying WGS84 longitude in degrees.
+ *
+ * @param fAltitude A value specifying the altitude in meters,
+ * as height above the WGS84 geoid; optional, the default
+ * is 0.
+ */
+ GeoCoordinates(double fLatitude, double fLongitude, double fAltitude = 0.);
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoCoordinates();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an instance of
+ * <code>GeoCoordinates</code> whose contents are to be copied into
+ * the given instance.
+ */
+ GeoCoordinates& operator=(const GeoCoordinates& rRhs);
+
+ /**
+ * This method sets the value of longitude.
+ *
+ * @param fValue A value specifying WGS84 longitude in degrees.
+ */
+ void SetLongitude(double fValue);
+
+ /**
+ * This method retrieves the value of longitude.
+ *
+ * @return A value specifying WGS84 longitude in degrees.
+ */
+ double GetLongitude() const;
+
+ /**
+ * This method sets the value of latitude.
+ *
+ * @param fValue A value specifying WGS84 latitude in degrees.
+ */
+ void SetLatitude(double fValue);
+
+ /**
+ * This method retrieves the value of latitude.
+ *
+ * @return A value specifying WGS84 latitude in degrees.
+ */
+ double GetLatitude() const;
+
+ /**
+ * This method sets the value of altitude.
+ *
+ * @param fValue A value representing altitude as height above
+ * the WGS84 geoid in meters.
+ */
+ void SetAltitude(double fValue);
+
+ /**
+ * This method retrieves the value of altitude.
+ *
+ * @return A value representing altitude as height above
+ * the WGS84 geoid in meters.
+ */
+ double GetAltitude() const;
+
+ /**
+ * This method checks if the given object is valid.
+ *
+ * The object is valid if the latitude and longitude have been set,
+ * latitude is in the range [-85.015113..85.015113] (degrees) and longitude is
+ * in the range [-180..180] (degrees).
+ *
+ * @return <code>true</code> if the object is valid, otherwise
+ * <code>false</code>.
+ */
+ bool IsValid() const;
+
+ /**
+ * This operator checks if the given object is identical to the right-hand
+ * object.
+ *
+ * @param other A constant reference to an object which is to be compared to
+ * the given instance.
+ *
+ * @return <code>true</code> if the two objects are identical, otherwise
+ * <code>false</code>.
+ */
+ bool operator == (const GeoCoordinates& other) const;
+
+ /**
+ * This operator checks if the given object differs (is not equal to) the
+ * right-hand object.
+ *
+ * @param other A constant reference to an object which is to be compared to
+ * the given instance.
+ *
+ * @return <code>true</code> if the two objects are different, otherwise
+ * <code>false</code>.
+ */
+ bool operator != (const GeoCoordinates& other) const;
+
+private:
+ class GeoCoordinatesImpl;
+ GeoCoordinatesImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoLocation.h b/inc/engine/common/GeoLocation.h
new file mode 100755
index 0000000..0f26c6f
--- /dev/null
+++ b/inc/engine/common/GeoLocation.h
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LOCATION_H
+#define LOCATION_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Address;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/**
+ * This class represents the standard set of basic location information.
+ *
+ * This includes the address, coordinates and map view.
+ *
+ */
+class EXPORT_API GeoLocation
+{
+public:
+ /**
+ * This enumeration defines identifiers for location types.
+ */
+ enum LocationType
+ {
+ LT_Unknown = -1, ///< Indicates an unknown location type.
+ LT_Point, ///< Indicates that the location is a point.
+ LT_Area, ///< Indicates that the location is an area.
+ LT_Line ///< Indicates that the location is a line.
+ };
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoLocation();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs A constant reference to an instance of
+ * <code>GeoLocation</code> whose contents are to be copied into
+ * the object being created.
+ */
+ GeoLocation(const GeoLocation& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoLocation();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an instance of
+ * <code>GeoLocation</code> whose contents are to be copied into
+ * the given instance.
+ */
+ GeoLocation& operator=(const GeoLocation& rRhs);
+
+ /**
+ * This method sets the address of the location.
+ *
+ * @param rAddress A constant reference to an object containing an address.
+ */
+ void SetAddress(const Address& rAddress);
+
+ /**
+ * This method retrieves the address of the location.
+ *
+ * @return A constant reference to an object containing an address.
+ */
+ const Address& GetAddress() const;
+
+ /**
+ * This method sets the label for the location.
+ *
+ * @param sLabel A constant reference to an object containing the value of
+ * the label.
+ */
+ void SetLabel(const String& sLabel);
+
+ /**
+ * This method retrieves the label for the location.
+ *
+ * @return A constant reference to an object containing the value of
+ * the label.
+ */
+ const String& GetLabel() const;
+
+ /**
+ * This method sets the display position of the location. The display
+ * position contains the coordinates at which to place a marker indicating
+ * the given location on the map.
+ *
+ * @param rCoord A constant reference to an object containing the geographic
+ * coordinates of the display position.
+ */
+ void SetDisplayPosition(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the display position of the location. The display
+ * position contains the coordinates at which to place a marker indicating
+ * the given location on the map.
+ *
+ * @return A constant reference to an object containing the geographic
+ * coordinates of the display position.
+ */
+ const GeoCoordinates& GetDisplayPosition() const;
+
+ /**
+ * This method appends the navigation position. A navigation position
+ * contains the coordinates of a potential route waypoint. It is used for
+ * routes that pass through the given location.
+ *
+ * @param rCoord A constant reference to an object containing the geographic
+ * coordinates of the navigation position.
+ */
+ void AppendNavigationPosition(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the number of navigation positions that have been set.
+ *
+ * @return An integer indicating the number of navigation positions.
+ */
+ size_t GetNumNavigationPositions() const;
+
+ /**
+ * This method retrieves the navigation position from the index specified by
+ * the caller. A navigation position contains the coordinates of a potential
+ * route waypoint. It is used for routes that pass through the given
+ * location.
+ *
+ * @param idx A value specifying the index into an array of navigation
+ * positions.
+ *
+ * @return A constant pointer to an object containing the geographic
+ * coordinates of the display position.
+ */
+ const GeoCoordinates* GetNavigationPosition(size_t idx) const;
+
+ /**
+ * This method sets the map view of the location.
+ *
+ * @param rBbox A constant reference to an object that defines the map view
+ * as a bounding box.
+ */
+ void SetMapView(const GeoBoundingBox& rBbox);
+
+ /**
+ * This method retrieves the map view of the location.
+ *
+ * @return A constant reference to an object that defines the map view
+ * as a bounding box.
+ */
+ const GeoBoundingBox& GetMapView() const;
+
+ /**
+ * This method sets the id of the location.
+ *
+ * @param sLocationId A constant reference to a string containing the
+ * location id.
+ */
+ void SetLocationId(const String& sLocationId);
+
+ /**
+ * This method retrieves the id of the location.
+ *
+ * @return A constant reference to a string containing the
+ * location id.
+ */
+ const String& GetLocationId() const;
+
+ /**
+ * This method sets the location type.
+ *
+ * @param aType A numeric value indicating the location type.
+ */
+ void SetLocationType(LocationType aType);
+
+ /**
+ * This method sets the location type.
+ *
+ * @param sType A constant reference to string identifying the location
+ * type. The supported values are "area", "point", and "line".
+ */
+ void SetLocationType(const String& sType);
+
+ /**
+ * This method retrieves the location type.
+ *
+ * @return A numeric value indicating the location type.
+ */
+ LocationType GetLocationType() const;
+
+private:
+ class GeoLocationImpl;
+ GeoLocationImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/HereConfig.h b/inc/engine/common/HereConfig.h
new file mode 100755
index 0000000..840de74
--- /dev/null
+++ b/inc/engine/common/HereConfig.h
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_CONFIG_H
+#define HERE_CONFIG_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API HereConfig
+{
+public:
+ HereConfig();
+ ~HereConfig();
+ static void SetProxyAddress(char* address);
+ static char* GetProxyAddress(void);
+ static void Shutdown(void);
+
+//private:
+ static char* __proxy_address;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_CONFIG_H */
+
diff --git a/inc/engine/common/HereMaps_global.h b/inc/engine/common/HereMaps_global.h
new file mode 100755
index 0000000..8c5f6af
--- /dev/null
+++ b/inc/engine/common/HereMaps_global.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef HEREMAPS_GLOBAL_H
+#define HEREMAPS_GLOBAL_H
+
+#ifndef TIZEN_MIGRATION // Migration for Tizen 2.4
+#define TIZEN_MIGRATION
+#endif
+
+#ifndef TIZEN_CUSTOMIZATION
+#define TIZEN_CUSTOMIZATION
+#endif
+
+
+
+#ifdef TIZEN_MIGRATION
+#include <string>
+
+typedef unsigned long result;
+typedef std::string String;
+typedef std::string Uri;
+typedef std::wstring WString;
+
+typedef unsigned char byte;
+#ifndef null
+#define null 0
+#endif // null
+#endif
+
+
+/*
+ * Note: DEBUG variable should be set from the outside.
+ * Currently done in CMAKE file
+ */
+
+#define HERE_MAPS_BEGIN_NAMESPACE namespace Here { namespace Maps {
+#define HERE_MAPS_END_NAMESPACE }}
+#define HERE_MAPS_NAMESPACE_PREFIX Here::Maps
+
+#define TIZEN_MAPS_BEGIN_NAMESPACE namespace Tizen { namespace Maps {
+#define TIZEN_MAPS_END_NAMESPACE }}
+#define TIZEN_MAPS_NAMESPACE_PREFIX Tizen::Maps
+
+#include <memory>
+#include <dlog.h>
+
+//logging macro prototypes
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "HERE_PLUGIN"
+
+#define MAPS_LOGD(fmt,args...) LOGD(fmt, ##args)
+#define MAPS_LOGW(fmt,args...) LOGW(fmt, ##args)
+#define MAPS_LOGI(fmt,args...) LOGI(fmt, ##args)
+#define MAPS_LOGE(fmt,args...) LOGE(fmt, ##args)
+#define MAPS_SECLOG(fmt,args...) SECURE_LOGD(fmt, ##args)
+
+#define HERE_MAPS_LOG_DBG_INFO(fmt,args...) LOGD(fmt, ##args);
+#define HERE_MAPS_LOG_ERROR(fmt,args...) LOGE(fmt, ##args);
+#define HERE_MAPS_LOG_WARNING(fmt,args...) LOGW(fmt, ##args);
+
+#define HERE_MAPS_RETURN_RESULT(cond,ret,fmt,args...)\
+ if (!cond) {\
+ LOGE(fmt, ##args);\
+ return ret;\
+ }
+
+#define HERE_MAPS_TRY_CATCH(cond,catch,fmt,args...)\
+ if (!cond) {\
+ LOGE(fmt, ##args);\
+ catch;\
+ goto CATCH;\
+ }
+
+// Error severities
+#define E_SUCCESS 0
+#define E_FAILURE -1
+#define E_SYSTEM -2
+#define E_INVALID_STATE -3
+#define E_OUT_OF_MEMORY -4
+
+#ifndef INFINITE
+#define INFINITE 0xFFFFFFFF
+#endif // INFINITE
+
+//assertions
+#include <assert.h>
+#if DEBUG
+#define HERE_MAPS_ASSERT(x) assert(x);
+#else
+#define HERE_MAPS_ASSERT(x)
+#endif
+
+typedef unsigned char Byte;
+typedef unsigned int UInt;
+
+
+
+#define HERE_MAPS_NO_COPY_NO_ASSIGN(ClassName) \
+ private: \
+ ClassName(const ClassName&); \
+ ClassName& operator=(const ClassName&)
+
+
+HERE_MAPS_BEGIN_NAMESPACE
+extern void Stopwatch_Start(int aIndex);
+extern void Stopwatch_Stop(int aIndex);
+extern void Stopwatch_Show(int aIndex);
+extern void Stopwatch_Reset(int aIndex);
+HERE_MAPS_END_NAMESPACE
+
+#endif // HEREMAPS_GLOBAL_H
diff --git a/inc/engine/common/Mutex.h b/inc/engine/common/Mutex.h
new file mode 100755
index 0000000..1cc5375
--- /dev/null
+++ b/inc/engine/common/Mutex.h
@@ -0,0 +1,151 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file FBaseRtMutex.h
+ * @brief This is the header file for the %Mutex class.
+ *
+ * This header file contains the declarations of the %Mutex class.
+ */
+
+#ifndef _TIZEN_MAPS_MUTEX_H_
+#define _TIZEN_MAPS_MUTEX_H_
+
+
+#include "HereMaps_global.h"
+#include "base/BaseObject.h"
+
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+
+class Mutex
+ : public Tizen::Maps::Object
+{
+public:
+ /**
+ * This is the default constructor for this class.
+ *
+ * @since 2.0
+ * @remarks After creating an instance of this class, you must explicitly call one of
+ * the Create() methods to initialize the instance.
+ */
+ Mutex(void);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Mutex(void);
+
+ /**
+ * Creates an unnamed Mutex.
+ *
+ * @since 2.0
+ * @return An error code
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_SYSTEM An unknown operating system error occurred.
+ */
+ result Create(void);
+
+ /**
+ * Creates a non-recursive mutex.
+ *
+ * @since 2.0
+ * @return An error code
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_SYSTEM An unknown operating system error occurred.
+ */
+ result CreateNonRecursiveMutex(void);
+
+ /**
+ * Creates a named Mutex. @n
+ * If there is already a Mutex with the specified name, this creates a Mutex which references that particular Mutex.
+ *
+ * @since 2.0
+ * @return An error code
+ * @param[in] name The name of the Mutex
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_SYSTEM An unknown operating system error occurred.
+ */
+ result Create(const String& name);
+
+ /**
+ * Acquires the Mutex if it is not acquired. @n
+ * If the Mutex is already acquired by another thread,
+ * the current thread is blocked until the Mutex is released.
+ *
+ * @since 2.0
+ * @return An error code
+ * @param[in] timeout The period during which the thread tries to acquire the mutex
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_TIMEOUT The operation could not be completed within the specified time period. @n
+ * @exception E_SYSTEM An unknown operating system error occurred. @n
+ * Failed to acquire the Mutex because an OS failure occurred.
+ */
+ result Acquire(long timeout);
+
+ /**
+ * Releases the Mutex.
+ *
+ * @since 2.0
+ * @return An error code
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_SYSTEM An unknown operating system error occurred. @n
+ * Failed to acquire the Mutex because an OS failure occurred.
+ */
+ result Release(void);
+
+ /**
+ * Acquires the Mutex if it is not acquired. @n
+ * If the Mutex is already acquired by another thread,
+ * the current thread is blocked until the Mutex is released.
+ *
+ * @since 2.0
+ * @return An error code
+ * @exception E_SUCCESS The method was successful.
+ * @exception E_SYSTEM An unknown operating system error occurred. @n
+ * Failed to acquire the Mutex because an OS failure occurred.
+ */
+ result Acquire(void);
+
+ /**
+ * Acquires the mutex if it is not acquired. @n
+ * If the mutex is already acquired by another thread, E_OBJECT_LOCKED is returned.
+ *
+ * @since 2.0
+ *
+ * @return An error code
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OBJECT_LOCKED The mutex is already locked.
+ * @exception E_INVALID_STATE The mutex has not been initialized as yet.
+ * @exception E_SYSTEM A system error has occurred.
+ */
+ result TryToAcquire(void);
+
+private:
+ pthread_mutex_t* __pMutex;
+ String __name;
+
+};
+
+
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif // _TIZEN_MAPS_MUTEX_H_
+
diff --git a/inc/engine/common/Operators.h b/inc/engine/common/Operators.h
new file mode 100755
index 0000000..249aff8
--- /dev/null
+++ b/inc/engine/common/Operators.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef OPERATORS_H
+#define OPERATORS_H
+
+#include "common/HereMaps_global.h"
+
+#include <iostream>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class MetaInfo;
+class GeoLocation;
+class GeoCoordinates;
+
+HERE_MAPS_END_NAMESPACE
+
+//add operators to global namespace
+
+/**
+ * This is an operator that inserts the contents of a <code>Result</code> object
+ * into the output steam.
+ *
+ * @param os A reference to the output stream to which the right-hand object is inserted.
+ *
+ * @param rResult A constant reference to an object whose contents are to be
+ * inserted (output).
+ *
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::Result& rResult);
+
+/**
+ * This is an operator that inserts the contents of a <code>MetaInfo</code>
+ * object into the output steam.
+ *
+ * @param os A reference to the output stream to which the right-hand object is
+ * inserted.
+ *
+ * @param rMetaInfo A constant reference to an object whose contents are to be
+ * inserted (output).
+ *
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::MetaInfo& rMetaInfo);
+
+/**
+ * This is an operator that inserts the contents of a <code>GeoLocation</code>
+ * object into the output steam.
+ *
+ * @param os A reference to the output stream to which the right-hand object is
+ * inserted.
+ *
+ * @param rLocation A constant reference to an object whose contents are to be
+ * inserted (output).
+ *
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::GeoLocation& rLocation);
+
+/**
+ * This is an operator that inserts the contents of an <code>Address</code>
+ * object into the output steam.
+ *
+ * @param os A reference to the output stream to which the right-hand object is
+ * inserted.
+ *
+ * @param rAddress A constant reference to an object whose contents are to be
+ * inserted (output).
+ *
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::Address& rAddress);
+
+/**
+ * This is an operator that inserts the contents of a
+ * <code>GeoCoordinates</code> object into the output steam.
+ *
+ * @param os A reference to the output stream to which the right-hand object is
+ * inserted.
+ *
+ * @param rCoord A constant reference to an object whose contents are to be
+ * inserted (output).
+ *
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::GeoCoordinates& rCoord);
+
+#endif
diff --git a/inc/engine/common/ParserError.h b/inc/engine/common/ParserError.h
new file mode 100755
index 0000000..909cab7
--- /dev/null
+++ b/inc/engine/common/ParserError.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PARSERERROR_H
+#define PARSERERROR_H
+
+#include "HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an XML parser error. It allows you to set and
+ * retrieve the error message, error type and other details concerning an error
+ * condition.
+ */
+class EXPORT_API ParserError : public ErrorBase
+{
+public:
+ /**
+ * This enumeration defines identifiers for the recognized error types.
+ */
+ enum Type
+ {
+ PE_InvalidXmlDocument, ///< Indicates that the XML document is invalid.
+ PE_Utf8ConversionFailed, ///< Indicates that UTF8 conversion failed.
+ PE_ExtractXMLTextNodeFail, ///< Indicates that it an attempt to extract an XML node failed.
+ PE_MissingAttribute, ///< Indicates that an attribute is missing.
+ PE_InternalParserError ///< Indicates that an internal parser error occurred.
+ };
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aType A value indicating the error type.
+ */
+ ParserError(Type aType);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aType A value indicating the error type.
+ *
+ * @param sParentNodename A constant reference to the parent node (XML).
+ */
+ ParserError(Type aType, const String& sParentNodename);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aType A value indicating the error type.
+ *
+ * @param sParentNodename A constant reference to a string containing the
+ * name of the parent node (XML).
+ *
+ * @param sDescription A constant reference to a string containing the error description.
+ */
+ ParserError(Type aType, const String& sParentNodename, const String& sDescription);
+
+ /**
+ * This method is the destructor.
+ */
+ virtual ~ParserError();
+
+ /**
+ * This method converts the given instance to a string. The default
+ * implementation outputs a string containing the error type, description,
+ * parser input and the name of the parent element.
+ *
+ * @return A string representation of the given instance of the class.
+ */
+ virtual String ToString() const;
+
+ /**
+ * This method retrieves a value indicating the error type.
+ *
+ * @return A value indicating the error type.
+ */
+ Type getParserErrorType() const;
+
+ /**
+ * This method sets the parser input.
+ *
+ * @param sInput A constant reference to a string containing parser input.
+ */
+ void setParserInput(const String& sInput);
+
+ /**
+ * This method retrieves the parser input.
+ *
+ * @return A constant reference to a string containing parser input.
+ */
+ const String& getParserInput() const;
+
+ /**
+ * This method sets the name of the parent node.
+ *
+ * @param sNodename A constant reference to a string containing name of the
+ * parent (XML) node.
+ */
+ void setParentElement(const String& sNodename);
+
+ /**
+ * This method retrieves the name of the parent node.
+ *
+ * @return A constant reference to a string containing name of the
+ * parent (XML) node.
+ */
+ const String& getParentElement() const;
+
+ /**
+ * This method sets the error description.
+ *
+ * @param sDsc A constant reference to a string containing the
+ * description of the error.
+ */
+ void setDescription(const String& sDsc);
+
+ /**
+ * This method retrieves the error description.
+ *
+ * @return A constant reference to a string containing the
+ * description of the error.
+ */
+ const String& getDescription() const;
+
+private:
+ class ParserErrorImpl;
+ ParserErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/QueryListener.h b/inc/engine/common/QueryListener.h
new file mode 100755
index 0000000..931a549
--- /dev/null
+++ b/inc/engine/common/QueryListener.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef QUERYLISTENER_H
+#define QUERYLISTENER_H
+
+#include <tr1/memory>
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBaseRtEvent.h>
+#include <FBaseRtIEventListener.h>
+#include <FBaseRtIEventArg.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class ErrorBase;
+
+typedef std::tr1::shared_ptr<BaseReply> BaseReplyPtr;
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available.
+ *
+ * Derived classes must implement the virtual methods of this class.
+ */
+class EXPORT_API QueryListener
+#ifndef TIZEN_MIGRATION
+: public Tizen::Base::Runtime::Event
+, public Tizen::Base::Runtime::IEventListener
+#endif
+{
+public:
+ /**
+ * This is the default constructor for the class.
+ */
+ QueryListener();
+
+ /**
+ * This is a virtual destructor for the class.
+ */
+ virtual ~QueryListener();
+
+ /**
+ * This method triggers a call to the listener's method
+ * <code>OnReplySuccess()</code>.
+ *
+ * @param pReply A pointer to the query reply.
+ */
+ void NotifyForSuccess(BaseReplyPtr pReply);
+
+ /**
+ * This method triggers a call to the listener's method
+ * <code>OnReplyFailure()</code>.
+ *
+ * @param pReply A pointer to the query reply.
+ */
+ void NotifyForFailure(BaseReplyPtr pReply);
+
+ /**
+ * This method is a callback invoked when a query is successful. The
+ * implementation of this method handles the reply to a successful query.
+ *
+ * @param rReply A Reference to the query reply object.
+ *
+ */
+ virtual void OnReplySuccess(BaseReply& rReply) = 0;
+
+ /**
+ * This method is a callback invoked when a query fails. The
+ * implementation of this method handles the reply.
+ *
+ * @param rReply A Constant reference to the reply. Only the error and user
+ * data are valid.
+ */
+#ifdef TIZEN_MIGRATION
+ virtual void OnFailure(const BaseReply& rReply) = 0;
+#else
+ virtual void OnFailure(const BaseReply& rReply);
+#endif
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(QueryListener);
+ class Arguments;
+#ifndef TIZEN_MIGRATION
+ void FireImpl(Tizen::Base::Runtime::IEventListener& rListener, const Tizen::Base::Runtime::IEventArg& rArgs);
+#endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/RestItemHandle.h b/inc/engine/common/RestItemHandle.h
new file mode 100644
index 0000000..f3a9340
--- /dev/null
+++ b/inc/engine/common/RestItemHandle.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTITEMHANDLE_H
+#define RESTITEMHANDLE_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class represents a handle to a REST request.
+ *
+ */
+class EXPORT_API RestItemHandle
+{
+public:
+ /**
+ * This typedef defines a type that represents a REST request id.
+ */
+ typedef int RequestId;
+
+ /**
+ * This constant represents a passive REST request item.
+ */
+ static const RequestId PASSIVE_RESTITEM;
+
+ /**
+ * This constant represents an invalid REST request item.
+ */
+ static const RequestId INVALID_RESTITEM;
+
+ /**
+ * This method is a virtual destructor.
+ */
+ virtual ~RestItemHandle();
+
+ /**
+ * This methos cancels a request with the id specified by the caller.
+ *
+ * @param aRequestId A value indicating the id of the request to cancel.
+ */
+ static void Cancel(RequestId aRequestId);
+
+ /**
+ * This method checks if the request id provided by the caller is valid.
+ *
+ * @param aRequestId A value indicating the id of the request to cancel.
+ */
+ static bool IsValid(RequestId aRequestId);
+
+private:
+ RestItemHandle();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/Size.h b/inc/engine/common/Size.h
new file mode 100644
index 0000000..6382a17
--- /dev/null
+++ b/inc/engine/common/Size.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef _SIZE_H_
+#define _SIZE_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a image size defined in terms of its width and
+ * height. It can apply to a map, an overlay or an icon.
+ */
+class Size
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ Size();
+
+ /**
+ * This method is a constructor that initializes the new instance with the
+ * width and height supplied by the caller.
+ *
+ * @param aWidth A value specifying the image width in pixels.
+ *
+ * @param aHeight A value specifying the image height in pixels.
+ */
+ Size(int aWidth, int aHeight);
+
+ /**
+ * This method is a copy constructor that initializes the new instance by
+ * copying the properties of the instance supplied by the caller.
+ *
+ * @param rRhs A constant reference to an object whose properties are to be
+ * copied to initialize the new instance.
+ */
+ Size(const Size& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~Size();
+
+ /**
+ * This method sets the properties of the given instance of the class.
+ *
+ * @param aWidth A value specifying the image width in pixels.
+ *
+ * @param aHeight A value specifying the image height in pixels.
+ */
+ void SetSize(int aWidth, int aHeight);
+
+ /**
+ * This method retrieves the width of the image.
+ *
+ * @return A value representing the width of the image.
+ */
+ int GetWidth() const;
+
+ /**
+ * This method retrieves the height of the image.
+ *
+ * @return A value representing the height of the image.
+ */
+ int GetHeight() const;
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose properties are to be copied
+ * to the given instance.
+ *
+ * @return A Reference to the given instance of the class after its
+ * properties have been updated.
+ */
+ Size& operator = (const Size& rRhs);
+
+ /**
+ * This is the quality operator. It check if the given instance of the class
+ * is identical to the right-hand-side object.
+ *
+ * @param rRhs A constant reference to an object whose properties are to be
+ * compared to the properties of the given instance.
+ *
+ * @return <code>true</code> if the objects are identical, otherwise
+ * <code>false</code>.
+ */
+ bool operator == (const Size& rRhs) const;
+
+private:
+ class SizeImpl;
+ SizeImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* _SIZE_H_ */
diff --git a/inc/engine/common/TileKey.h b/inc/engine/common/TileKey.h
new file mode 100755
index 0000000..77b2216
--- /dev/null
+++ b/inc/engine/common/TileKey.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEKEY_H_
+#define TILEKEY_H_
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoTiledMap.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information that identifies a map tile in a grid
+ * reflecting the normalized Mercator projection. The projection represents the
+ * surface of the globe as a set of squares. The size of the grid depends on the
+ * map zoom level. At the lowest zoom level, the entire globe is
+ * shown in one square, which means that the tile grid consists of one row and
+ * one column. At the next higher zoom level, the tile grid contains two rows
+ * and two columns per row, at the next, four rows and four columns per row, and
+ * so on -- in other words, the number of rows and columns doubles at each
+ * higher zoom level.
+ */
+class TileKey
+{
+public:
+ /**
+ * This is a constructor. It initializes a new instance of the tile key with
+ * the zoom level and the x and y coordinates of the tile at that zoom level.
+ *
+ * @param aLevel A value indicating the zoom level.
+ *
+ * @param aX A value indicating the x coordinate in the map tile grid.
+ *
+ * @param aY A value indicating the y coordinate in the map tile grid.
+ *
+ * @param aMapLanguage A value indicating the map language.
+ *
+ * @param aMapLanguage A value indicating the map type.
+ */
+ TileKey(int aLevel,
+ int aX,
+ int aY,
+ String sMapLanguage = String("eng"),
+ GeoTiledMap::MapType aMapType = GeoTiledMap::MT_Normal_Day)
+ {
+ m_aLevel = aLevel;
+ m_aX = aX;
+ m_aY = aY;
+ m_sMapLanguage = sMapLanguage;
+ m_aMapType = aMapType;
+ }
+
+ /**
+ * This method is a copy constructor.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * copied into the present instance.
+ */
+ TileKey(const TileKey& rRhs)
+ {
+ operator = (rRhs);
+ }
+
+ /**
+ * This method retrieves a tile hash value based on the tile key properties.
+ *
+ * @return An integer value representing the tile hash.
+ */
+ int GetHash() const
+ {
+ int hashValue = (((int)m_aMapType) << 25) +
+ (m_aLevel << 16) +
+ (m_aY << 8) +
+ m_aX;
+ return hashValue;
+ }
+
+ /**
+ * This is an equality operator.
+ *
+ * @param rRhs A constant reference to an object that is to be compared to
+ * the present instance.
+ *
+ * @return <code>true</code> if the given instance and the right-hand object
+ * are identical, otherwise <code>false</code>.
+ */
+ bool operator == (const TileKey& rRhs) const
+ {
+ return m_aLevel == rRhs.m_aLevel &&
+ m_aX == rRhs.m_aX &&
+ m_aY == rRhs.m_aY &&
+ m_sMapLanguage == rRhs.m_sMapLanguage &&
+ m_aMapType == rRhs.m_aMapType;
+ }
+
+ /**
+ * This is an assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * copied into the present instance.
+ *
+ * @return A reference to the given instance of the class after the assignment.
+ */
+ TileKey& operator = (const TileKey& rRhs)
+ {
+ if (&rRhs != this)
+ {
+ m_aLevel = rRhs.m_aLevel;
+ m_aX = rRhs.m_aX;
+ m_aY = rRhs.m_aY;
+ m_sMapLanguage = rRhs.m_sMapLanguage;
+ m_aMapType = rRhs.m_aMapType;
+ }
+ return *this;
+ }
+
+ /**
+ * This member variable holds a value indicating the tile zoom level.
+ */
+ int m_aLevel;
+
+ /**
+ * This member variable holds a value indicating the x coordinate of the tile.
+ */
+ int m_aX;
+
+ /**
+ * This member variable holds a value indicating the y coordinate of the tile.
+ */
+ int m_aY;
+
+ /**
+ * This member variable holds a value indicating the map language.
+ */
+ String m_sMapLanguage;
+
+ /**
+ * This member variable holds a value indicating the map type.
+ */
+ GeoTiledMap::MapType m_aMapType;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // TILEKEY_H_
diff --git a/inc/engine/debug/EchoQuery.h b/inc/engine/debug/EchoQuery.h
new file mode 100755
index 0000000..6ca5645
--- /dev/null
+++ b/inc/engine/debug/EchoQuery.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ECHOQUERY_H
+#define ECHOQUERY_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EchoQuery : public BaseQuery
+{
+public:
+ EchoQuery(unsigned int data);
+ ~EchoQuery();
+
+ virtual bool Execute(QueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(EchoQuery);
+
+ class EchoQueryImpl;
+ EchoQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/debug/EchoReply.h b/inc/engine/debug/EchoReply.h
new file mode 100644
index 0000000..53de75b
--- /dev/null
+++ b/inc/engine/debug/EchoReply.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ECHOREPLY_H
+#define ECHOREPLY_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EchoReply : public BaseReply
+{
+public:
+ EchoReply(unsigned int data);
+ virtual ~EchoReply();
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(EchoReply);
+
+ class EchoReplyImpl;
+ EchoReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/finder/BaseContent.h b/inc/engine/finder/BaseContent.h
new file mode 100755
index 0000000..2abe795
--- /dev/null
+++ b/inc/engine/finder/BaseContent.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASE_CONTENT_H_
+#define BASE_CONTENT_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+/**
+ * This class encapsulates basic data relating to a place. The basic data
+ * include supplier, attribution and via information.
+ *
+ * \ingroup finder
+ */
+class BaseContent
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ BaseContent();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ BaseContent(const BaseContent& rRhs);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~BaseContent();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ BaseContent& operator=(const BaseContent& rRhs);
+
+ /**
+ * This method retrieves information about the supplier of place-related
+ * information.
+ *
+ * @return An object containing information about the supplier.
+ */
+ LinkObject GetSupplier() const;
+
+
+ /**
+ * This method retrieves the attribution text for place-related
+ * information.
+ *
+ * @return A string containing the attribution text.
+ */
+ String GetAttribution() const;
+
+
+ /**
+ * This method retrieves an object containing a hypermedia link to the origin
+ * of the information about the place, usually a Web site of the supplier.
+ *
+ * @return An object containing a link to the origin of the information about
+ * the place.
+ */
+ LinkObject GetVia() const;
+
+ /**
+ * This method sets information about the supplier of place-related
+ * information.
+ *
+ * @return rSupplier A constant reference to an object containing information
+ * about the supplier.
+ */
+ void SetSupplier(const LinkObject& rSupplier);
+
+ /**
+ * This method sets the attribution text for place-related
+ * information.
+ *
+ * @return rAttribution A constant reference to a string containing the
+ * attribution text.
+ */
+ void SetAttribution(const String& rsAttribution);
+
+ /**
+ * This method sets an object containing a hypermedia link to the origin
+ * of the information about the place, usually a Web site of the supplier.
+ *
+ * @param rVia A constant reference to an object containing a link to the
+ * origin of the information about the place.
+ */
+ void SetVia(const LinkObject& rVia);
+
+private:
+ class BaseContentImpl;
+ BaseContentImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASE_CONTENT_H_
diff --git a/inc/engine/finder/BaseFinderReply.h b/inc/engine/finder/BaseFinderReply.h
new file mode 100644
index 0000000..c9f7568
--- /dev/null
+++ b/inc/engine/finder/BaseFinderReply.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEFINDERREPLY_H
+#define BASEFINDERREPLY_H
+
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a basic reply to a places search query.
+ */
+class BaseFinderReply : public BaseReply
+{
+public:
+ /**
+ * This enumeration defines identifiers for supported reply types.
+ */
+ enum ReplyType
+ {
+ RT_Discovery = 0, // Indicates a reply to a discovery query.
+ RT_PlaceDetails // Indicates a reply to a request for place details.
+ };
+ /**
+ * This method is the constructor.
+ */
+ BaseFinderReply(ReplyType aReplyType);
+
+ /**
+ * This method is a virtual destructor.
+ */
+ virtual ~BaseFinderReply();
+
+ /**
+ * This method retrieves the reply type.
+ *
+ * @return A value that ientifies the reply type.
+ */
+ ReplyType GetFinderReplyType() const;
+
+private:
+
+ ReplyType m_aReplyType;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEFINDERREPLY_H
diff --git a/inc/engine/finder/Category.h b/inc/engine/finder/Category.h
new file mode 100755
index 0000000..a54c229
--- /dev/null
+++ b/inc/engine/finder/Category.h
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CATEGORY_H_
+#define CATEGORY_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class CategoryId;
+class Category;
+
+
+/**
+ * This typedef defines a type representing a list of <code>Category</code>
+ * instances.
+ *
+ * \ingroup finder
+ */
+typedef std::vector<Category> CategoryList;
+
+/**
+ * This class encapsulates information about a Point of Interest (POI) category
+ * that can be applied to a place.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API Category
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ Category();
+
+ /**
+ * This method is a constructor.
+ */
+ Category(const CategoryId& rId);
+
+ /**
+ * This method is a copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ Category(const Category& rRhs);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~Category();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ Category& operator=(const Category& rRhs);
+
+ /**
+ * This method retrieves the category identifier.
+ *
+ * @return A string containing the identifier of the POI category.
+ */
+ const CategoryId& GetCategoryId() const;
+
+ /**
+ * This method sets the category identifier.
+ *
+ * @param rsId A constant reference to an object containing the identifier
+ * of the POI category.
+ */
+ void SetCategoryId(const CategoryId& rsId);
+
+ /**
+ * This method retrieves the category name (localized).
+ *
+ * @return A string containing the localized name of the POI category.
+ */
+ String GetTitle() const;
+
+ /**
+ * This method retrieves the URI of the category resource (icon).
+ *
+ * @return A string containing the URI of the icon of the POI category.
+ */
+ String GetHref() const;
+
+ /**
+ * This method retrieves the resource type identifier for the given
+ * category.
+ *
+ * @return A string containing the type identifier, which is either a valid
+ * MIME type or a URI.
+ */
+ String GetType() const;
+
+ /**
+ * This method retrieves the path to the category icon.
+ *
+ * @return A URI object containing the path to the category icon.
+ */
+ String GetIconPath() const;
+
+ /**
+ * This method sets the category name (localized).
+ *
+ * @param sTitle A constant reference to a string containing the localized
+ * name of the POI category.
+ */
+ void SetTitle(const String& sTitle);
+
+ /**
+ * This method sets the URI of the category resource (icon).
+ *
+ * @param sHref A constant reference to a string containing the URI of the icon
+ * of the POI category.
+ */
+ void SetHref(const String& sHref);
+
+ /**
+ * This method sets the resource type identifier for the given
+ * category.
+ *
+ * @param sType A constant reference to a string containing the type
+ * identifier, which is either a valid MIME type or a URI.
+ */
+ void SetType(const String& sType);
+
+ /**
+ * This method sets the path to the category icon.
+ *
+ * @param rIcon A constant reference to a URI object containing the path to
+ * the category icon.
+ */
+ void SetIconPath(const String& rIcon);
+
+private:
+ class CategoryImpl;
+ CategoryImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CATEGORY_H_
diff --git a/inc/engine/finder/CategoryId.h b/inc/engine/finder/CategoryId.h
new file mode 100755
index 0000000..a4bad29
--- /dev/null
+++ b/inc/engine/finder/CategoryId.h
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CATEGORYID_H_
+#define CATEGORYID_H_
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+namespace Here { namespace PlugIn { //for plug-in
+class HerePlace;
+}}
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class represents a (Place of Interest or POI) category identifier.
+ * \ingroup Finder
+ */
+class EXPORT_API CategoryId
+{
+public:
+
+ /**
+ * This method is the destructor.
+ */
+ virtual ~CategoryId( );
+
+ /**
+ * This method checks if the given instance of <code>CategoryId</code> is
+ * valid. An instance of this class is valid if its id element is not empty.
+ *
+ * @return <code>true</code> if the instance is valid, otherwise
+ * <code>false</code>.
+ */
+ bool IsValid( ) const;
+
+ /**
+ * This method obtains a string representation of the given instance.
+ *
+ * @return A Unicode string containing a string representation of the given
+ * instance of <code>CategoryId</code>.
+ */
+ String ToString( ) const;
+
+ /**
+ * This method obtains an invalid category id object.
+ *
+ * @return A constant reference to an invalid category id object.
+ */
+ static const CategoryId& GetInvalidCategoryId( );
+
+ /**
+ * This method obtains the id of the root category from the given instance.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * root category id.
+ */
+ static const CategoryId& GetRootCategoryId( );
+
+ // Factory methods for category filters
+ /**
+ * This factory method obtains a category id object representing the
+ * eat-drink category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * eat-drink category id.
+ */
+ static const CategoryId& GetEatDrinkCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * going-out category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * going-out category id.
+ */
+ static const CategoryId& GetGoingOutCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * sights-museums category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * sights-museums category id.
+ */
+ static const CategoryId& GetSightsMuseumsCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * transport category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * transport category id.
+ */
+ static const CategoryId& GetTransportCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * accommodation category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * accommodation category id.
+ */
+ static const CategoryId& GetAccommodationCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * shopping category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * shopping category id.
+ */
+ static const CategoryId& GetShoppingCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * leisure-outdoor category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * leisure-outdoor category id.
+ */
+ static const CategoryId& GetLeisureOutdoorCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * administrative-areas-buildings category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * administrative-areas-buildings category id.
+ */
+ static const CategoryId& GetAdministrativeAreasBuildingsCategoryId();
+
+ /**
+ * This factory method obtains a category id object representing the
+ * natural-geographical category.
+ *
+ * @return A constant reference to an instance of the class representing the
+ * natural-geographical category id.
+ */
+ static const CategoryId& GetNaturalGeographicalCategoryId();
+
+private:
+ CategoryId(const CategoryId&);
+ CategoryId& operator=(const CategoryId&);
+
+ /** Create an invalid instance */
+ CategoryId( const String& id);
+
+private:
+ class CategoryIdImpl;
+ CategoryIdImpl* m_pImpl;
+
+ friend class JsonParser;
+ friend class Category;
+ friend class TestCategoryId;
+#ifdef TIZEN_MIGRATION
+ friend class Here::PlugIn::HerePlace; //for plug-in
+#endif
+};
+
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CATEGORYID_H_
diff --git a/inc/engine/finder/ContactDetails.h b/inc/engine/finder/ContactDetails.h
new file mode 100755
index 0000000..8198042
--- /dev/null
+++ b/inc/engine/finder/ContactDetails.h
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CONTACT_DETAILS_H_
+#define CONTACT_DETAILS_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API ContactDetails;
+/**
+ * This typedef defines a type representing a list of <code>ContactDetails</code>
+ * instances.
+ */
+typedef std::vector<ContactDetails> ContactDetailsList;
+
+/**
+ * This class encapsulates contact information relating to a place.
+ *
+ * \ingroup finder
+ */
+class ContactDetails
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ ContactDetails();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ ContactDetails(const ContactDetails& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~ContactDetails();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ ContactDetails& operator=(const ContactDetails& rRhs);
+
+ /**
+ * This method retrieves the contact type, which can be telephone, e-mail,
+ * website, site, etc.
+ *
+ * @return A string containing the contact type identifier. The possible
+ * values are "phone", "website", "fax", or "email".
+ */
+ String GetContactType() const;
+
+ /**
+ * This method retrieves the contact detail label, which is a localized
+ * string identifying the purpose of the contact, for example "Phone",
+ * "Mobile". Note that label is accompanied by a "value" filed, which for
+ * example for a "Phone" contains the telephone number.
+ *
+ * @return A string containing the contact label.
+ */
+ String GetLabel() const;
+
+ /**
+ * This method retrieves the value for the associated contact label.
+ *
+ * @return A string containing the value corresponding to the contact label.
+ */
+ String GetValue() const;
+
+ /**
+ * This method sets the contact type, which can be telephone, e-mail,
+ * website, site, etc.
+ *
+ * @param rsName A string containing the contact type identifier. The
+ * possible values are "phone", "website", "fax", or "email".
+ */
+ void SetContactType(const String& rsName);
+
+ /**
+ * This method sets the contact detail label, which is a localized
+ * string identifying the purpose of the contact, for example "Phone",
+ * "Mobile". Note that label is accompanied by a "value" filed, which for
+ * example for a "Phone" contains the telephone number.
+ *
+ * @param rsLabel A string containing the contact label.
+ */
+ void SetLabel(const String& rsLabel);
+
+ /**
+ * This method sets the value for the contact label.
+ *
+ * @param rsValue A string containing the value corresponding to the contact
+ * label (for example, if the label is "Phone", the value is the
+ * telephone number).
+ */
+ void SetValue(const String& rsValue);
+
+private:
+ class ContactDetailsImpl;
+ ContactDetailsImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CONTACT_DETAILS_H_
diff --git a/inc/engine/finder/DiscoveryQuery.h b/inc/engine/finder/DiscoveryQuery.h
new file mode 100755
index 0000000..c13c931
--- /dev/null
+++ b/inc/engine/finder/DiscoveryQuery.h
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISCOVERY_QUERY_H_
+#define DISCOVERY_QUERY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "finder/Category.h"
+#ifdef TIZEN_CUSTOMIZATION
+#include "common/GeoBoundingArea.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class QueryListener;
+class GeoCoordinates;
+class FinderQueryListener;
+class FinderError;
+
+/**
+ * This class encapsulates a places discovery query.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API DiscoveryQuery : public BaseQuery
+{
+public:
+ /**
+ * This enumeration defines identifiers for the supported discovery query
+ * types.
+ */
+ enum QueryType
+ {
+ QT_SEARCH = 0, ///< Indicates a search query (based on the search terms
+ /// supplied by the application user); results are
+ /// paginated.
+ QT_HERE, ///< Indicates query that searches for places at or
+ /// within 200 meters of a specific location; a category
+ /// can be specified as an option.
+ QT_AROUND, ///< Indicates a query that searches for places within a
+ /// certain radius around a location; results are
+ /// paginated; a category can be specified as an option.
+ QT_EXPLORE ///< Indicates a query that searches for popular places
+ /// based on a location context provided by the
+ /// application user; results are paginated; a category
+ /// can be specified as an option.
+ };
+
+ /**
+ * This enumeration defines identifiers for the supported discovery query
+ * result types.
+ */
+ /*
+ * The identifiers are not valid for search QueryTypes.
+ */
+ enum ResultTypes
+ {
+ SIT_PLACE = 0, ///< Indicates that the result contains only place items
+ SIT_SEARCH, ///< Indicates that the result contains only search items
+ SIT_PLACEANDSEARCH ///< Indicates that the result contains place and search items
+ };
+
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ DiscoveryQuery();
+
+ /**
+ * This method is a constructor. It constructs a valid <code>DiscoveryQuery</code> from
+ * a URL provided by the caller.
+ *
+ * @param sUrl A constant reference to the URL of the location whose details
+ * are to be retrieved from the server
+ */
+ DiscoveryQuery(const String& sUrl);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~DiscoveryQuery();
+
+ /**
+ * This method retrieves a value indicating the query type.
+ *
+ * @return A value indicating the query type.
+ */
+ QueryType GetType() const;
+
+ /**
+ * This method sets the query type.
+ *
+ * @param eType A value indicating the query type.
+ */
+ void SetType(QueryType eType);
+
+ /**
+ * This method sets the search text (terms).
+ *
+ * @param sSearch A constant reference to a string containing the search
+ * terms.
+ */
+ void SetSearchText(const String& sSearch);
+
+ /**
+ * This method retrieves the search text (terms).
+ *
+ * @return A string containing the search terms.
+ */
+ String GetSearchText() const;
+
+ /**
+ * This method retrieves the search proximity.
+ *
+ * @return An object containing the geographic coordinates of the location
+ * around which the search is/was to be conducted and within whose
+ * proximity the results must lie.
+ */
+ GeoCoordinates GetProximity() const;
+
+ /**
+ * This method sets search proximity.
+ *
+ * @param rCoord An object containing the geographic coordinates of the
+ * location around which the search is/was to be conducted and within
+ * whose proximity the results must lie.
+ */
+ void SetProximity(const GeoCoordinates& rCoord);
+
+#ifdef TIZEN_CUSTOMIZATION
+ /**
+ * This method retrieves the bounding area.
+ *
+ * @return An object containing the geographic bounding area of the location
+ * around which the search is/was to be conducted and within whose
+ * area the results must lie.
+ */
+ GeoBoundingArea* GetArea() const;
+
+ /**
+ * This method sets search bounding area.
+ *
+ * @param rArea An object containing the geographic bounding area of the
+ * location around which the search is/was to be conducted and within
+ * whose bounding area the results must lie.
+ */
+ void SetArea(const GeoBoundingArea &rArea);
+#endif
+
+ /**
+ * This method retrieves a BCP 47 identifier of the search language.
+ *
+ * @return A string containing a BCP 47 identifier of the language.
+ */
+ String GetLanguage() const;
+
+ /**
+ * This method sets the langauge, using a BCP 47 langauge code.
+ *
+ * @param sSearch A constant reference to a string containing a BCP 47
+ * identifier of the language.
+ */
+ void SetLanguage(const String& sLang);
+
+ /**
+ * This method retrieves a value that indicates the maximum number of search
+ * results to be retrieved in response to the query.
+ *
+ * @return An integer indicating the maximum number of results to be
+ * retrieved.
+ */
+ size_t GetMaxResults() const;
+
+ /**
+ * This method sets a value that indicates the maximum number of search
+ * results to be retrieved in response to the query.
+ *
+ * @param uMaxResults An integer indicating the maximum number of results to
+ * be retrieved.
+ */
+ void SetMaxResults(size_t uMaxResults);
+
+ /**
+ * This method retrieves a value that indicates the search item types
+ * to be retrieved in response to the query.
+ *
+ * @return A value indicating the search item type of results to be
+ * retrieved.
+ */
+ ResultTypes GetResultTypes() const;
+
+ /**
+ * This method sets a value that indicates the search item types
+ * to be retrieved in response to the query.
+ *
+ * @param eItemType A value indicating the search item type of results to
+ * be retrieved.
+ */
+ void SetResultTypes(ResultTypes eItemType);
+
+ /**
+ * This method retrieves a list of categories used by the query.
+ *
+ * @return An object containing a list of POI categories used by the query.
+ */
+ CategoryList GetCategoriesFilter() const;
+
+ /**
+ * This method sets a list of categories used by the query.
+ *
+ * @param filters A constant reference to an object containing a list of POI
+ * categories used by the query.
+ */
+ void SetCategoriesFilter(const CategoryList& filters);
+
+ /**
+ * This method attempts to establish a connection
+ * with the server and then, if the connection has been established, it
+ * builds and submits a query.
+ *
+ * @param rDst A reference to an object that is to be notified when the
+ * reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user data to be passed back within the
+ * corresponding reply object.
+ *
+ * @return Identifier of issued request.
+ */
+ RestItemHandle::RequestId Execute(FinderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This method retrieves error information associated with the query.
+ *
+ * @return A constant pointer to an object containing the error details.
+ */
+ const FinderError* GetError() const;
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * discovery queries.
+ *
+ * @return A string containing the base URI.
+ */
+ static String GetBaseUri();
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * discovery queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ static void SetBaseUri(const String& sUri);
+
+private:
+
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+ bool AppendService(DiscoveryQuery::QueryType eType, String& sDst) const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(DiscoveryQuery);
+
+ class DiscoveryQueryImpl;
+ DiscoveryQueryImpl* m_pImpl;
+
+ friend class DiscoveryReply;
+
+ static String s_sBaseUri;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISCOVERY_QUERY_H_
diff --git a/inc/engine/finder/DiscoveryReply.h b/inc/engine/finder/DiscoveryReply.h
new file mode 100755
index 0000000..bb1589c
--- /dev/null
+++ b/inc/engine/finder/DiscoveryReply.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISCOVERY_REPLY_H_
+#define DISCOVERY_REPLY_H_
+
+#include "finder/BaseFinderReply.h"
+#include "finder/SearchItem.h"
+#include "finder/PlaceItem.h"
+#include "finder/DiscoveryQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class SearchContext;
+
+/**
+ * This class encapsulates a response to a discovery query. The response is a
+ * page of link objects, each containing information about one place. It also
+ * includes a link to the next page of results, if available.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API DiscoveryReply : public BaseFinderReply
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ DiscoveryReply();
+
+ /**
+ * This is the (virtual) destructor.
+ */
+ virtual ~DiscoveryReply();
+
+ /**
+ * This method retrieves a list of search result items that can lead an
+ * application user to detailed information about specific places.
+ *
+ * @return A vector of instances of <code>SearchItem</code> which represent
+ * individual search results.
+ */
+ SearchItemList GetSearchItems() const;
+
+ /**
+ * This method retrieves a list of objects each of which contains
+ * information about a single place.
+ *
+ * @return A vector of instances of <code>PlaceItem</code> which represent
+ * individual places.
+ */
+ PlaceItemList GetPlaceItems() const;
+
+ /**
+ * This method retrieves a string that contains the URL to the next page of
+ * search result items.
+ *
+ * @return A string containing the URL to a page containing the next set of
+ * results.
+ */
+ String GetNextResultsString() const;
+
+ /**
+ * This method retrieves the offset (index) of the first item on the
+ * current page of results
+ *
+ * @return An integer indicating the index of the first result item on the
+ * current page.
+ */
+ size_t GetOffset() const;
+
+ /**
+ * This method retrieves an object that defines the search context used in
+ * the original query.
+ *
+ * @return An object containing the search context.
+ */
+ SearchContext GetSearchContext() const;
+
+ /**
+ * This method retrieves a query object that can be used to retrieve the
+ * next page of results.
+ *
+ * @return A pointer to an object encapsulating a query to the next page of
+ * results.
+ */
+ DiscoveryQuery* GetNextPageQuery() const;
+
+private:
+ void SetSearchItems(const SearchItemList&);
+ void SetPlaceItems(const PlaceItemList&);
+ void SetNextResults(const String&);
+ void SetOffset(size_t);
+ void SetSearchContext(const SearchContext& sContext);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(DiscoveryReply);
+ friend class TestDiscoveryReply;
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+ class DiscoveryReplyImpl;
+ DiscoveryReplyImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISCOVERY_REPLY_H_
diff --git a/inc/engine/finder/EditorialContent.h b/inc/engine/finder/EditorialContent.h
new file mode 100755
index 0000000..274445d
--- /dev/null
+++ b/inc/engine/finder/EditorialContent.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef EDITORIAL_CONTENT_H_
+#define EDITORIAL_CONTENT_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EditorialContent;
+
+/**
+ * This typedef defines a list of editorial content items as a type.
+ */
+typedef std::vector<EditorialContent> EditorialContentList;
+
+/**
+ * This class encapsulates editorial content relating to a place.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API EditorialContent : public BaseContent
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ EditorialContent();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ EditorialContent(const EditorialContent& rRhs);
+
+ /**
+ * This method is a (virtual) destructor.
+ */
+ virtual ~EditorialContent();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ EditorialContent& operator=(const EditorialContent& rRhs);
+
+ /**
+ * This method retrieves the description (the contents of an editorial
+ * item).
+ *
+ * @return A string containing the description.
+ */
+ String GetDescription() const;
+
+ /**
+ * This method retrieves the identifier of the language of the editorial
+ * item. The identifier is a string containing a BCP 47 language code (see
+ * also http://tools.ietf.org/html/rfc5646).
+ *
+ * @return A string containing the language identifier.
+ */
+ String GetLanguage() const;
+
+ /**
+ * This method sets the description (the contents of an editorial
+ * item).
+ *
+ * @param sText A constant reference to a string containing the description.
+ */
+ void SetDescription(const String& sText);
+
+ /**
+ * This method retrieves the identifier of the language of the editorial
+ * item. The identifier is a string containing a BCP 47 language code (see
+ * also http://tools.ietf.org/html/rfc5646).
+ *
+ * @param rLanguage A constant reference to a string containing the language
+ * identifier.
+ */
+ void SetLanguage(const String& rLanguage);
+
+private:
+ class EditorialContentImpl;
+ EditorialContentImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // EDITORIAL_CONTENT_H_
diff --git a/inc/engine/finder/ExtendedAttribute.h b/inc/engine/finder/ExtendedAttribute.h
new file mode 100755
index 0000000..b882cb3
--- /dev/null
+++ b/inc/engine/finder/ExtendedAttribute.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef EXTENDED_ATTRIBUTE_H_
+#define EXTENDED_ATTRIBUTE_H_
+
+#include "common/HereMaps_global.h"
+#include <vector>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ExtendedAttribute;
+/**
+ * This typedef defines a list of extended attributes as a type.
+ */
+typedef std::vector< ExtendedAttribute > ExtendedAttributeList;
+
+/**
+ * This class encapsulates an extended attribute relating to a place.
+ *
+ * Extended attributes can be used to provide additional information about a
+ * place. They contain a localized label and a text field that can be displayed
+ * without modification.
+ *
+ * \ingroup finder
+ */
+class ExtendedAttribute
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ ExtendedAttribute();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ ExtendedAttribute(const ExtendedAttribute& rRhs);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~ExtendedAttribute();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ ExtendedAttribute& operator=(const ExtendedAttribute& rRhs);
+
+ /**
+ * This method retrieves a string that indicates the type of the extended
+ * attribute.
+ *
+ * @return A string containing the attribute type identifier.
+ */
+ String GetAttributeType() const;
+
+ /**
+ * This method retrieves the extended attribute label, which is a localized
+ * string identifying the attribute.
+ *
+ * @return A string containing the extended attribute label.
+ */
+ String GetLabel() const;
+
+ /**
+ * This method retrieves the extended attribute text, which can be displayed
+ * without modification.
+ *
+ * @return A string containing the extended attribute text.
+ */
+ String GetText() const;
+
+ /**
+ * This method sets the type of the extended attribute.
+ *
+ * @rsType A constant reference to a string containing the attribute type
+ * identifier.
+ */
+ void SetAttributeType(const String& rsType);
+
+ /**
+ * This method sets the extended attribute label, which is a localized
+ * string identifying the attribute.
+ *
+ * @param rsLabel A constant reference to a string containing the extended
+ * attribute label.
+ */
+ void SetLabel(const String& rsLabel);
+
+ /**
+ * This method sets the extended attribute text, which can be displayed
+ * without modification.
+ *
+ * @param rsText A constant reference to a string containing the extended
+ * attribute text.
+ */
+ void SetText(const String& rsText);
+
+private:
+ class ExtendedAttributeImpl;
+ ExtendedAttributeImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // EXTENDED_ATTRIBUTE_H_
diff --git a/inc/engine/finder/FinderError.h b/inc/engine/finder/FinderError.h
new file mode 100755
index 0000000..9356fcb
--- /dev/null
+++ b/inc/engine/finder/FinderError.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FINDER_ERROR_H_
+#define FINDER_ERROR_H_
+
+#include "common/HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates error information reflecting an error that
+ * may arise when a parsing a finder request.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API FinderError : public ErrorBase
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for the recognized error types.
+ */
+ enum ErrorType
+ {
+ ET_InvalidQueryArguments, ///< Indicates invalid query argument.
+ ET_ParserError, ///< Indicates that an internal parser error occurred.
+ ET_InvalidCredentials, ///< Indicates that credentials are not correct or empty
+ ET_UnknownError ///< Indicate an unkown error
+ };
+
+ /**
+ * This method is a constructor.
+ *
+ * @param sStr A constant reference to a string containing an error message.
+ */
+ FinderError(ErrorType etype);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aType A value indicating the error type.
+ *
+ * @param sDescription A constant reference to a string containing the error
+ * description.
+ */
+ FinderError(ErrorType eType, const String& sDescription);
+
+ /**
+ * This method is a (virtual) destructor.
+ */
+ virtual ~FinderError();
+
+ /**
+ * This method retrieves a string representation of the given instance of
+ * the class.
+ *
+ * @return A string containing the error information held in the given
+ * instance of the class.
+ */
+ virtual String ToString() const;
+
+ /**
+ * This method sets the error description.
+ *
+ * @param sDsc A constant reference to a string containing the
+ * description of the error.
+ */
+ void SetDescription(const String& sDsc);
+
+ /**
+ * This method retrieves the error description.
+ *
+ * @return A constant reference to a string containing the
+ * description of the error.
+ */
+ String GetDescription() const;
+
+ /**
+ * This method retrieves the error type.
+ *
+ * @return A value indicating the error type.
+ */
+ ErrorType GetErrorType() const;
+
+ /**
+ * This method sets the error type.
+ *
+ * @param aType An error type.
+ */
+ void SetErrorType(ErrorType aType);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(FinderError);
+
+ class FinderErrorImpl;
+ FinderErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // FINDER_ERROR_H_
diff --git a/inc/engine/finder/FinderQueryListener.h b/inc/engine/finder/FinderQueryListener.h
new file mode 100755
index 0000000..9a84d48
--- /dev/null
+++ b/inc/engine/finder/FinderQueryListener.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FINDERQUERYLISTENER_H
+#define FINDERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DiscoveryReply;
+class PlaceDetailsReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to handle the replies from the server.
+ */
+class EXPORT_API FinderQueryListener : public QueryListener
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ FinderQueryListener();
+
+ /**
+ * This method is the destructor.
+ */
+ ~FinderQueryListener();
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * places search request.
+ *
+ * @param rReply A constant reference to an object containing the response data.
+ */
+ virtual void OnDiscoverReply(const DiscoveryReply& rReply) = 0;
+
+ #ifdef TIZEN_MIGRATION
+ /**
+ * This method is a callback invoked when geocoding request is failed.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnDiscoverFailure(const DiscoveryReply& rReply) = 0;
+ #endif
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * places details request.
+ *
+ * @param rReply A constant reference to an object containing the response data.
+ */
+ virtual void OnPlaceDetailsReply(const PlaceDetailsReply& rReply) = 0;
+
+ #ifdef TIZEN_MIGRATION
+ /**
+ * This method is a callback invoked when geocoding request is failed.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnPlaceDetailsFailure(const PlaceDetailsReply& rReply) = 0;
+ #endif
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(FinderQueryListener);
+
+ void OnReplySuccess(BaseReply& rReply);
+
+ #ifdef TIZEN_MIGRATION
+ void OnFailure(const BaseReply& rReply);
+ #endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/finder/ImageContent.h b/inc/engine/finder/ImageContent.h
new file mode 100755
index 0000000..46deb52
--- /dev/null
+++ b/inc/engine/finder/ImageContent.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef IMAGE_CONTENT_H_
+#define IMAGE_CONTENT_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBaseUtilUri.h>
+#endif
+
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class ImageContent;
+/**
+ * This typedef defines a list of image content objects as a type.
+ */
+typedef std::vector<ImageContent> ImageContentList;
+
+/**
+ * This class encapsulates the contents of an image. It includes information
+ * such as the source URL, image id, and the details of the user (provider).
+ *
+ * \ingroup finder
+ */
+class EXPORT_API ImageContent : public BaseContent
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ ImageContent();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ ImageContent(const ImageContent& rRhs);
+
+ /**
+ * This method is a (virtual) destructor.
+ */
+ virtual ~ImageContent();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ ImageContent& operator=(const ImageContent& rRhs);
+
+ /**
+ * This method retrieves the URI of the image source.
+ *
+ * @return An object containing the URI of the image source.
+ */
+ String GetSource() const;
+
+ /**
+ * This method retrieves the image identifier. Note that a meaningful
+ * identifier can be retrieved only if the image the image has been uploaded
+ * via the Places API.
+ *
+ * @return A string containing the id of the image.
+ */
+ String GetImageId() const;
+
+ /**
+ * This method retrieves a link to the provider of the image.
+ *
+ * @return An object with a link to the provider of the image.
+ */
+ LinkObject GetUser() const;
+
+ /**
+ * This method sets the URI of the image source.
+ *
+ * @param rUrl A constant reference to an object containing the URI of the
+ * image source.
+ */
+ void SetSource(const String& rUrl);
+
+ /**
+ * This method sets the image identifier. Note that a meaningful
+ * identifier can be retrieved only if the image has been uploaded
+ * via the Places API.
+ *
+ * @param rImageId A constant reference to a string containing the id of the
+ * image.
+ */
+ void SetImageId(const String& rImageId);
+
+ /**
+ * This method sets a link to the provider of the image.
+ *
+ * @param rUrl A constant reference to an object with a link to the provider
+ * of the image.
+ */
+ void SetUser(const LinkObject& rUrl);
+
+private:
+ class ImageContentImpl;
+ ImageContentImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif //IMAGE_CONTENT_H_
diff --git a/inc/engine/finder/LinkObject.h b/inc/engine/finder/LinkObject.h
new file mode 100755
index 0000000..2e0d2a0
--- /dev/null
+++ b/inc/engine/finder/LinkObject.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LINKOBJECT_H_
+#define LINKOBJECT_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a link that may be included in a search (result)
+ * item.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API LinkObject
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ LinkObject();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ LinkObject(const LinkObject& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~LinkObject();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ LinkObject& operator=(const LinkObject& rRhs);
+
+ /**
+ * This method retrieves the id of the resource to which the link points.
+ *
+ * @return A string containing the identifier of the object to which the
+ * link points.
+ */
+ String GetId() const;
+
+ /**
+ * This method retrieves the title of the resource to which the link points.
+ *
+ * @return A string containing a localized title for the resource to which
+ * the link refers.
+ */
+ String GetTitle() const;
+
+ /**
+ * This method retrieves the URI of the resource to which the link points.
+ *
+ * @return The URI for the resource to which the link refers.
+ */
+ String GetHref() const;
+
+ /**
+ * This method retrieves the identifier of the type of the resource to which
+ * the link points.
+ *
+ * @return A string containing the type identifier for the resource to which
+ * the link refers.
+ */
+ String GetType() const;
+
+ /**
+ * This method retrieves the URI of the icon for the resource to which the
+ * link points.
+ *
+ * @return The URI of the icon for the resource to which the link points.
+ */
+ String GetIconPath() const;
+
+ /**
+ * This method sets the id of the resource to which the link points.
+ *
+ * @param rsIdentifier A constant reference to a string containing the
+ * identifier of the object to which the link points.
+ */
+ void SetId(const String& rsIdentifier);
+
+ /**
+ * This method sets the title of the resource to which the link points.
+ *
+ * @param sTitle A constant reference to a string containing a localized
+ * title for the resource to which the link refers.
+ */
+ void SetTitle(const String& sTitle);
+
+ /**
+ * This method sets the URI of the resource to which the link points.
+ *
+ * @param rHref A constant reference to an object holding the URI for the
+ * resource to which the link refers.
+ */
+ void SetHref(const String& rHref);
+
+ /**
+ * This method sets the identifier of the type of the resource to which
+ * the link points.
+ *
+ * @param sType A constant reference to a string containing the type
+ * identifier for the resource to which the link refers.
+ */
+ void SetType(const String& sType);
+
+ /**
+ * This method sets the URI of the icon for the resource to which the
+ * link points.
+ *
+ * @param A constant reference to an object containing the URI of the icon
+ * for the resource to which the link points.
+ */
+ void SetIconPath(const String& rIconUrl);
+
+private:
+ class LinkObjectImpl;
+ LinkObjectImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // LINKOBJECT_H_
diff --git a/inc/engine/finder/PlaceDetails.h b/inc/engine/finder/PlaceDetails.h
new file mode 100755
index 0000000..40ee8ef
--- /dev/null
+++ b/inc/engine/finder/PlaceDetails.h
@@ -0,0 +1,363 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_H_
+#define PLACE_DETAILS_H_
+
+#include "finder/ContactDetails.h"
+#include "finder/PlacesGlobals.h"
+#include "finder/Category.h"
+#include "finder/ImageContent.h"
+#include "finder/ReviewContent.h"
+#include "finder/EditorialContent.h"
+#include "finder/ExtendedAttribute.h"
+#include "common/HereMaps_global.h"
+#include "internal/StringHelper.h"
+
+#include <map>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Ratings;
+class GeoLocation;
+class ExtendedAttribute;
+class RelatedItem;
+class BaseContent;
+
+/**
+ * This class encapsulates detailed information about a place, including name,
+ * id, contact, category, location, ratings, review(s) and image(s).
+ *
+ * \ingroup finder
+ */
+class EXPORT_API PlaceDetails
+{
+public:
+ /**
+ * This typedef defines a map holding alternative place names as a type.
+ */
+ typedef std::map< String, std::vector< String >, TSPredicate > AlternativeNames;
+
+public:
+ /**
+ * This method is the default constructor.
+ */
+ PlaceDetails();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ PlaceDetails(const PlaceDetails& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~PlaceDetails();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ PlaceDetails& operator=(const PlaceDetails& rRhs);
+
+ /**
+ * This method retrieves the name of the place.
+ *
+ * @return A string containing the place name.
+ */
+ String GetName() const;
+
+ /**
+ * This method retrieves the place id, which is a unique identifier in the
+ * Places database and can be used to obtain the complete information
+ * about the place.
+ *
+ * @return A string containing the unique id of the place.
+ */
+ String GetPlaceId() const;
+
+ /**
+ * This method retrieves a link to a representation of the
+ * place that can be viewed by end users.
+ *
+ * @return A string containing a link to a view of the place.
+ */
+ String GetView() const;
+
+ /**
+ * This method retrieves a map object containing the alternative names of the
+ * place.
+ *
+ * @return An object containing the alternative names of the place.
+ */
+ AlternativeNames GetAlternativeNames() const;
+
+ /**
+ * This method retrieves detailed location information for the place.
+ *
+ * @return An object containing the address and the geographical coordinates
+ * of the place.
+ */
+ GeoLocation GetLocation() const;
+
+ /**
+ * This method retrieves basic information about the place.
+ *
+ * @return An object containing basic information about the place.
+ */
+ BaseContent GetBaseContent() const;
+
+ /**
+ * This method retrieves a list of contact types available for the given
+ * place. Contact types can include telephone, e-mail, website, site, etc.
+ *
+ * @return A list of strings containing contact type identifiers. The
+ * possible values for contact type identifiers are "phone",
+ * "website", "fax", or "email".
+ */
+ StringList GetContactTypes() const;
+
+ /**
+ * This method retrieves a list of contact details for the given place.
+ *
+ * @return A vector containing instances of <code>ContactDetails</code>.
+ */
+ ContactDetailsList GetContactDetails() const;
+
+ /**
+ * This method retrieves a list of categories applicable to the given place.
+ *
+ * @return A vector containing instances of <code>Category</code>
+ */
+ CategoryList GetCategories() const;
+
+ /**
+ * This method retrieves information on user rating of the given place.
+ *
+ * @return An object containing user rating information.
+ */
+ Ratings GetRatings() const;
+
+ /**
+ * This method retrieves the URI of the icon that represents the given
+ * place.
+ *
+ * @return A URI of the place icon.
+ */
+ String GetIconPath() const;
+
+ /**
+ * This method retrieves a list object containing image content information
+ * for images relating to the given place.
+ *
+ * @return An object containing a vector of instances of
+ * <code>ImageContent</code>.
+ */
+ ImageContentList GetImageContent() const;
+
+ /**
+ * This method retrieves a list object containing review content
+ * relating to the given place.
+ *
+ * @return An object containing a vector of instances of
+ * <code>ReviewContent</code>.
+ */
+ ReviewContentList GetReviewContent() const;
+
+ /**
+ * This method retrieves a list object containing editorial content
+ * relating to the given place.
+ *
+ * @return An object containing a vector of instances of
+ * <code>EditorialContent</code>.
+ */
+ EditorialContentList GetEditorialContent() const;
+
+ /**
+ * This method retrieves a list of strings, each containing an identifier of
+ * an extended attribute type applicable to the given place.
+ *
+ * @return A list of strings containing extended attribute type identifiers.
+ */
+ StringList GetExtendedAttributeTypes() const;
+
+ /**
+ * This method retrieves a list object containing extended attributes
+ * applicable to the given place.
+ *
+ * @return An object containing a vector of instances of
+ * <code>ExtendedAttribute</code>.
+ */
+ ExtendedAttributeList GetExtendedAttributes() const;
+
+ /**
+ * This method retrieves an object containing a list of places that
+ * are related to the given place (or places that may be be interesting to
+ * users who have looked at the given place).
+ *
+ * @return An object encapsulating places related to the given place.
+ */
+ RelatedItem GetRelatedItem() const;
+
+ /**
+ * This method sets the name of the place.
+ *
+ * @param rsName A constant reference to a string containing the place name.
+ */
+ void SetName(const String& rsName);
+
+ /**
+ * This method sets the place id, which is a unique identifier in the
+ * Places database and can be used to obtain the complete information
+ * about the place.
+ *
+ * @param rsIdentifier A constant reference to a string containing the
+ * unique id of the place.
+ */
+ void SetPlaceId(const String& rsIdentifier);
+
+ /**
+ * This method sets a link to a representation of the
+ * place that can be viewed by end users.
+ *
+ * @param rsView A constant reference to a string containing a link to a
+ * view of the place.
+ */
+ void SetView(const String& rsView);
+
+ /**
+ * This method sets a map object containing the alternative names of the
+ * place.
+ *
+ * @param vNames A constant reference to an object containing the alternative
+ * names of the place.
+ */
+ void SetAlternativeNames(const AlternativeNames& vNames);
+
+ /**
+ * This method sets the location details for the place.
+ *
+ * @param rLocation A constant reference to an object containing the address
+ * and the geographical coordinates of the place.
+ */
+ void SetLocation(const GeoLocation& rLocation);
+
+ /**
+ * This method sets basic information about the place.
+ *
+ * @param rContent A constant reference to an object containing basic
+ * information about the place.
+ */
+ void SetContent(const BaseContent& rContent);
+
+ /**
+ * This method sets a list of contact details for the given place.
+ *
+ * @param vDetails A constant reference to a vector containing instances of
+ * <code>ContactDetails</code>.
+ */
+ void SetContactDetails(const ContactDetailsList& vDetails);
+
+ /**
+ * This method sets a list of (POI) categories applicable to the given place.
+ *
+ * @param rvCategories A constant reference to a vector containing instances
+ * of <code>Category</code>
+ */
+ void SetCategories(const CategoryList& rvCategories);
+
+ /**
+ * This method sets information on user rating of the given place.
+ *
+ * @param rRatings A constant reference to an object containing user rating
+ * information.
+ */
+ void SetRatings(const Ratings& rRatings);
+
+ /**
+ * This method sets the URI of the icon that represents the given
+ * place.
+ *
+ * @param rIcon A constant reference to an object containing the URI of the
+ * place icon.
+ */
+ void SetIconPath(const String rIcon);
+
+ /**
+ * This method sets a list object containing image content data
+ * for images relating to the given place.
+ *
+ * @param rContent A constant reference to a vector of
+ * instances of <code>ImageContent</code>.
+ */
+ void SetImageContent(const ImageContentList& rContent);
+
+ /**
+ * This method sets a list object containing review content
+ * relating to the given place.
+ *
+ * @param rContent A constant reference to a vector of
+ * instances of <code>ReviewContent</code>.
+ */
+ void SetReviewContent(const ReviewContentList& rContent);
+
+ /**
+ * This method sets a list object containing editorial content
+ * relating to the given place.
+ *
+ * @param rContent A constant reference to a vector of
+ * instances of <code>EditorialContent</code>.
+ */
+ void SetEditorialContent(const EditorialContentList& rContent);
+
+ /**
+ * This method sets a list object containing extended attributes
+ * applicable to the given place.
+ *
+ * @param rAttribute A constant reference to a vector of
+ * instances of <code>ExtendedAttribute</code>.
+ */
+ void SetExtendedAttributes(const ExtendedAttributeList& rAttribute);
+
+ /**
+ * This method sets an object containing a list of places that
+ * are related to the given place (or places that may be of interest to
+ * users who have looked at the given place).
+ *
+ * @param rAttribute A constant reference to a object encapsulating places
+ * related to the given place.
+ */
+ void SetRelatedItem(const RelatedItem& rAttribute);
+
+private:
+ class PlaceDetailsImpl;
+ PlaceDetailsImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_H_
diff --git a/inc/engine/finder/PlaceDetailsQuery.h b/inc/engine/finder/PlaceDetailsQuery.h
new file mode 100755
index 0000000..134db79
--- /dev/null
+++ b/inc/engine/finder/PlaceDetailsQuery.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_QUERY_H
+#define PLACE_DETAILS_QUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class PlaceDetailsReply;
+class FinderQueryListener;
+class FinderError;
+
+/**
+ * This class encapsulates a request for detailed information about a specific
+ * place.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API PlaceDetailsQuery : public BaseQuery
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ PlaceDetailsQuery();
+
+ /**
+ * This method is a copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ PlaceDetailsQuery(const PlaceDetailsQuery& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~PlaceDetailsQuery();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ PlaceDetailsQuery& operator=(const PlaceDetailsQuery& rRhs);
+
+ /**
+ * This method sets the place id.
+ *
+ * @param rPlaceId A constant reference to a string containing the unique
+ * identifier of the place whose details are to be obtained.
+ */
+ void SetPlaceId(const String& rPlaceId);
+
+ /**
+ * This method retrieves the place id.
+ *
+ * @return A string containing the unique identifier of the place whose
+ * details are to be obtained.
+ */
+ String GetPlaceId() const;
+
+ /**
+ * This method retrieves a BCP 47 code representing the search language.
+ *
+ * @return A string containing a BCP 47 identifier of the language.
+ */
+ String GetLanguage() const;
+
+ /**
+ * This method sets the langauge, using a BCP 47 identifier.
+ *
+ * @param sSearch A constant reference to a string containing a BCP 47
+ * identifier of the language.
+ */
+ void SetLanguage(const String& sLang);
+
+ /**
+ * This method attempts to establish a connection with the server and then,
+ * if the connection has been established, builds and submits a query.
+ *
+ * @param rListener A reference to an object that is to be notified when the
+ * reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user data to be passed back within the
+ * corresponding reply object.
+ *
+ * @return Identifier of issued request.
+ */
+ RestItemHandle::RequestId Execute(FinderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL, const char* pUrl="") const;
+
+ /**
+ * This method retrieves error information associated with the query parameters
+ *
+ * @return A constant pointer to an object containing the error details.
+ */
+ const FinderError* GetError() const;
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * place detail queries.
+ *
+ * @return A string containing the base URI.
+ */
+ static String GetBaseUri();
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * place detail queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ static void SetBaseUri(const String& sUri);
+
+private:
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+private:
+ class PlaceDetailsQueryImpl;
+ PlaceDetailsQueryImpl* m_pImpl;
+
+ static String s_sBaseUri;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_QUERY_H
diff --git a/inc/engine/finder/PlaceDetailsReply.h b/inc/engine/finder/PlaceDetailsReply.h
new file mode 100755
index 0000000..1bbb36b
--- /dev/null
+++ b/inc/engine/finder/PlaceDetailsReply.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_REPLY_H_
+#define PLACE_DETAILS_REPLY_H_
+
+#include "common/HereMaps_global.h"
+#include "finder/BaseFinderReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class PlaceDetails;
+
+/**
+ * This class encapsulates a response to a request for place details
+ * (<code>PlaceDetailsQuery</code>).
+ *
+ * \ingroup finder
+ */
+class EXPORT_API PlaceDetailsReply : public BaseFinderReply
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ PlaceDetailsReply();
+
+ /**
+ * This is the destructor.
+ */
+ ~PlaceDetailsReply();
+
+ /**
+ * This method retrieves the details of the place that have been returned by
+ * the server.
+ *
+ * @return An object containing the place details.
+ */
+ PlaceDetails GetPlaceDetails() const;
+
+private:
+ void SetPlaceDetails(const PlaceDetails& rPlace);
+ bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(PlaceDetailsReply);
+ friend class TestPlaceDetailsReply;
+
+ class PlaceDetailsReplyImpl;
+ PlaceDetailsReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_REPLY_H_
diff --git a/inc/engine/finder/PlaceItem.h b/inc/engine/finder/PlaceItem.h
new file mode 100755
index 0000000..38eae3d
--- /dev/null
+++ b/inc/engine/finder/PlaceItem.h
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_ITEM_H_
+#define PLACE_ITEM_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+class Category;
+class LinkObject;
+class GeoBoundingBox;
+
+class PlaceItem;
+/**
+ * This typedef defines a vector of place items as a type.
+ *
+ * \ingroup finder
+ */
+typedef std::vector< PlaceItem > PlaceItemList;
+
+/**
+ * This class encapsulates information about a place that has been returned as
+ * part of a reply to a search query (an item in a search result). This
+ * information can be used to obtain place details.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API PlaceItem
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ PlaceItem();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ PlaceItem(const PlaceItem& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~PlaceItem();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ PlaceItem& operator=(const PlaceItem& rRhs);
+
+ /**
+ * This method retrieves the geographic coordinates of the given place.
+ *
+ * @return An object containing the geographic coordinates of the place.
+ */
+ GeoCoordinates GetPosition() const;
+
+ /**
+ * This method retrieves the distance in meters between the given place and
+ * the search context (center).
+ *
+ * @return A value indicating how far the given place lies from the search
+ * context (center).
+ */
+ double GetDistance() const;
+
+ /**
+ * This method retrieves a value that represents the average rating of the
+ * place by users.
+ *
+ * @return A value that represents the average rating of the place by users.
+ */
+ double GetAverageRating() const;
+
+ /**
+ * This method retrieves an object representing the category to which the
+ * given place is assigned.
+ *
+ * @return An object representing the category to which the given place is
+ * assigned.
+ */
+ Category GetCategory() const;
+
+ /**
+ * This method retrieves a link to a resource associated with the given
+ * place item.
+ *
+ * @return An object encapsulating a link to a resource.
+ */
+ LinkObject GetLinkObject() const;
+
+ /**
+ * This method retrieves text describing the location of the place. The text
+ * is typically derived from the address of the place, but may also contain
+ * any other information that can help the user understand, where the place is
+ * located.
+ *
+ * @return A string containing the description of the vicinity (location) of
+ * the place.
+ */
+ String GetVicinity() const;
+
+ /**
+ * This method retrieves a Boolean value indicating if the given search
+ * result is sponsored or not.
+ *
+ * @return <code>true</code> if the given search result is sponsored,
+ * otherwise <code>false</code>.
+ */
+ bool GetIsSponsored() const;
+
+ /**
+ * This method retrieves the bounding box enclosing the given place.
+ *
+ * @return An object representing the bounding box (defined in terms of the
+ * geographical coordinates of its top-left and bottom-right corners)
+ * that encloses the given place.
+ */
+ GeoBoundingBox GetBBox() const;
+
+ /**
+ * This method sets the geographic coordinates of the given place.
+ *
+ * @param rPosition GeoCoordinates A constant reference to a object
+ * containing the geographic coordinates of the place.
+ */
+ void SetPosition(const GeoCoordinates& rPosition);
+
+ /**
+ * This method sets the distance in meters between the given place and
+ * the search context (center).
+ *
+ * @param dDistance A value indicating how far the
+ * given place lies from the search context (center).
+ */
+ void SetDistance(double dDistance);
+
+ /**
+ * This method sets a value that represents the average rating of the
+ * place by users.
+ *
+ * @param dAverageRating A value that represents the average rating of the
+ * place by users.
+ */
+ void SetAverageRating(double dAverageRating);
+
+ /**
+ * This method sets an object representing the category to which the
+ * given place is assigned.
+ *
+ * @param rCategory A constant reference to an object representing the
+ * category to which the given place is assigned.
+ */
+ void SetCategory(const Category& rCategory);
+
+ /**
+ * This method sets text describing the location of the place. The text
+ * is typically derived from the address of the place, but may also contain
+ * any other information that may help the user understand, where the place is
+ * located.
+ *
+ * @param sVicinity A constant reference to a string containing the
+ * description of the vicinity (location) of the place.
+ */
+ void SetVicinity(const String& sVicinity);
+
+ /**
+ * This method sets a link to a resource associated with the given
+ * place item.
+ *
+ * @param rLinkObject A constant reference to an object encapsulating a link
+ * to a resource.
+ */
+ void SetLinkObject(const LinkObject& rLinkObject);
+
+ /**
+ * This method sets a Boolean value indicating if the given search
+ * result item is sponsored or not.
+ *
+ * @param bIsSponsored <code>true</code> if the given search result item is
+ * sponsored, otherwise <code>false</code>.
+ */
+ void SetIsSponsored(bool bIsSponsored);
+
+ /**
+ * This method sets the bounding box enclosing the given place.
+ *
+ * @param rBbox A constant reference to an object representing the bounding
+ * box (defined in terms of the geographical coordinates of its
+ * top-left and bottom-right corners) that encloses the given place.
+ */
+ void SetBBox(const GeoBoundingBox& rBbox);
+
+private:
+ class PlaceItemImpl;
+ PlaceItemImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_ITEM_H_
diff --git a/inc/engine/finder/PlacesError.h b/inc/engine/finder/PlacesError.h
new file mode 100755
index 0000000..b9c8bf3
--- /dev/null
+++ b/inc/engine/finder/PlacesError.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACES_ERROR_H_
+#define PLACES_ERROR_H_
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an error condition that may arise when submitting
+ * places-related queries and retrieving results.
+ *
+ * \ingroup finder
+ */
+class PlacesError : public ErrorBase
+{
+public:
+ /**
+ * This enumeration defines identifiers for both success and error
+ * conditions.
+ */
+ enum ErrorCode
+ {
+ EC_NoError, ///< Indicates success.
+ EC_PlaceDoesNotExistError, ///< Indicates that the play does not exist.
+ EC_CategoryDoesNotExistError, ///< Indicates that the category does not exist.
+ EC_ParseError, ///< Indicates a parsing error.
+ EC_PermissionsError, ///< Indicates that the required
+ /// permissions are not in place.
+ EC_UnsupportedError, ///< Indicates that a query/operation is
+ /// not supported.
+ EC_BadArgumentError, ///< Indicates that an argument supplied
+ /// by the caller is bad or not recognized.
+ EC_CancelError, ///< Indicates that an error occurred when
+ /// attempting to cancel a request.
+ EC_UnknownError ///< Indicates an unspecified/unknown error.
+ };
+
+ /**
+ * This is a constructor for the class.
+ *
+ * @param aErrorCode A value representing the error code with which to
+ * initialize a new instance of the class.
+ */
+ PlacesError(ErrorCode aErrorCode);
+
+ /**
+ * This method is the (virtual) destructor for the class.
+ */
+ virtual ~PlacesError();
+
+ /**
+ * This method retrieves a value representing the error code assigned to
+ * the given instance of the class.
+ *
+ * @return A value representing the error code assigned to
+ * the given instance of the class.
+ */
+ ErrorCode GetErrorCode() const;
+
+ /**
+ * This method retrieves a string representation of the given instance of
+ * the class.
+ *
+ * @return A String representation of
+ * the given instance of the class. The possible values are
+ * "No Error", "Place Doesn't exist", "Category doesn't exist",
+ * "Parse error", "Permissions error", "Unsupported error",
+ * "Bad argument", "Cancel error", "Unknown error",
+ * or "No defined error".
+ */
+ virtual String ToString() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(PlacesError);
+
+ class PlacesErrorImpl;
+ PlacesErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACES_ERROR_H_
diff --git a/inc/engine/finder/PlacesGlobals.h b/inc/engine/finder/PlacesGlobals.h
new file mode 100755
index 0000000..577e106
--- /dev/null
+++ b/inc/engine/finder/PlacesGlobals.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACES_GLOBAL_H_
+#define PLACES_GLOBAL_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This typedef defines a list of strings as a type.
+ *
+ * \ingroup finder
+ * \typedef std::vector<Tizen::Base::String> StringList
+ */
+typedef std::vector<String> StringList;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACES_GLOBAL_H_
diff --git a/inc/engine/finder/Ratings.h b/inc/engine/finder/Ratings.h
new file mode 100755
index 0000000..87107be
--- /dev/null
+++ b/inc/engine/finder/Ratings.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RATINGS_H_
+#define RATINGS_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates place ratings contributed by users.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API Ratings
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ Ratings();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ Ratings(const Ratings& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~Ratings();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ Ratings& operator=(const Ratings& rRhs);
+
+ /**
+ * This method retrieves the average rating for a place.
+ *
+ * @return A value reflecting the average user rating for a place.
+ */
+ double GetAverage() const;
+
+ /**
+ * This method retrieves a value indicating how many users have rated a place.
+ *
+ * @return A value indicating how many users have rated a place.
+ */
+ size_t GetCount() const;
+
+ /**
+ * This method sets the average rating for a place.
+ *
+ * @param aAverage A value reflecting the average user rating for a place.
+ */
+ void SetAverage(double aAverage);
+
+ /**
+ * This method sets a value indicating how many users have rated a place.
+ *
+ * @param aCount A value indicating how many users have rated a place.
+ */
+ void SetCount(size_t aCount);
+
+private:
+ class RatingsImpl;
+ RatingsImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // RATINGS_H_
diff --git a/inc/engine/finder/RelatedItem.h b/inc/engine/finder/RelatedItem.h
new file mode 100755
index 0000000..2e55176
--- /dev/null
+++ b/inc/engine/finder/RelatedItem.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RELATED_ITEM_H_
+#define RELATED_ITEM_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an item related to a place returned as part of a
+ * response to a query.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API RelatedItem
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ RelatedItem();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ RelatedItem(const RelatedItem& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~RelatedItem();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ RelatedItem& operator=(const RelatedItem& rRhs);
+
+ /**
+ * This method retrieves the title/name of the related/recommended item.
+ *
+ * @return A string containing the title or name.
+ */
+ String GetTitle() const;
+
+ /**
+ * This method retrieves the type specifier for the related/recommended item.
+ *
+ * @return A string containing the type specifier for the
+ * related/recommended item.
+ */
+ String GetType() const;
+
+ /**
+ * This method retrieves a hyperlink that refers to the resource
+ * represented by the related/recommended item.
+ *
+ * @return A string containing a hyperlink that refers to the resource
+ * represented by the related/recommended item.
+ */
+ String GetHref() const;
+
+ /**
+ * This method sets the title/name of the related/recommended item.
+ *
+ * @param sTitle A constant reference to a string containing the title or
+ * name.
+ */
+ void SetTitle(const String& sTitle);
+
+ /**
+ * This method sets the type specifier for the related/recommended item.
+ *
+ * @param sType A constant reference to a string containing the type
+ * specifier for the related/recommended item.
+ */
+ void SetType(const String& sType);
+
+ /**
+ * This method sets a hyperlink that refers to the resource
+ * represented by the related/recommended item.
+ *
+ * @param uHref A constant reference to an object containing a hyperlink that
+ * refers to the resource represented by the related/recommended
+ * item.
+ */
+ void SetHref(const String& uHref);
+
+private:
+ class RelatedItemImpl;
+ RelatedItemImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // RELATED_ITEM_H_
+
diff --git a/inc/engine/finder/ReviewContent.h b/inc/engine/finder/ReviewContent.h
new file mode 100755
index 0000000..a83f562
--- /dev/null
+++ b/inc/engine/finder/ReviewContent.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef REVIEW_CONTENT_H_
+#define REVIEW_CONTENT_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBaseDateTime.h>
+#endif
+
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class ReviewContent;
+/**
+ * This typedef defines a list or review content items as a type.
+ */
+typedef std::vector<ReviewContent> ReviewContentList;
+
+/**
+ * This class encapsulates the content of a review related to a place.
+ *
+ * \ingroup finder
+ */
+class EXPORT_API ReviewContent : public BaseContent
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ ReviewContent();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ ReviewContent(const ReviewContent& rRhs);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~ReviewContent();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ ReviewContent& operator=(const ReviewContent& rRhs);
+
+ /**
+ * This method retrieves the review date as a string.
+ *
+ * @return A string containing the date of the review.
+ */
+ String GetDateTime() const;
+
+ /**
+ * This method retrieves the review title.
+ *
+ * @return A string containing the review title.
+ */
+ String GetTitle() const;
+
+ /**
+ * This method retrieves the review rating.
+ *
+ * @return A double containing the retrieved value of rating.
+ */
+ double GetRating() const;
+
+ /**
+ * This method retrieves the review description (text).
+ *
+ * @return A string containing the review
+ * description (text).
+ */
+ String GetDescription() const;
+
+ /**
+ * This method retrieves a link to the website of the user, who submitted
+ * the review.
+ *
+ * @return An object representing a link to the website of the user, who submitted
+ * the review.
+ */
+ LinkObject GetUser() const;
+
+ /**
+ * This method retrieves the BCP 47 identifier of the language used in the
+ * review.
+ *
+ * @return A string containing the identifier of the language used in the
+ * review.
+ */
+ String GetLanguage() const;
+
+ /**
+ * This method sets the review date as a string.
+ *
+ * @param rDateTime A constant reference to a string containing the date of
+ * the review.
+ */
+ void SetDateTime(const String &rDateTime);
+
+ /**
+ * This method sets the review title.
+ *
+ * @param rTitle A constant reference to a string containing the review
+ * title.
+ */
+ void SetTitle(const String& rTitle);
+
+ /**
+ * This method sets the review rating.
+ *
+ * @param dRating A double containing the retrieved value of rating.
+ */
+ void SetRating(double dRating);
+
+ /**
+ * This method sets the review description (text).
+ *
+ * @param sText A constant reference to a string containing the review
+ * description (text).
+ */
+ void SetDescription(const String& sText);
+
+ /**
+ * This method sets a link to the website of the user, who submitted
+ * the review.
+ *
+ * @param cUser A constant reference to an object representing a link to the
+ * website of the user, who submitted the review.
+ */
+ void SetUser(const LinkObject& cUser);
+
+ /**
+ * This method sets the BCP 47 identifier of the language used in the
+ * review.
+ *
+ * @param sLanguage A constant reference to a string containing the
+ * identifier of the language used in the review.
+ */
+ void SetLanguage(const String& sLanguage);
+
+private:
+ class ReviewContentImpl;
+ ReviewContentImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // REVIEW_CONTENT_H_
diff --git a/inc/engine/finder/SearchContext.h b/inc/engine/finder/SearchContext.h
new file mode 100755
index 0000000..68513f7
--- /dev/null
+++ b/inc/engine/finder/SearchContext.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SEARCH_CONTEXT_H_
+#define SEARCH_CONTEXT_H_
+
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoLocation;
+
+/**
+ * This class encapsulates the search context used in queries. The context
+ * defines the point around which the search is conducted or an area within
+ * which the search is conducted.
+ *
+ * \ingroup finder
+ */
+class SearchContext
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ SearchContext();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ SearchContext(const SearchContext& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~SearchContext();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ SearchContext& operator=(const SearchContext& rRhs);
+
+ /**
+ * This method retrieves a Boolean value that indicates if the retrieved
+ * location is different from the location context used in the search. The
+ * retrieved location is not the same as the location context, typically when
+ * the location context is implicit (derived from request headers).
+ *
+ * @return <code>true</code> if the retrieved location is different from the
+ * one used in the search, otherwise <code>false</code>.
+ */
+ bool GetMoved() const;
+
+ /**
+ * This method retrieves an object containing the details of the search
+ * context such as the geographic coordinates and street address.
+ *
+ * @return An object containing the details of the search context
+ * (geographic coordinates and address if available)
+ */
+ GeoLocation GetLocation() const;
+
+ /**
+ * This method retrieves the media type specifier for the given search
+ * context.
+ *
+ * @return A string containing the media type specifier for the search
+ * context, "urn:nlp-types:place".
+ */
+ String GetType() const;
+
+ /**
+ * This method retrieves the title of the given search context.
+ *
+ * @return A string containing the title of the search context.
+ */
+ String GetTitle() const;
+
+ /**
+ * This method retrieves a link to the details of the place at
+ * the center of the search context. Note that the link is available only if
+ * the search context points to a recognized place, rather than, for
+ * example, the middle of an ocean.
+ *
+ * @return A URI (link) to the details of the place at the center of the
+ * search context, if available.
+ */
+ String GetHref() const;
+
+ /**
+ * This method sets a Boolean value that indicates if the retrieved
+ * location is different from the location context used in the search. The
+ * retrieved location is not the same as the location context, typically when
+ * the location context is implicit (derived from request headers).
+ *
+ * @param bMoved <code>true</code> if the retrieved location is different from the
+ * one used in the search, otherwise <code>false</code>.
+ */
+ void SetMoved(bool bMoved);
+
+ /**
+ * This method sets an object containing the details of the search
+ * context such as the geographic coordinates and street address.
+ *
+ * @return A constant reference to an object containing the details of the
+ * search context (geographic coordinates and address if available)
+ */
+ void SetLocation(const GeoLocation& rLocation);
+
+ /**
+ * This method sets the media type specifier for the given search
+ * context.
+ *
+ * @param sType A constant reference to a string containing the media type
+ * specifier for the search context, "urn:nlp-types:place".
+ */
+ void SetType(const String& sType);
+
+ /**
+ * This method sets the title of the given search context.
+ *
+ * @param sTitle A constant reference to a string containing the title of
+ * the search context.
+ */
+ void SetTitle(const String& sTitle);
+
+ /**
+ * This method sets a link to the details of the place at
+ * the center of the search context. Note that the link is available only if
+ * the search context points to a recognized place, rather than, for
+ * example, the middle of an ocean.
+ *
+ * @param uHref A constant reference to a URI (link) to the details of the
+ * place at the center of the search context, if available.
+ */
+ void SetHref(const String& uHref);
+
+private:
+ class SearchContextImpl;
+ SearchContextImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // SEARCH_CONTEXT_H_
diff --git a/inc/engine/finder/SearchItem.h b/inc/engine/finder/SearchItem.h
new file mode 100755
index 0000000..5d983f2
--- /dev/null
+++ b/inc/engine/finder/SearchItem.h
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SEARCH_ITEM_H_
+#define SEARCH_ITEM_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class SearchItem;
+/**
+ * This typedef defines a list of search items as a type.
+ */
+typedef std::vector< SearchItem > SearchItemList;
+
+/**
+ * This class encapsulates a search item returned by the server as part of a
+ * response to a discovery query.
+ *
+ * \ingroup finder
+ */
+class SearchItem
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ SearchItem();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ SearchItem(const SearchItem& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~SearchItem();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs An object whose contents are to be copied to the given
+ * instance.
+ *
+ * @return A reference to the given instance of the class after its contents
+ * have been updated.
+ */
+ SearchItem& operator=(const SearchItem& rRhs);
+
+ /**
+ * This method retrieves the link object from the given search item. The
+ * link points to another resource.
+ *
+ * @return An object containing a link to another resource.
+ */
+ LinkObject GetLinkObject() const;
+
+ /**
+ * This method retrieves the URI to the detailed information about the place
+ * to which the given search item refers.
+ *
+ * @return The URI of the detailed information about the
+ * place to which the given search item refers.
+ */
+ String GetPlacesPath() const;
+
+ /**
+ * This method retrieves a value representing the weighting of the given
+ * search item.
+ *
+ * @return A value that represents the weighting of the given
+ * search item.
+ */
+ double GetWeight() const;
+
+ /**
+ * This method sets the link object from the given search item. The
+ * link points to another resource.
+ *
+ * @param uLink A constant reference to an object containing a link to
+ * another resource.
+ */
+ void SetLinkObject(const LinkObject& uLink);
+
+ /**
+ * This method sets the URI to the detailed information about the place
+ * to which the given search item refers.
+ *
+ * @param uPlacesPath A constant reference to an object containing the URI
+ * of the detailed information about the place to which the given
+ * search item refers.
+ */
+ void SetPlacesPath(const String& uPlacesPath);
+
+ /**
+ * This method sets a value representing the weighting of the given
+ * search item.
+ *
+ * @param dWeight A value that represents the weighting of the given search
+ * item.
+ */
+ void SetWeight(double dWeight);
+
+private:
+
+ class SearchItemImpl;
+ SearchItemImpl* m_pImpl;
+
+ friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // SEARCH_ITEM_H_
diff --git a/inc/engine/geocoder/GeoCoderQuery.h b/inc/engine/geocoder/GeoCoderQuery.h
new file mode 100755
index 0000000..d88ca4a
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderQuery.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERY_H_
+#define GEOCODERQUERY_H_
+
+#include "common/HereMaps_global.h"
+
+#include "geocoder/GeoCoderQueryBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Address;
+class GeoCoderReply;
+class GeoBoundingBox;
+class ApplicationContext;
+class GeoCoderQueryListener;
+
+/**
+ * This class represents a geocoding query.
+ *
+ * Instances of this class are used to obtain the geographic coordinates of
+ * locations on the basis of an address (complete or partial) and/or a free text
+ * search string.
+ *
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderQuery : public GeoCoderQueryBase
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ GeoCoderQuery();
+
+ /**
+ * This method is a constructor.
+ *
+ * @param rAddress A constant reference to an object providing the details
+ * of an address to use in the query.
+ */
+ GeoCoderQuery(const Address& rAddress);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param rAddress A constant reference to an object that provides the details
+ * of an address to use in the query.
+ *
+ * @param sSearch A constant reference to a string containing the search
+ * text to use in the query.
+ */
+ GeoCoderQuery(const Address& rAddress, const String& sSearch);
+
+ /**
+ * This method is a constructor.
+ *
+ * @param sSearch A constant reference to a string containing the search
+ * text to use in the query.
+ */
+ GeoCoderQuery(const String& sSearch);
+
+ /**
+ * This method is a virtual destructor.
+ */
+ virtual ~GeoCoderQuery();
+
+ /**
+ * This method sets the properties defining a circular area within which a
+ * search is to be conducted. The area is defined in terms of its center and
+ * radius.
+ *
+ * @param rCoord A constant reference to an object containing the latitude
+ * and longitude of the center of the proximity area (search center).
+ *
+ * @param rRadius A value specifying the radius of the search area in meters.
+ */
+ void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0);
+
+ /**
+ * This method detects whether coordinates/proximity (the center of search area
+ * set or not).
+ *
+ * @return <code>true</code> if the proximity was set,
+ * otherwise <code>false</code>
+ */
+ bool HasProximity() const;
+
+ /**
+ * This method sets the address to be used in the query.
+ *
+ * @param rAddress A constant reference to an object providing the details
+ * of an address to use in the query.
+ */
+ void SetAddress(const Address& rAddress);
+
+ /**
+ * This method sets the search text to be used in the query.
+ *
+ * @param sSearch A constant reference to a string containing the search
+ * text to use in the query.
+ */
+ void SetSearchtext(const String& sSearch);
+
+ /**
+ * This method sets the map view using the bounding box object provided by
+ * the caller. The map view is a soft filter, which means that the
+ * response includes relevant results from within the map view, but also
+ * possibly from a wider area, and even relevant global results are
+ * also returned.
+ *
+ * @param rMapView A constant reference to a bounding box object that
+ * defines the map view in terms of the geographic coordinates of
+ * the top-left and bottom-right corners.
+ */
+ void SetMapView(const GeoBoundingBox& rMapView);
+
+ /**
+ * This method sets the bounding box to be used in the query. The bounding
+ * box is a hard filter in that the response includes relevant results from
+ * within the area it defines.
+ *
+ * @param A constant reference to an instance of
+ * <code>GeoBoundingBox</code>, representing a geographic area within
+ * which to perform the search.
+ */
+ void SetBoundingBox(const GeoBoundingBox& rBoundingBox);
+
+ /**
+ * This method sets the location identifier to be used in the query.
+ *
+ * @param sID a constant reference to a string containing the location
+ * identifier.
+ */
+
+ void SetLocationId(const String& sId);
+
+ /**
+ * This method attempts to establish a connection
+ * with the server and then, if the connection has been established, it
+ * builds and submits a query.
+ *
+ * @param rListener A reference to an object that is to be notified when
+ * the reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user data to be passed back within the
+ * corresponding reply object.
+ *
+ * @return Identifier of issued request.
+ */
+ RestItemHandle::RequestId Execute(GeoCoderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * geo coder queries.
+ *
+ * @return A string containing the base URI.
+ */
+ String GetBaseUri() const;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * geo coder queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ void SetBaseUri(const String& sUri);
+
+private:
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderQuery);
+
+ class GeoCoderQueryImpl;
+ GeoCoderQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOCODERQUERY_H_ */
diff --git a/inc/engine/geocoder/GeoCoderQueryBase.h b/inc/engine/geocoder/GeoCoderQueryBase.h
new file mode 100755
index 0000000..29df37d
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderQueryBase.h
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERYBASE_H
+#define GEOCODERQUERYBASE_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ApplicationContext;
+
+/**
+ * This is the base class for implementations of geocoding query classes.
+ *
+ * The virtual method require implementation in derived classes.
+ *
+ * \ingroup geocoding
+ */
+class EXPORT_API GeoCoderQueryBase : public BaseQuery
+{
+public:
+ /**
+ * This enumeration defines identifiers for response attribute switches that
+ * indicate which attributes are to be included in query responses from the
+ * server.
+ */
+ enum ResponseAttribute
+ {
+ RA_PerformedSearch, ///< Indicates that completed searches are to be included in the response.
+ RA_Label, ///< Indicates that labels are to be included in the response.
+ RA_DidYouMeanSuggestion, ///< Indicates that did-you-mean suggestions are to be included in the response.
+ RA_MatchQuality, ///< Indicates that match quality is to be included in the response.
+ RA_MatchType, ///< Indicates that match type specifiers are to be included in the response.
+ RA_MatchCode, ///< Indicates that match codes are to be included in the response.
+ RA_ParsedRequest, ///< Indicates that parsed requests are to be included in the response.
+ RA_All, ///< Indicates that all attributes are to be included in the response.
+ RA_None ///< Indicates that no attributes are to be included in the response.
+ };
+
+ /**
+ * This method is the destructor.
+ *
+ * @return
+ */
+ ~GeoCoderQueryBase();
+
+ /**
+ * This method sets the properties defining a circular area within which a
+ * search is to be conducted. The area is defined in terms of its center and
+ * radius.
+ *
+ * @param rCoord A constant reference to an object containing the latitude
+ * and longitude of the center of the proximity area (search center).
+ *
+ * @param rRadius A value specifying the radius of the search area in meters.
+ */
+ virtual void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0) = 0;
+
+ /**
+ * This method detects whether coordinates/proximity (the center of search area
+ * set or not).
+ *
+ * @return <code>true</code> if the proximity was set,
+ * otherwise <code>false</code>
+ */
+ virtual bool HasProximity() const = 0;
+
+ /**
+ * This method adds a language code provided by the caller to the list of
+ * preferred languages.
+ *
+ * @param sPreferredLang A constant reference to a string containing a BCP
+ * 47 language code (see also http://tools.ietf.org/html/rfc5646).
+ * identifying the preferred language.
+ */
+ void AppendPreferredLanguage(const String& sPreferredLang);
+
+ /**
+ * This method retrieves a value indicating the number of preferred
+ * languages that have been set.
+ *
+ * @return A value indicating how many preferred languages have been set.
+ */
+ size_t GetNumPreferredLanguages() const;
+
+ /**
+ * This method retrieves the preferred language identifier at the index
+ * specified by the caller. The identifier is a BCP 47 language code (see
+ * also http://tools.ietf.org/html/rfc5646).
+ *
+ * @param idx A value representing an index into the array of preferred
+ * languages from which to retrieve the language identifier.
+ *
+ * @return A constant pointer to a string containing the language identifier
+ * or <code>NULL</code> if the supplied index is not valid.
+ */
+ const String* GetPreferredLanguage(size_t idx) const;
+
+ /**
+ * This method sets a value indicating the maximum number of query results
+ * to be returned.
+ *
+ * @param uMaxResults A value indicating the maximum number of query results
+ * to be returned.
+ */
+ void SetMaxResults(size_t uMaxResults);
+
+ /**
+ * This method sets a value indicating which page is to be returned in a
+ * paging scenario. Note that the value has no effect unless a value
+ * indicating the maximum number of results to retrieve has been specified
+ * (see SetMaxResults).
+ *
+ * @param uPage An unsigned integer indicating the page number.
+ */
+ void SetPageInformation(size_t uPage);
+
+ /**
+ * This method allows the caller to set a value that determines the
+ * functionality and data delivered by the underlying version of the RESTful
+ * service.
+ *
+ * @param iValue An integer value that determines the functionality of (and
+ * data delivered by) the underlying RESTful service:
+ * <ul>
+ * <li>0 - indicates the default behavior of the underlying RESTful
+ * service
+ * </li>
+ * <li>1 - indicates the default behavior of the underlying service and:
+ * <ul><li>reverse geocoding responses include area names if addresses
+ * cannot be determined</li>
+ * <li>addresses/locations can be matched at
+ * intersection level</li>
+ * </ul>
+ * </li>
+ * <li>2 - as 1 plus:
+ * <ul><li>reverse geocoding responses include the area
+ * display position (center)</li>
+ * <li>map version can be requested (and
+ * included in responses)</li>
+ * </ul>
+ * </li>
+ * </ul>
+ */
+ void SetGenParameter(int iValue);
+
+
+ /**
+ * This method adds a response attribute specified by the caller.
+ *
+ * @param aAttr A value identifying the response attribute to add.
+ */
+ void AddResponseAttribute(ResponseAttribute aAttr);
+
+ /**
+ * This method removes the response attribute specified by the caller.
+ *
+ * @param aAttr A value identifying the response attribute to remove.
+ */
+ void RemoveResponseAttribute(ResponseAttribute aAttr);
+
+ /**
+ * This method adds a key-value pair representing an additional parameter
+ * and its value.
+ *
+ * @param sKey A constant reference to a string containing the name/key of
+ * the additional parameter.
+ *
+ * @param sValue A constant reference to a string containing the value of the
+ * additional parameter.
+ */
+ void AddAdditionalParameter(const String& sKey, const String& sValue);
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * geo coder queries.
+ *
+ * @return A string containing the base URI.
+ */
+ virtual String GetBaseUri() const = 0;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * geo coder queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ virtual void SetBaseUri(const String& sUri) = 0;
+
+protected:
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoCoderQueryBase();
+
+ /**
+ * This method obtains the base URL for the service named by the caller.
+ *
+ * @param sService A constant reference to a string that identifies the
+ * service whose base URL is to be obtained.
+ *
+ * @param sDst A reference to an object which is to receive the result.
+ *
+ * @return <code>true</code> if the base URL has been created successfully,
+ * otherwise <code>false</code>
+ */
+ bool CreateBaseUrl(const String& sService, String& sDst) const;
+
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderQueryBase);
+
+ class GeoCoderQueryBaseImpl;
+ GeoCoderQueryBaseImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderQueryListener.h b/inc/engine/geocoder/GeoCoderQueryListener.h
new file mode 100755
index 0000000..bcdb996
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderQueryListener.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERYLISTENER_H
+#define GEOCODERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoderReply;
+
+/**
+ * This class encapsulates a listener facility that is informed when the results
+ * of a query become available.
+ *
+ * The class exposes a callback method that must be implemented by the derived
+ * classes to process the data received from the server.
+ *
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderQueryListener : public QueryListener
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoCoderQueryListener();
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoCoderQueryListener();
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * geocoding request.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnGeoCoderReply(const GeoCoderReply& rReply) = 0;
+
+ #ifdef TIZEN_MIGRATION
+ /**
+ * This method is a callback invoked when geocoding request is failed.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnGeoCoderFailure(const GeoCoderReply& rReply) = 0;
+ #endif
+
+private:
+
+ void OnReplySuccess(BaseReply& rReply);
+
+ #ifdef TIZEN_MIGRATION
+ void OnFailure(const BaseReply& rReply);
+ #endif
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderReply.h b/inc/engine/geocoder/GeoCoderReply.h
new file mode 100755
index 0000000..a821eb2
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderReply.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERREPLY_H_
+#define GEOCODERREPLY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class MetaInfo;
+
+
+/**
+ * This class encapsulates a reply to a geocoding query.
+ *
+ * The class receives the response data returned by the server in reply to a
+ * query asynchronously. Notification that the data is available comes via a
+ * listener object registered on the class by calling <code>AddListener()</code>.
+ *
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderReply : public BaseReply
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ GeoCoderReply();
+
+ /**
+ * This is a destructor.
+ */
+ virtual ~GeoCoderReply();
+
+ /**
+ * This method retrieves a value indicating the number of results in the
+ * reply to the query.
+ *
+ * @return An integer value indicating the number of results.
+ */
+ size_t GetNumResults() const;
+
+ /**
+ * This method retrieves a result at the index specified by the caller.
+ *
+ * @param A value indicating the index of the result to retrieve.
+ *
+ * @return A constant pointer to an instance of <code>Result</code>.
+ */
+ const Result* GetResult(size_t idx) const;
+
+ /**
+ * This method retrieves the reply meta information.
+ *
+ * @return A constant pointer to an instance of <code>MetaInfo</code>.
+ */
+ const MetaInfo* GetMetaInfo() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReply);
+ friend class TestGeoCoderParser;
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+ class GeoCoderReplyImpl;
+ GeoCoderReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOCODERREPLY_H_ */
diff --git a/inc/engine/geocoder/GeoCoderReplyParser.h b/inc/engine/geocoder/GeoCoderReplyParser.h
new file mode 100755
index 0000000..20fba2a
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderReplyParser.h
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERREPLYPARSER_H
+#define GEOCODERREPLYPARSER_H
+
+#include "common/HereMaps_global.h"
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class MetaInfo;
+class ErrorBase;
+class ParserError;
+class GeoLocation;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/**
+ * This class encapsulates a request reply parser. It provides methods dedicated
+ * to parsing specific nodes of the reply data and populating a destination
+ * object supplied by the caller.
+ *
+ * \ingroup geocoding
+ */
+class GeoCoderReplyParser
+{
+public:
+ /**
+ * This method retrieves reply meta info held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseMetaInfo(xmlNodePtr pNode, MetaInfo& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a result entry held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseResultEntry(xmlNodePtr pNode, Result& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves an address held in the XML node supplied
+ * by the caller
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseAddress(xmlNodePtr pNode, Address& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves geographic coordinates held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseCoordinate(xmlNodePtr pNode, GeoCoordinates& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves location information held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseLocation(xmlNodePtr pNode, GeoLocation& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves match quality information held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseMatchQualitites(xmlNodePtr pNode, Result& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseBoundingBox(xmlNodePtr pNode, GeoBoundingBox& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+private:
+ static bool ExtractContent(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+ static bool ExtractNodeName(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+ static xmlNodePtr FindChildNode(xmlNodePtr pNode, const char* pUTF8Literal);
+
+ static void AppendOrSet(ParserError*& pError, ParserError* pLoc);
+
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReplyParser);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderReplyParserError.h b/inc/engine/geocoder/GeoCoderReplyParserError.h
new file mode 100755
index 0000000..e2879ff
--- /dev/null
+++ b/inc/engine/geocoder/GeoCoderReplyParserError.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERERROR_H
+#define GEOCODERERROR_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information about an error that
+ * may arise when a parsing a geocoding request.
+ *
+ * \ingroup geocoding
+ */
+class GeoCoderReplyParserError : public ErrorBase
+{
+public:
+ /**
+ * This method is a constructor.
+ *
+ * @param sStr A constant reference to a string containing an error message.
+ */
+ GeoCoderReplyParserError(const std::string& sStr);
+
+ /**
+ * This method is a (virtual) destructor.
+ */
+ virtual ~GeoCoderReplyParserError();
+
+ /**
+ * This method retrieves a string representation of the given instance of
+ * the class.
+ *
+ * @return A string containing the error information held in the given
+ * instance of the class.
+ */
+ virtual String ToString() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReplyParserError);
+
+ class GeoCoderReplyParserErrorImpl;
+ GeoCoderReplyParserErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/MetaInfo.h b/inc/engine/geocoder/MetaInfo.h
new file mode 100755
index 0000000..bf10e66
--- /dev/null
+++ b/inc/engine/geocoder/MetaInfo.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef METAINFO_H
+#define METAINFO_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates meta information included in the search responses.
+ *
+ * \ingroup geocoding
+ */
+class MetaInfo
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ MetaInfo();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * copied to the newly created instance of the class.
+ */
+ MetaInfo(const MetaInfo& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~MetaInfo();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an instance of
+ * <code>MetaInfo</code> whose contents are to be copied into
+ * the given instance.
+ */
+ MetaInfo& operator=(const MetaInfo& rRhs);
+
+ /**
+ * This methos sets a key that can be used in subsequent requests to
+ * access the next n results.
+ *
+ * @param n A key that can be used in subsequent requests to
+ * access the next n results.
+ */
+ void SetNextPageInformation(size_t n);
+
+ /**
+ * This method retrieves a key that can be used in subsequent requests to
+ * access the next n results.
+ *
+ * @return A key that can be used in subsequent requests to
+ * access the next n results.
+ */
+ bool GetNextPageInformation(size_t& rDst) const;
+
+ /**
+ * This method sets a key that can be used in subsequent requests to
+ * access the previous n results.
+ *
+ * @param n A key that can be used in subsequent requests to
+ * access the previous n results.
+ */
+ void SetPreviousPageInformation(size_t n);
+
+ /**
+ * This method retrieves a key that can be used in subsequent requests to
+ * access the previous n results.
+ *
+ * @return A key that can be used in subsequent requests to
+ * access the previous n results.
+ */
+ bool GetPreviousPageInformation(size_t& rDst) const;
+
+ /**
+ * This method sets the timestamp indicating when the search was run.
+ *
+ * @param sTimestamp A constant reference to a string containing the
+ * timestamp indicating when the search was run.
+ */
+ void SetTimestamp(const String& sTimestamp);
+
+ /**
+ * This method retrieves the timestamp indicating when the search was run.
+ *
+ * @param rDst A reference to a string to which the
+ * timestamp indicating when the search was run is to be copied.
+ *
+ * @return <code>true</code> if the timestamp has been retrieved
+ * successfully, <code>false</code> if the time stamp cannot be
+ * retrieved.
+ */
+ bool GetTimestamp(String& rDst) const;
+
+private:
+ class MetaInfoImpl;
+ MetaInfoImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/Result.h b/inc/engine/geocoder/Result.h
new file mode 100755
index 0000000..eaa19a8
--- /dev/null
+++ b/inc/engine/geocoder/Result.h
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESULT_H
+#define RESULT_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoLocation;
+
+/**
+ * This class encapsulates a result item returned by the server in response to a
+ * geocoding or reverse geocoding request.
+ *
+ * \ingroup geocoding
+ */
+class EXPORT_API Result
+{
+public:
+ /**
+ * This enumeration defines identifiers for match levels -- they reflect how
+ * closely (to what level of detail) the result matches the request.
+ */
+ enum MatchLevel
+ {
+ ML_Unknown = -1, ///< Indicates that the match level is unknown.
+ ML_Country = 0, ///< Indicates country match.
+ ML_State, ///< Indicates state match.
+ ML_County, ///< Indicates county match.
+ ML_City, ///< Indicates city match.
+ ML_District, ///< Indicates district match.
+ ML_Street, ///< Indicates street match.
+ ML_Intersection, ///< Indicates intersection match.
+ ML_HouseNumber, ///< Indicates house-number match.
+ ML_PostalCode, ///< Indicates postal code match.
+ ML_Suite, ///< Indicates suite match.
+ ML_Floor ///< Indicates floor match.
+ };
+
+ /**
+ * This method is the default constructor.
+ */
+ Result();
+
+ /**
+ * This method is the destructor.
+ */
+ ~Result();
+
+ /**
+ * This method sets location details for the given result.
+ *
+ * @param rLocation A constant reference to an object containing the
+ * location details.
+ */
+ void SetLocation(const GeoLocation& rLocation);
+
+ /**
+ * This method retrieves the location details from the given result object.
+ *
+ * @param rLocation A constant reference to an object containing the
+ * location details.
+ */
+ const GeoLocation& GetLocation() const;
+
+ /**
+ * This method sets the relevance value on the given result.
+ *
+ * @param A float indicating the relevance of the given result in the range
+ * [0..1], where 1 indicates maximum relevance.
+ */
+ void SetRelevance(float fValue);
+
+ /**
+ * This method retrieves a value indicating the relevance of the given result.
+ *
+ * @param A float indicating the relevance of the given result; the value is
+ * in the range [0..1], where 1 indicates maximum relevance.
+ */
+ float GetRelevance() const;
+
+#ifdef TIZEN_CUSTOMIZATION
+ /**
+ * This method sets a value representing the distance for the given result.
+ *
+ * @param fValue A value indicating distance.
+ */
+ void SetDistance(float fValue);
+
+ /**
+ * This method retrieves a value representing the distance for the given
+ * result.
+ *
+ * @return A value indicating distance.
+ */
+ float GetDistance() const;
+#endif
+
+ /**
+ * This method sets a value representing the match level for the given
+ * result.
+ *
+ * @param aLevel A value indicating match level (see also
+ * <code>Result::MatchLevel</code>).
+ */
+ void SetMatchLevel(MatchLevel aLevel);
+
+ /**
+ * This method sets a value representing the match level for the given
+ * result.
+ *
+ * @param sLevel A constant reference to a string indicating the match level
+ * to set (see also <code>Result::MatchLevel</code>). The value of
+ * the string must be one of "country", "state", "county", "city",
+ * "street", "intersection", "housenumber", "postalcode", "suite",
+ * "floor", "district".
+ */
+ void SetMatchLevel(const String& sLevel);
+
+ /**
+ * This method retrieves a value representing the match level for the given
+ * result.
+ *
+ * @return A value indicating match level (see also
+ * <code>Result::MatchLevel</code>).
+ */
+ MatchLevel GetMatchLevel() const;
+
+ /**
+ * This method adds a match level indicator and sets the associated match
+ * quality value.
+ *
+ * @param aMatchLevel A value indicating the match level to set (see also
+ * <code>Result::MatchLevel</code>).
+ *
+ * @param fQuality A float value indicating the match quality.
+ */
+ void AddMatchQuality(MatchLevel aMatchLevel, float fQuality);
+
+ /**
+ * This method adds a match level indicator and sets the associated match
+ * qualityf value.
+ *
+ * @param sLevel A constant reference to a string indicating the match level
+ * to set (see also <code>Result::MatchLevel</code>). The value of
+ * the string must be one of "country", "state", "county", "city",
+ * "street", "intersection", "housenumber", "postalcode", "suite",
+ * "floor", "district".
+ *
+ * @param fQuality A float value indicating the match quality.
+ */
+ void AddMatchQuality(const String& sLevel, float fQuality);
+
+ /**
+ * This method retrieves a value representing match quality of the given
+ * result for the match level specified by the caller.
+ *
+ * @param aMatchLevel A value indicating the match level to set (see also
+ * <code>Result::MatchLevel</code>).
+ *
+ * @return A float value indicating the match quality.
+ */
+ float GetMatchQuality(MatchLevel aMatchLevel) const;
+
+ /**
+ * This method retrieves the number of match quality values available for
+ * the given result.
+ *
+ * @return A value indicating the number of match quality values.
+ */
+ unsigned int GetNumMatchQualities() const;
+
+ /**
+ * This method retrieves a value identifying the match level at the index
+ * specified by the caller.
+ *
+ * @param uIdx A value representing the index from which to retrieve the
+ * match level indicator (value). Note that the index must not be
+ * greater than the return value from
+ * <code>Result::GetNumMatchQualities()</code>.
+ *
+ * @return A value indicating the match level at the index specified by the
+ * caller (see also <code>Result::MatchLevel</code>).
+ */
+ MatchLevel GetMatchQualityLevel(unsigned int uIdx) const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(Result);
+
+ class ResultImpl;
+ ResultImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/ReverseGeoCoderQuery.h b/inc/engine/geocoder/ReverseGeoCoderQuery.h
new file mode 100755
index 0000000..1a633e8
--- /dev/null
+++ b/inc/engine/geocoder/ReverseGeoCoderQuery.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef REVERSEGEOCODERQUERY_H
+#define REVERSEGEOCODERQUERY_H
+
+#include "common/HereMaps_global.h"
+
+#include "geocoder/GeoCoderQueryBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoderReply;
+class GeoCoordinates;
+class GeoCoderQueryListener;
+
+/**
+ * This class represents a reverse geocoding query.
+ *
+ * Instances of the class are used to obtain an address (or a set of addresses)
+ * corresponding to a set of geographic coordinates.
+ *
+ * @ingroup geocoding
+ */
+class EXPORT_API ReverseGeoCoderQuery : public GeoCoderQueryBase
+{
+public:
+ /**
+ * This enumeration defines identifiers for reverse geocoding modes. A mode
+ * indicates whether addresses are to be returned or
+ * administrative area names (such as city, county, state, country).
+ */
+ enum ReverseMode
+ {
+ RM_RetrieveAreas, ///< Indicates that administrative area names are to be retrieved.
+ RM_RetrieveAddresses ///< Indicates that addresses are to be retrieved.
+ };
+
+ /**
+ * This method is the default constructor.
+ */
+ ReverseGeoCoderQuery();
+
+ /**
+ * This method is a constructor that initializes the query with the location
+ * to reverse-geocode and the mode.
+ *
+ * @param rCoordinate A constant reference to an object containing the geographic
+ * coordinates of the location to reverse-geocode.
+ *
+ * @param aMode A value indicating the reverse geocoding mode to use.
+ */
+ ReverseGeoCoderQuery(const GeoCoordinates& rCoordinate, ReverseMode aMode);
+
+ /**
+ * This method is a constructor that initializes the query with the location
+ * to reverse-geocode, the mode and the radius within which to conduct the
+ * search.
+ *
+ * @param rCoordinate A constant reference to an object containing the geographic
+ * coordinates of the location to reverse-geocode.
+ *
+ * @param aMode A value indicating the reverse geocoding mode to use.
+ *
+ * @param fRadius A float value indicating the radius (in meters) within
+ * which to search.
+ */
+ ReverseGeoCoderQuery(const GeoCoordinates& rCoordinate, ReverseMode aMode, float fRadius);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~ReverseGeoCoderQuery();
+
+ /**
+ * This method sets the properties defining a circular area within which a
+ * search is to be conducted. The area is defined in terms of its center and
+ * radius.
+ *
+ * @param rCoord A constant reference to an object containing the latitude
+ * and longitude of the center of the proximity area (search center).
+ *
+ * @param rRadius A value specifying the radius of the search area in meters.
+ */
+ void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0);
+
+ /**
+ * This method detects whether coordinates/proximity (the center of search area
+ * set or not).
+ *
+ * @return <code>true</code> if the proximity was set,
+ * otherwise <code>false</code>
+ */
+ bool HasProximity() const;
+
+ /**
+ * This method sets the reverse geocoding mode to apply to the query.
+ *
+ * @param aMode A value indicating the reverse geocoding mode to use.
+ */
+ void SetMode(ReverseMode aMode);
+
+ /**
+ * This method attempts to establish a connection
+ * with the server and then, if the connection has been established, it
+ * builds and submits a query.
+ *
+ * @param rListener A shared pointer to an object that is to be notified when
+ * the reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user data to be echoed in the reply object.
+ *
+ * @return A value representing the identifier of the issued request.
+ */
+ RestItemHandle::RequestId Execute(GeoCoderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * reverse geocoder queries.
+ *
+ * @return A string containing the base URI.
+ */
+ String GetBaseUri() const;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * reverse geocoder queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ void SetBaseUri(const String& sUri);
+
+private:
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(ReverseGeoCoderQuery);
+
+ class ReverseGeoCoderQueryImpl;
+ ReverseGeoCoderQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/graphic/Bitmap.h b/inc/engine/graphic/Bitmap.h
new file mode 100755
index 0000000..07b0162
--- /dev/null
+++ b/inc/engine/graphic/Bitmap.h
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_BITMAP_H
+#define HERE_GRAPHIC_BITMAP_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Dimension.h"
+#include "graphic/Rectangle.h"
+#include "graphic/BufferInfo.h"
+
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+enum BitmapPixelFormat
+{
+ BITMAP_PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+ BITMAP_PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+ BITMAP_PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format, the order of the color component is guaranteed by the byte unit */
+ BITMAP_PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+ BITMAP_PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+};
+
+class EXPORT_API Bitmap : public Object
+{
+public:
+ Bitmap(void);
+
+ virtual ~Bitmap(void);
+
+ result Construct(const Dimension& dim, BitmapPixelFormat bitmapPixelFormat=BITMAP_PIXEL_FORMAT_R8G8B8A8);
+ result Construct(const Bitmap& bitmap, const Rectangle& rect);
+ result Construct(const byte* pBuffer, int bufferSize, const Dimension& dim, BitmapPixelFormat bitmapPixelFormat=BITMAP_PIXEL_FORMAT_R8G8B8A8);
+ result Lock(BufferInfo& info, long timeout = INFINITE);
+ result Unlock(void);
+
+ int GetWidth(void) const;
+ int GetHeight(void) const;
+ void SetAlphaConstant(int opacity);
+ unsigned char* GetBuffer() const;
+ BitmapPixelFormat GetPixelColorFormat() const;
+private:
+ int width;
+ int height;
+ int bytes_per_pixel;
+ BitmapPixelFormat pixel_format;
+ unsigned char* buffer;
+
+ void BitBlt(int xDest, int yDest, unsigned char *pSrcBuffer, int xSour, int ySour, int wSour, int hSour, int nPitch, unsigned long opacity = 255);
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_BITMAP_H */
diff --git a/inc/engine/graphic/BufferInfo.h b/inc/engine/graphic/BufferInfo.h
new file mode 100755
index 0000000..6bad4a9
--- /dev/null
+++ b/inc/engine/graphic/BufferInfo.h
@@ -0,0 +1,291 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_BUFFERINFO_H
+#define HERE_GRAPHIC_BUFFERINFO_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Rectangle.h"
+
+#if 0
+typedef enum
+{
+ PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+ PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+ PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format @n
+ The order of color component is guaranteed by the byte unit. */
+ PIXEL_FORMAT_YCbCr420_PLANAR, /**< The 8-bit Y-plane followed by 8-bit 2x2 sub sampled U-plane and V-plane */
+ PIXEL_FORMAT_JPEG, /**< The encoded format */
+ PIXEL_FORMAT_NV12, /**< The NV12 pixel format */
+ PIXEL_FORMAT_UYVY, /**< The UYVY pixel format */
+ PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+ PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+} PixelFormat;
+#endif
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class BufferInfo;
+
+class _BufferInfoImpl
+{
+public:
+ enum
+ {
+ INVALID_BUFFER_HANDLE = 0
+ };
+
+ enum Orientation
+ {
+ ORIENTATION_PORTRAIT,
+ ORIENTATION_LANDSCAPE,
+ ORIENTATION_PORTRAIT_REVERSE,
+ ORIENTATION_LANDSCAPE_REVERSE
+ };
+
+ enum HandleType
+ {
+ HANDLE_TYPE_NONE,
+ HANDLE_TYPE_OVERLAY_REGION,
+ HANDLE_TYPE_VE_SURFACE,
+ HANDLE_TYPE_CANVAS_TEXTURE,
+ HANDLE_TYPE_NATIVE_PIXMAP
+ };
+
+ enum Rotation
+ {
+ ROTATION_0,
+ ROTATION_90,
+ ROTATION_180,
+ ROTATION_270
+ };
+
+ /**
+ * This is the default constructor for this class.
+ */
+ _BufferInfoImpl();
+
+ /**
+ * This is the destructor for this class.
+ */
+ virtual ~_BufferInfoImpl();
+
+ /*
+ * Gets the handle of the current instance of _BufferInfoImpl.
+ *
+ * @return The runtime handle
+ *
+ */
+ int GetHandle(HandleType handleType) const;
+
+ void* GetUserData(HandleType handleType) const;
+
+ /*
+ * Sets the handle of the current instance of _BufferInfoImpl.
+ *
+ */
+ void SetHandle(HandleType handleType, int handle, void* pUserData = null);
+
+ /*
+ * Gets the orientation of the current instance of _BufferInfoImpl.
+ *
+ */
+ Orientation GetOrientation(void) const;
+
+ /*
+ * Sets the orientation of the current instance of _BufferInfoImpl.
+ *
+ */
+ void SetOrientation(Orientation orientation);
+
+ /*
+ * Gets the bounds of the current instance of _BufferInfoImpl.
+ *
+ */
+ Rectangle GetBounds(void) const;
+
+ /*
+ * Sets the bounds of the current instance of _BufferInfoImpl.
+ *
+ */
+ void SetBounds(const Rectangle& rect);
+
+ /*
+ * Gets the rotation of the current instance of _BufferInfoImpl.
+ *
+ */
+ Rotation GetRotation(void) const;
+
+ /*
+ * Sets the rotation of the current instance of _BufferInfoImpl.
+ *
+ */
+ void SetRotation(Rotation rotation);
+
+ static _BufferInfoImpl* GetInstance(BufferInfo& bufferInfo);
+ static const _BufferInfoImpl* GetInstance(const BufferInfo& bufferInfo);
+
+private:
+ /**
+ * This is the default copy constructor for this class.
+ */
+ _BufferInfoImpl(const _BufferInfoImpl& src);
+
+ /**
+ * This is the default assignment operator for this class.
+ */
+ _BufferInfoImpl& operator =(const _BufferInfoImpl& rhs);
+
+ friend class BufferInfo;
+
+ HandleType __handleType;
+ int __handle;
+ void* __pUserData;
+ Orientation __orientation;
+ Rectangle __bounds;
+ Rotation __rotation;
+
+}; // _BufferInfoImpl
+
+class BufferInfo : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class.
+ *
+ * @since 2.0
+ */
+ BufferInfo(void);
+
+ /**
+ * This is the copy constructor for the %BufferInfo class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %BufferInfo
+ */
+ BufferInfo(const BufferInfo& rhs);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~BufferInfo(void);
+
+ /**
+ * This is the default assignment operator for this class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %BufferInfo
+ */
+ BufferInfo& operator =(const BufferInfo& rhs);
+
+ /**
+ * Checks whether the value of the specified instance equals the value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the current instance equals the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs The object to compare with the current instance
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return An integer value indicating the hash value of the current instance
+ */
+ virtual long GetHashCode(void) const;
+
+public:
+ /**
+ * The width of the buffer's logical dimensions in pixels.
+ *
+ * @since 2.0
+ */
+ int width;
+
+ /**
+ * The height of the buffer's logical dimensions in pixels.
+ *
+ * @since 2.0
+ */
+ int height;
+
+ /**
+ * The length of the buffer scan-line in bytes.
+ *
+ * @since 2.0
+ */
+ int pitch;
+
+ /**
+ * The bits per pixel of the buffer.
+ *
+ * @since 2.0
+ */
+ int bitsPerPixel;
+
+ /**
+ * The color format of the buffer.
+ *
+ * @since 2.0
+ */
+ enum PixelFormat
+ {
+ PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+ PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+ PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format @n
+ The order of color component is guaranteed by the byte unit. */
+ PIXEL_FORMAT_YCbCr420_PLANAR, /**< The 8-bit Y-plane followed by 8-bit 2x2 sub sampled U-plane and V-plane */
+ PIXEL_FORMAT_JPEG, /**< The encoded format */
+ PIXEL_FORMAT_NV12, /**< The NV12 pixel format */
+ PIXEL_FORMAT_UYVY, /**< The UYVY pixel format */
+ PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+ PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+ };
+
+ PixelFormat pixelFormat;
+
+ /**
+ * A pointer to the actual locked pixel bits.
+ *
+ * @since 2.0
+ */
+ void* pPixels;
+
+private:
+ friend class _BufferInfoImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _BufferInfoImpl * __pImpl;
+
+}; // BufferInfo
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_BUFFERINFO_H */
diff --git a/inc/engine/graphic/Canvas.h b/inc/engine/graphic/Canvas.h
new file mode 100755
index 0000000..7c14229
--- /dev/null
+++ b/inc/engine/graphic/Canvas.h
@@ -0,0 +1,57 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_CANVAS_H
+#define HERE_GRAPHIC_CANVAS_H
+
+#include <cairo/cairo.h>
+#include <vector>
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Color.h"
+#include "graphic/BufferInfo.h"
+#include "graphic/FloatPoint.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Canvas : public Object
+{
+public:
+ typedef std::vector<FloatPoint*> tPoint;
+ Canvas(void);
+ virtual ~Canvas(void);
+ result Construct(const BufferInfo& bufferInfo);
+ result FillPolygon(const Color& color, const tPoint& points);
+ result DrawPolyline(const tPoint& points);
+ result SetLineWidth(int width);
+ void SetForegroundColor(const Color& fgColor);
+protected:
+ void* _pNativeGfxEngine;
+private:
+ unsigned long __ComposeColor(unsigned long color32, int opacity);
+ void __SetColor(cairo_t* pCairo, unsigned long composedColor);
+
+ unsigned long* __pBuffer;
+ unsigned long __fgColor;
+ int __lineWidth;
+ cairo_operator_t __cairo_operator;
+ Color __fgColorNative;
+ int __fgOpacity;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_CANVAS_H */
diff --git a/inc/engine/graphic/Color.h b/inc/engine/graphic/Color.h
new file mode 100755
index 0000000..db68462
--- /dev/null
+++ b/inc/engine/graphic/Color.h
@@ -0,0 +1,483 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_COLOR_H
+#define HERE_GRAPHIC_COLOR_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API Color;
+
+/**
+ * @class Color32
+ * @brief This template code makes a 32-bit combination from each color component.
+ * @since 2.0
+ *
+ * The following example demonstrates how to use this template code.
+ *
+ * @code
+ *
+ * #include <FGraphics.h>
+ *
+ * using namespace Tizen::Graphics;
+ *
+ * // 0xFFFF00FF: Opaque magenta
+ * const unsigned int MY_COLOR1 = Color32<255, 0, 255>::Value;
+ *
+ * // 0x80FF0000: Red with 50% opacity
+ * const unsigned int MY_COLOR2 = Color32<255, 0, 0, 128>::Value;
+ *
+ * @endcode
+ */
+template <unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha = 0xFF>
+struct Color32
+{
+ enum
+ {
+ Value = static_cast<unsigned int>(alpha) << 24 |
+ static_cast<unsigned int>(red) << 16 |
+ static_cast<unsigned int>(green) << 8 |
+ static_cast<unsigned int>(blue)
+ };
+};
+
+/**
+ * @enum ColorId
+ *
+ * Defines the color ID.
+ *
+ * @since 2.0
+ */
+enum ColorId
+{
+ COLOR_ID_BLACK, /**< This attribute is pre-defined. Its value is black. */
+ COLOR_ID_BLUE, /**< This attribute is pre-defined. Its value is blue. */
+ COLOR_ID_CYAN, /**< This attribute is pre-defined. Its value is cyan. */
+ COLOR_ID_GREEN, /**< This attribute is pre-defined. Its value is green. */
+ COLOR_ID_GREY, /**< This attribute is pre-defined. Its value is grey. */
+ COLOR_ID_MAGENTA, /**< This attribute is pre-defined. Its value is magenta. */
+ COLOR_ID_RED, /**< This attribute is pre-defined. Its value is red. */
+ COLOR_ID_VIOLET, /**< This attribute is pre-defined. Its value is violet. */
+ COLOR_ID_YELLOW, /**< This attribute is pre-defined. Its value is yellow. */
+ COLOR_ID_WHITE /**< This attribute is pre-defined. Its value is white. */
+};
+
+/**
+ * @class Color
+ * @brief This class encapsulates a color.
+ *
+ * @since 2.0
+ *
+ * @final This class is not intended for extension.
+ *
+ * The %Color class provides an ARGB (Alpha, Red, Green, Blue) color model.
+ *
+ * For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/graphics/color.htm">Color</a>.
+ */
+class Color : public Object
+{
+
+public:
+ /**
+ * This is the default constructor for this class.
+ *
+ * @since 2.0
+ */
+ Color(void);
+
+ /**
+ * This is the copy constructor for the %Color class. @n
+ * This constructor initializes the instance of %Color with the attributes of the specified instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Color
+ */
+ Color(const Color& rhs);
+
+ /**
+ * Initializes the instance of %Color with the specified ARGB values.
+ *
+ * @since 2.0
+ *
+ * @param[in] r The red component
+ * @param[in] g The green component
+ * @param[in] b The blue component
+ * @param[in] a The alpha component
+ */
+ Color(byte r, byte g, byte b, byte a = 0xFF);
+
+ /**
+ * Initializes the instance of %Color with the specified RGB value.
+ *
+ * @since 2.0
+ *
+ * @param[in] rgb The RGB color value
+ * @param[in] hasAlpha Set to @c true if @c rgb contains an alpha value, @n
+ * else @c false
+ */
+ Color(unsigned int rgb, bool hasAlpha = true);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Color(void);
+
+
+public:
+ /**
+ * Checks whether the two instances of %Color are equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the two instances of %Color are equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %Color
+ */
+ bool operator ==(const Color& rhs) const;
+
+ /**
+ * Checks whether the two instances of %Color are not equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the two instances of %Color are not equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %Color
+ *
+ */
+ bool operator !=(const Color& rhs) const;
+
+ /**
+ * Assigns the values of the RGB components of the specified instance to the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return The reference to the instance of %Color
+ * @param[in] rhs An instance of %Color
+ */
+ Color& operator =(const Color& rhs);
+
+
+public:
+ /**
+ * Checks whether the current instance of %Color equals the specified instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the current instance is equal to the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %Color
+ * @remarks
+ * - This method overrides Tizen::Base::Object::Equals().
+ * - This method uses the values of the RGB components to compare the two instances.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. @n For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+
+public:
+ /**
+ * Gets the value of the alpha component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return A @c byte representation of the alpha component of the current instance of %Color
+ */
+ byte GetAlpha(void) const;
+
+ /**
+ * Gets the value of the red component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return A @c byte representation of the red component of the current instance of %Color
+ */
+ byte GetRed(void) const;
+
+ /**
+ * Gets the value of the blue component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return A @c byte representation of the blue component of the current instance of %Color
+ */
+ byte GetBlue(void) const;
+
+ /**
+ * Gets the value of the green component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return A @c byte representation of the green component of the current instance of %Color
+ */
+ byte GetGreen(void) const;
+
+ /**
+ * Gets the ARGB components of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[out] r The red component
+ * @param[out] g The green component
+ * @param[out] b The blue component
+ * @param[out] a The alpha component
+ */
+ void GetColorComponents(byte& r, byte& g, byte& b, byte& a) const;
+
+ /**
+ * Gets the 32-bit integer value of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @return An @c unsigned integer value representing the current instance of %Color
+ */
+ unsigned int GetRGB32(void) const;
+
+ /**
+ * Sets the value of the alpha component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] a The new value of the alpha component
+ */
+ void SetAlpha(byte a);
+
+ /**
+ * Sets the value of the red component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] r The new value of the red component
+ */
+ void SetRed(byte r);
+
+ /**
+ * Sets the value of the green component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] g The new value of the green component
+ */
+ void SetGreen(byte g);
+
+ /**
+ * Sets the value of the blue component of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] b The new value of the blue component
+ */
+ void SetBlue(byte b);
+
+ /**
+ * Sets the values of the ARGB components of the current instance of %Color.
+ *
+ * @since 2.0
+ *
+ * @param[in] r The red component
+ * @param[in] g The green component
+ * @param[in] b The blue component
+ * @param[in] a The alpha component
+ */
+ void SetColorComponents(byte r, byte g, byte b, byte a = 0xFF);
+
+ /**
+ * Sets the current instance of %Color to the specified 32-bit integer value.
+ *
+ * @since 2.0
+ *
+ * @param[in] rgb The new RGB color value
+ * @param[in] hasAlpha @c true if @c rgb contains alpha value, @n
+ else @c false
+ */
+ void SetRGB32(unsigned int rgb, bool hasAlpha = true);
+
+ /**
+ * Gets the %Color object for the specified color.
+ *
+ * @since 2.0
+ * @return The %Color object
+ * @param[in] colorId The enum value for the specified color
+ */
+ static Color GetColor(ColorId colorId);
+
+
+public:
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is black.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_BLACK).
+ * @endif
+ */
+ const static Color COLOR_BLACK;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is blue.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_BLUE).
+ * @endif
+ */
+ const static Color COLOR_BLUE;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is cyan.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_CYAN).
+ * @endif
+ */
+ const static Color COLOR_CYAN;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is green.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_GREEN).
+ * @endif
+ */
+ const static Color COLOR_GREEN;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is grey.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_GREY).
+ * @endif
+ */
+ const static Color COLOR_GREY;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is magenta.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_MAGENTA).
+ * @endif
+ */
+ const static Color COLOR_MAGENTA;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is red.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_RED).
+ * @endif
+ */
+ const static Color COLOR_RED;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is violet.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_VIOLET).
+ * @endif
+ */
+ const static Color COLOR_VIOLET;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is yellow.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_YELLOW).
+ * @endif
+ */
+ const static Color COLOR_YELLOW;
+
+ /**
+ * @if OSPDEPREC
+ * This attribute is pre-defined. Its value is white.
+ *
+ * @brief <i> [Deprecated] </i>
+ * @since 2.0
+ *
+ * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+ * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_WHITE).
+ * @endif
+ */
+ const static Color COLOR_WHITE;
+
+
+private:
+ unsigned int __color;
+
+ friend class _ColorImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _ColorImpl * __pImpl;
+
+}; // Color
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_COLOR_H */
diff --git a/inc/engine/graphic/Dimension.h b/inc/engine/graphic/Dimension.h
new file mode 100755
index 0000000..d4e535d
--- /dev/null
+++ b/inc/engine/graphic/Dimension.h
@@ -0,0 +1,159 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_DIMENSION_H
+#define HERE_GRAPHIC_DIMENSION_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Dimension;
+
+class EXPORT_API Dimension : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * This constructor initializes an instance of %Dimension with the width and the height set as @c 0.
+ *
+ * @since 2.0
+ */
+ Dimension(void);
+
+ /**
+ * This is the copy constructor for the %Dimension class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Dimension
+ */
+ Dimension(const Dimension& rhs);
+
+ /**
+ * Initializes an instance of %Dimension with the specified values of width and height.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The width to set
+ * @param[in] height The height to set
+ */
+ Dimension(int width, int height);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Dimension(void);
+
+ /**
+ * Assigns the value of the specified instance to the current instance of %Dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Dimension
+ */
+ Dimension& operator =(const Dimension& rhs);
+
+ /**
+ * Checks whether the two instances of %Dimension have equal width and height values.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the width and height of the two instances of %Dimension are equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %Dimension
+ */
+ bool operator ==(const Dimension& rhs) const;
+
+ /**
+ * Checks whether the two instances of %Dimension have different width and height values.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the width and the height of the two instances of %Dimension are not equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %Dimension
+ */
+ bool operator !=(const Dimension& rhs) const;
+
+ /**
+ * Checks whether the value of the current instance of %Dimension equals the value of the specified instance.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the current instance equals the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %Dimension
+ * @remarks The %Dimension class has a semantic value, which means that the
+ * Equals() method checks whether the two instances have the same width and height.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Sets the size of the current instance of %Dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetSize(int width, int height);
+
+public:
+ /**
+ * The width of the current instance of %Dimension.
+ *
+ * @since 2.0
+ */
+ int width;
+
+ /**
+ * The height of the current instance of %Dimension.
+ *
+ * @since 2.0
+ */
+ int height;
+
+private:
+ friend class _DimensionImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _DimensionImpl * __pImpl;
+
+}; // Dimension
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_DIMENSION_H */
diff --git a/inc/engine/graphic/DoubleMatrix4.h b/inc/engine/graphic/DoubleMatrix4.h
new file mode 100755
index 0000000..2377d9a
--- /dev/null
+++ b/inc/engine/graphic/DoubleMatrix4.h
@@ -0,0 +1,388 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_DOUBLEMATRIX4_H
+#define HERE_DOUBLEMATRIX4_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class DoubleMatrix4;
+
+class DoubleMatrix4 : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * Constructs a 4 X 4 null matrix in which all the elements are zero.
+ *
+ * @since 2.0
+ */
+ DoubleMatrix4(void);
+
+ /**
+ * Copying of objects using this copy constructor is allowed.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %DoubleMatrix4 to copy
+ */
+ DoubleMatrix4(const DoubleMatrix4& rhs);
+
+ /**
+ * Constructs a 4 by 4 matrix initialized to the value in the specified array.
+ *
+ * @since 2.0
+ *
+ * @param[in] matrix The matrix with 16 @c double values
+ */
+ DoubleMatrix4(const double matrix[4][4]);
+
+ /**
+ * This destructor overrides Object::~Object().
+ *
+ * @since 2.0
+ */
+ virtual ~DoubleMatrix4(void);
+
+ /**
+ * Checks whether the current instance and the specified instance of %DoubleMatrix4 are equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if all the matrix members of the current instance are equal to the corresponding matrix members in the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ bool operator ==(const DoubleMatrix4& rhs) const;
+
+ /**
+ * Checks whether the current instance and the specified instance of %DoubleMatrix4 are not equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if all the matrix members of the current instance are not equal to the corresponding matrix members in the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ bool operator !=(const DoubleMatrix4& rhs) const;
+
+ /**
+ * Copying of objects using this copy assignment operator is allowed.
+ *
+ * @since 2.0
+ *
+ * @return A reference to this instance
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4& operator =(const DoubleMatrix4& rhs);
+
+ /**
+ * Assigns the value of the specified instance to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to this instance
+ * @param[in] value The @c double value to assign
+ */
+ DoubleMatrix4& operator =(double value);
+
+ /**
+ * Multiplies the value of the specified instance with the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4 operator *(const DoubleMatrix4& rhs) const;
+
+ /**
+ * Multiplies the value to each matrix member of current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to multiply
+ */
+ DoubleMatrix4 operator *(double value) const;
+
+ /**
+ * Adds the value of the specified instance to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4 operator +(const DoubleMatrix4& rhs) const;
+
+ /**
+ * Adds the value to each matrix member of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to add
+ */
+ DoubleMatrix4 operator +(double value) const;
+
+ /**
+ * Subtracts the value of the specified instance from the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4 operator -(const DoubleMatrix4& rhs) const;
+
+ /**
+ * Subtracts the value from each matrix member of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to subtract
+ */
+ DoubleMatrix4 operator -(double value) const;
+
+ /**
+ * Multiplies the value of the specified instance and the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return The reference to %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4& operator *=(const DoubleMatrix4& rhs);
+
+ /**
+ * Multiplies the value to each matrix member of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to multiply
+ */
+ DoubleMatrix4& operator *=(double value);
+
+ /**
+ * Adds the value of the specified instance to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4& operator +=(const DoubleMatrix4& rhs);
+
+ /**
+ * Adds the value to each matrix member of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to add
+ */
+ DoubleMatrix4& operator +=(double value);
+
+ /**
+ * Subtracts the value of the specified instance from the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to %DoubleMatrix4 cthat contains the resulting value of the operation
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ DoubleMatrix4& operator -=(const DoubleMatrix4& rhs);
+
+ /**
+ * Subtracts the value from each matrix member of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A reference to %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to subtract
+ */
+ DoubleMatrix4& operator -=(double value);
+
+ /**
+ * Gets an instance of %DoubleMatrix4 resulting from the sum of the value and the specified instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to add
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ friend DoubleMatrix4 operator +(const double& value, const DoubleMatrix4& rhs);
+
+ /**
+ * Gets an instance of %DoubleMatrix4 resulting from the product of the value and the specified instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to multiply
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ friend DoubleMatrix4 operator *(const double& value, const DoubleMatrix4& rhs);
+
+ /**
+ * Gets an instance of %DoubleMatrix4 resulting from the difference between the value and the specified instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @param[in] value The @c double value to subtract
+ * @param[in] rhs An instance of %DoubleMatrix4
+ */
+ friend DoubleMatrix4 operator -(const double& value, const DoubleMatrix4& rhs);
+
+ /**
+ * Checks whether the current instance of %DoubleMatrix4 equals the specified instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the current instance is equal to the value of the specified instance, @n
+ * else @c false
+ * @param[in] obj An instance of %DoubleMatrix4
+ * @remarks
+ * - This method overrides Object::Equals().
+ * - This method uses the values of the Matrix components to compare the two instances.
+ */
+ virtual bool Equals(const Object& obj) const;
+
+ /**
+ * Gets the determinant of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return The determinant value of the current instance
+ */
+ double GetDeterminant(void) const;
+
+ /**
+ * Gets the inverse matrix of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ * @remarks This method must be called after checking whether the matrix is invertible or not.
+ */
+ DoubleMatrix4 GetInverse(void) const;
+
+ /**
+ * Gets the trace of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return The trace of the current instance
+ */
+ double GetTrace(void) const;
+
+ /**
+ * Gets the transpose matrix of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+ */
+ DoubleMatrix4 GetTranspose(void) const;
+
+ /**
+ * Checks whether the current instance is an identity matrix.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the matrix is an identity matrix, @n
+ * else @c false
+ */
+ bool IsIdentity(void) const;
+
+ /**
+ * Checks whether the current matrix is invertible.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the matrix is invertible, @n
+ * else @c false
+ */
+ bool IsInvertible(void) const;
+
+ /**
+ * Negates the matrix members of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ */
+ void Negate(void);
+
+ /**
+ * Sets the identity matrix to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ */
+ void SetAsIdentity(void);
+
+ /**
+ * Sets the inverse matrix to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @return An error code
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_OPERATION The current instance is not invertible.
+ */
+ result Invert(void);
+
+ /**
+ * Sets the transposed matrix to the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ */
+ void Transpose(void);
+
+ /**
+ * Sets the matrix members of the current instance of %DoubleMatrix4 to zero.
+ *
+ * @since 2.0
+ */
+ void SetAsNull(void);
+
+ int Compare(const double d1, const double d2) const;
+
+ /**
+ * The matrix of the current instance of %DoubleMatrix4.
+ *
+ * @since 2.0
+ *
+ * @remarks The column-major order matrix.
+ */
+ double matrix[4][4];
+
+private:
+ friend class _DoubleMatrix4Impl;
+ class _DoubleMatrix4Impl* __pImpl;
+
+}; // DoubleMatrix4
+
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_DOUBLEMATRIX4_H */
diff --git a/inc/engine/graphic/FloatDimension.h b/inc/engine/graphic/FloatDimension.h
new file mode 100755
index 0000000..3eff37a
--- /dev/null
+++ b/inc/engine/graphic/FloatDimension.h
@@ -0,0 +1,159 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATDIMENTION_H
+#define HERE_GRAPHIC_FLOATDIMENTION_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatDimension;
+
+class EXPORT_API FloatDimension : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * This constructor initializes an instance of %FloatDimension with the width and the height set as @c 0.f.
+ *
+ * @since 2.0
+ */
+ FloatDimension(void);
+
+ /**
+ * This is the copy constructor for the %FloatDimension class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatDimension
+ */
+ FloatDimension(const FloatDimension& rhs);
+
+ /**
+ * Initializes an instance of %FloatDimension with the specified values of width and height.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The width to set
+ * @param[in] height The height to set
+ */
+ FloatDimension(float width, float height);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~FloatDimension(void);
+
+ /**
+ * This is the default assignment operator for this class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatDimension
+ */
+ FloatDimension& operator=(const FloatDimension& rhs);
+
+ /**
+ * Checks whether the two instances of %FloatDimension have equal width and height values.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the width and height of the two instances of %FloatDimension are equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatDimension
+ */
+ bool operator==(const FloatDimension& rhs) const;
+
+ /**
+ * Checks whether the two instances of %FloatDimension have different width and height values.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the values of the width and height of the two instances of %FloatDimension are not equal, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatDimension
+ */
+ bool operator!=(const FloatDimension& rhs) const;
+
+ /**
+ * Checks whether the value of the current instance of %FloatDimension equals the value of the specified instance.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the current instance equals the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatDimension
+ * @remarks The %FloatDimension class has a semantic value, which means that the
+ * Equals() method checks whether the two instances have the same width and height.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Sets the size of the current instance of %FloatDimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetSize(float width, float height);
+
+public:
+ /**
+ * The width of the current instance of %FloatDimension.
+ *
+ * @since 2.0
+ */
+ float width;
+
+ /**
+ * The height of the current instance of %FloatDimension.
+ *
+ * @since 2.0
+ */
+ float height;
+
+private:
+ friend class _FloatDimensionImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _FloatDimensionImpl* __pImpl;
+
+}; // FloatDimension
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATDIMENTION_H */
diff --git a/inc/engine/graphic/FloatPoint.h b/inc/engine/graphic/FloatPoint.h
new file mode 100755
index 0000000..dae6d4d
--- /dev/null
+++ b/inc/engine/graphic/FloatPoint.h
@@ -0,0 +1,217 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATPOINT_H
+#define HERE_GRAPHIC_FLOATPOINT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatPoint;
+
+class EXPORT_API FloatPoint : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * This constructor initializes an instance of %FloatPoint with the values (0.f, 0.f).
+ *
+ * @since 2.0
+ */
+ FloatPoint(void);
+
+ /**
+ * This is the copy constructor for the %FloatPoint class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ FloatPoint(const FloatPoint& rhs);
+
+ /**
+ * Initializes an instance of %FloatPoint with the specified location.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The x-coordinate
+ * @param[in] y The y-coordinate
+ */
+ FloatPoint(float x, float y);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~FloatPoint(void);
+
+ /**
+ * This is the default assignment operator for this class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ FloatPoint& operator=(const FloatPoint& rhs);
+
+ /**
+ * Checks whether the current instance and the specified instance of %FloatPoint are equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the two instances of %FloatPoint are at the same location, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ bool operator==(const FloatPoint& rhs) const;
+
+ /**
+ * Checks whether the current instance and the specified instance of %FloatPoint are not equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the two instances of %FloatPoint are at different locations, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ bool operator!=(const FloatPoint& rhs) const;
+
+ /**
+ * Adds the value of the specified instance of %FloatPoint and the current instance.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %FloatPoint containing the resulting value of the operation
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ FloatPoint operator+(const FloatPoint& rhs) const;
+
+ /**
+ * Subtracts the value of the specified instance of %FloatPoint from the current instance.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %FloatPoint containing the resulting value of the operation
+ * @param[in] rhs An instance of %FloatPoint
+ */
+ FloatPoint operator-(const FloatPoint& rhs) const;
+
+ /**
+ * Adds the value of the specified instance of %FloatPoint to the current instance.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %FloatPoint
+ */
+ FloatPoint& operator+=(const FloatPoint& point);
+
+ /**
+ * Subtracts the value of the specified instance of %FloatPoint from the current instance.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %FloatPoint
+ */
+ FloatPoint& operator-=(const FloatPoint& point);
+
+ /**
+ * Checks whether the value of the specified instance of %FloatPoint equals the value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the specified instance equals the value of the current instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatPoint
+ * @remarks The %FloatPoint class has a semantic value, which means that the
+ * Equals() method checks whether the two instances have the same
+ * location.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. @n For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Sets the x and y coordinates for the current instance of %FloatPoint.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x-coordinate
+ * @param[in] y The new y-coordinate
+ */
+ void SetPosition(float x, float y);
+
+ /**
+ * Sets the current instance of %FloatPoint.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %FloatPoint
+ */
+ void SetPosition(const FloatPoint& point);
+
+ /**
+ * Translates this %FloatPoint to the indicated distance.
+ *
+ * @since 2.0
+ *
+ * @param[in] deltaX The distance to move this point along the x-axis
+ * @param[in] deltaY The distance to move this point along the y-axis
+ */
+ void Translate(float deltaX, float deltaY);
+
+public:
+ /**
+ * The x-coordinate of the point.
+ *
+ * @since 2.0
+ */
+ float x;
+
+ /**
+ * The y-coordinate of the point.
+ *
+ * @since 2.0
+ */
+ float y;
+
+private:
+ friend class _FloatPointImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _FloatPointImpl* __pImpl;
+
+}; // FloatPoint
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATPOINT_H */
diff --git a/inc/engine/graphic/FloatRectangle.h b/inc/engine/graphic/FloatRectangle.h
new file mode 100755
index 0000000..24e94c7
--- /dev/null
+++ b/inc/engine/graphic/FloatRectangle.h
@@ -0,0 +1,329 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATRECTANGLE_H
+#define HERE_GRAPHIC_FLOATRECTANGLE_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/FloatDimension.h"
+#include "graphic/FloatPoint.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatRectangle;
+
+class EXPORT_API FloatRectangle : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * It initializes an instance of %FloatRectangle with all its attributes set to @c 0.f.
+ *
+ * @since 2.0
+ *
+ * @remarks The attribute value is @c 0 when initialized.
+ */
+ FloatRectangle(void);
+
+ /**
+ * This is the copy constructor for the %FloatRectangle class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatRectangle
+ */
+ FloatRectangle(const FloatRectangle& rhs);
+
+ /**
+ * Initializes an instance of %FloatRectangle with the specified location and dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The x-coordinate of the top-left corner of the rectangle
+ * @param[in] y The y-coordinate of the top-left corner of the rectangle
+ * @param[in] width The width of the rectangle
+ * @param[in] height The height of the rectangle
+ *
+ */
+ FloatRectangle(float x, float y, float width, float height);
+
+ /**
+ * Initializes an instance of %FloatRectangle at the location specified by @c point and
+ * with dimension specified by @c dim.
+ *
+ * @since 2.0
+ *
+ * @param[in] point The location of the top-left corner of the rectangle
+ * @param[in] dim The width and height of the rectangle
+ */
+ FloatRectangle(const FloatPoint& point, const FloatDimension& dim);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~FloatRectangle(void);
+
+ /**
+ * This is the default assignment operator for this class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %FloatRectangle
+ */
+ FloatRectangle& operator=(const FloatRectangle& rhs);
+
+ /**
+ * Checks whether the location and dimension of the current instance of %FloatRectangle match those of the
+ * specified instance of %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location and dimension of the current instance match those of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatRectangle
+ */
+ bool operator==(const FloatRectangle& rhs) const;
+
+ /**
+ * Checks whether the location and dimension of the current instance of %FloatRectangle do not match those of the
+ * specified instance of %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location and dimension of the current instance do not match those of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatRectangle
+ */
+ bool operator!=(const FloatRectangle& rhs) const;
+
+ /**
+ * Checks whether the specified point lies inside the current instance of %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location represented by @c point lies inside the current instance of %FloatRectangle, @n
+ * else @c false
+ * @param[in] point An instance of FloatPoint
+ */
+ bool Contains(const FloatPoint& point) const;
+
+ /**
+ * Checks whether the value of the current instance of %FloatRectangle equals the value of the specified instance of
+ * %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the current instance of %FloatRectangle equals the value of the specified instance of %FloatRectangle, @n
+ * else @c false
+ * @param[in] rhs An instance of %FloatRectangle
+ * @remarks The %FloatRectangle class has a semantic value, which means that the Equals() method checks whether the
+ * two instances have the same location and size.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Gets the intersection of the current instance and the specified instance of %FloatRectangle. @n
+ * If the two instances of %FloatRectangle do not intersect, empty instance is returned.
+ *
+ * @since 2.0
+ *
+ * @param[in] rect An instance of %FloatRectangle
+ */
+ FloatRectangle GetIntersection(const FloatRectangle& rect) const;
+
+ /**
+ * Checks whether the current instance of %FloatRectangle intersects with the specified instance of %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the current instance of %FloatRectangle intersects with the specified instance of %FloatRectangle, @n
+ * else @c false
+ * @param[in] rect An instance of %FloatRectangle
+ *
+ */
+ bool IsIntersected(const FloatRectangle& rect) const;
+
+ /**
+ * Gets the union of the current instance and the specified instance of %FloatRectangle.
+ *
+ * @since 2.0
+ *
+ * @return An instance of %FloatRectangle containing the union of the two rectangles
+ * @param[in] rect An instance of %FloatRectangle
+ */
+ FloatRectangle GetUnion(const FloatRectangle& rect) const;
+
+ /**
+ * Gets the coordinates of the point at the bottom-right corner of the rectangle.
+ *
+ * @since 2.0
+ *
+ * @return The coordinates of the point at the bottom-right corner of the rectangle
+ */
+ FloatPoint GetBottomRight(void) const;
+
+ /**
+ * Gets the coordinates of the point at the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ *
+ * @return The coordinates of the point at the top-left corner of the rectangle
+ */
+ FloatPoint GetTopLeft(void) const;
+
+ /**
+ * Checks whether this %FloatRectangle is empty. @n
+ * A %FloatRectangle is empty if its width or its height is less than or equal to @c 0.
+ *
+ * @since 2.0
+ *
+ * @return @c true if this rectangle is empty, @n
+ * else @c false
+ */
+ bool IsEmpty(void) const;
+
+ /**
+ * Sets the size of this %FloatRectangle to match the specified FloatDimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] dim The new size for FloatDimension
+ */
+ void SetSize(const FloatDimension& dim);
+
+ /**
+ * Sets the size of this %FloatRectangle to match the specified dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetSize(float width, float height);
+
+ /**
+ * Sets the position of this %FloatRectangle to the specified point.
+ *
+ * @since 2.0
+ *
+ * @param[in] point The new position
+ */
+ void SetPosition(const FloatPoint& point);
+
+ /**
+ * Sets the location of the current instance of %FloatRectangle with the specified values of the
+ * x and y coordinates of the top-left corner point.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x-coordinate
+ * @param[in] y The new y-coordinate
+ */
+ void SetPosition(float x, float y);
+
+ /**
+ * Sets the location and the dimensions of the current instance of %FloatRectangle with the specified x and y
+ * coordinates of the top-left corner point and the specified dimensions.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x-coordinate
+ * @param[in] y The new y-coordinate
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetBounds(float x, float y, float width, float height);
+
+ /**
+ * Sets the location and the dimensions of the current instance of %FloatRectangle with the specified location and
+ * dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of FloatPoint
+ * @param[in] dim An instance of FloatDimension
+ */
+ void SetBounds(const FloatPoint& point, const FloatDimension& dim);
+
+ /**
+ * Translates this %FloatRectangle to the new point by the specified distance along the x-axis and y-axis.
+ *
+ * @since 2.0
+ *
+ * @param[in] deltaX The distance to move this %FloatRectangle along the x-axis
+ * @param[in] deltaY The distance to move this %FloatRectangle along the y-axis
+ */
+ void Translate(float deltaX, float deltaY);
+
+public:
+ /**
+ * The x-coordinate of the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ */
+ float x;
+
+ /**
+ * The y-coordinate of the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ */
+ float y;
+
+ /**
+ * The width of this rectangle.
+ *
+ * @since 2.0
+ */
+ float width;
+
+ /**
+ * The height of this rectangle.
+ *
+ * @since 2.0
+ */
+ float height;
+
+private:
+ friend class _FloatRectangleImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _FloatRectangleImpl* __pImpl;
+
+}; // FloatRectangle
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATRECTANGLE_H */
diff --git a/inc/engine/graphic/Grp_GL_macro.h b/inc/engine/graphic/Grp_GL_macro.h
new file mode 100755
index 0000000..ffe5dbd
--- /dev/null
+++ b/inc/engine/graphic/Grp_GL_macro.h
@@ -0,0 +1,266 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_GL_MACRO_H
+#define HERE_GRAPHIC_GL_MACRO_H
+
+#include <Evas_GL.h>
+
+extern Evas_GL_API *__evas_gl_glapi;
+
+#ifndef _EVAS_GL_GLES2_HELPERS_H
+#define glActiveTexture __evas_gl_glapi->glActiveTexture
+#define glAttachShader __evas_gl_glapi->glAttachShader
+#define glBindAttribLocation __evas_gl_glapi->glBindAttribLocation
+#define glBindBuffer __evas_gl_glapi->glBindBuffer
+#define glBindFramebuffer __evas_gl_glapi->glBindFramebuffer
+#define glBindRenderbuffer __evas_gl_glapi->glBindRenderbuffer
+#define glBindTexture __evas_gl_glapi->glBindTexture
+#define glBlendColor __evas_gl_glapi->glBlendColor
+#define glBlendEquation __evas_gl_glapi->glBlendEquation
+#define glBlendEquationSeparate __evas_gl_glapi->glBlendEquationSeparate
+#define glBlendFunc __evas_gl_glapi->glBlendFunc
+#define glBlendFuncSeparate __evas_gl_glapi->glBlendFuncSeparate
+#define glBufferData __evas_gl_glapi->glBufferData
+#define glBufferSubData __evas_gl_glapi->glBufferSubData
+#define glCheckFramebufferStatus __evas_gl_glapi->glCheckFramebufferStatus
+#define glClear __evas_gl_glapi->glClear
+#define glClearColor __evas_gl_glapi->glClearColor
+#define glClearDepthf __evas_gl_glapi->glClearDepthf
+#define glClearStencil __evas_gl_glapi->glClearStencil
+#define glColorMask __evas_gl_glapi->glColorMask
+#define glCompileShader __evas_gl_glapi->glCompileShader
+#define glCompressedTexImage2D __evas_gl_glapi->glCompressedTexImage2D
+#define glCompressedTexSubImage2D __evas_gl_glapi->glCompressedTexSubImage2D
+#define glCopyTexImage2D __evas_gl_glapi->glCopyTexImage2D
+#define glCopyTexSubImage2D __evas_gl_glapi->glCopyTexSubImage2D
+#define glCreateProgram __evas_gl_glapi->glCreateProgram
+#define glCreateShader __evas_gl_glapi->glCreateShader
+#define glCullFace __evas_gl_glapi->glCullFace
+#define glDeleteBuffers __evas_gl_glapi->glDeleteBuffers
+#define glDeleteFramebuffers __evas_gl_glapi->glDeleteFramebuffers
+#define glDeleteProgram __evas_gl_glapi->glDeleteProgram
+#define glDeleteRenderbuffers __evas_gl_glapi->glDeleteRenderbuffers
+#define glDeleteShader __evas_gl_glapi->glDeleteShader
+#define glDeleteTextures __evas_gl_glapi->glDeleteTextures
+#define glDepthFunc __evas_gl_glapi->glDepthFunc
+#define glDepthMask __evas_gl_glapi->glDepthMask
+#define glDepthRangef __evas_gl_glapi->glDepthRangef
+#define glDetachShader __evas_gl_glapi->glDetachShader
+#define glDisable __evas_gl_glapi->glDisable
+#define glDisableVertexAttribArray __evas_gl_glapi->glDisableVertexAttribArray
+#define glDrawArrays __evas_gl_glapi->glDrawArrays
+#define glDrawElements __evas_gl_glapi->glDrawElements
+#define glEnable __evas_gl_glapi->glEnable
+#define glEnableVertexAttribArray __evas_gl_glapi->glEnableVertexAttribArray
+#define glFinish __evas_gl_glapi->glFinish
+#define glFlush __evas_gl_glapi->glFlush
+#define glFramebufferRenderbuffer __evas_gl_glapi->glFramebufferRenderbuffer
+#define glFramebufferTexture2D __evas_gl_glapi->glFramebufferTexture2D
+#define glFrontFace __evas_gl_glapi->glFrontFace
+#define glGenBuffers __evas_gl_glapi->glGenBuffers
+#define glGenerateMipmap __evas_gl_glapi->glGenerateMipmap
+#define glGenFramebuffers __evas_gl_glapi->glGenFramebuffers
+#define glGenRenderbuffers __evas_gl_glapi->glGenRenderbuffers
+#define glGenTextures __evas_gl_glapi->glGenTextures
+#define glGetActiveAttrib __evas_gl_glapi->glGetActiveAttrib
+#define glGetActiveUniform __evas_gl_glapi->glGetActiveUniform
+#define glGetAttachedShaders __evas_gl_glapi->glGetAttachedShaders
+#define glGetAttribLocation __evas_gl_glapi->glGetAttribLocation
+#define glGetBooleanv __evas_gl_glapi->glGetBooleanv
+#define glGetBufferParameteriv __evas_gl_glapi->glGetBufferParameteriv
+#define glGetError __evas_gl_glapi->glGetError
+#define glGetFloatv __evas_gl_glapi->glGetFloatv
+#define glGetFramebufferAttachmentParameteriv __evas_gl_glapi->glGetFramebufferAttachmentParameteriv
+#define glGetIntegerv __evas_gl_glapi->glGetIntegerv
+#define glGetProgramiv __evas_gl_glapi->glGetProgramiv
+#define glGetProgramInfoLog __evas_gl_glapi->glGetProgramInfoLog
+#define glGetRenderbufferParameteriv __evas_gl_glapi->glGetRenderbufferParameteriv
+#define glGetShaderiv __evas_gl_glapi->glGetShaderiv
+#define glGetShaderInfoLog __evas_gl_glapi->glGetShaderInfoLog
+#define glGetShaderPrecisionFormat __evas_gl_glapi->glGetShaderPrecisionFormat
+#define glGetShaderSource __evas_gl_glapi->glGetShaderSource
+#define glGetString __evas_gl_glapi->glGetString
+#define glGetTexParameterfv __evas_gl_glapi->glGetTexParameterfv
+#define glGetTexParameteriv __evas_gl_glapi->glGetTexParameteriv
+#define glGetUniformfv __evas_gl_glapi->glGetUniformfv
+#define glGetUniformiv __evas_gl_glapi->glGetUniformiv
+#define glGetUniformLocation __evas_gl_glapi->glGetUniformLocation
+#define glGetVertexAttribfv __evas_gl_glapi->glGetVertexAttribfv
+#define glGetVertexAttribiv __evas_gl_glapi->glGetVertexAttribiv
+#define glGetVertexAttribPointerv __evas_gl_glapi->glGetVertexAttribPointerv
+#define glHint __evas_gl_glapi->glHint
+#define glIsBuffer __evas_gl_glapi->glIsBuffer
+#define glIsEnabled __evas_gl_glapi->glIsEnabled
+#define glIsFramebuffer __evas_gl_glapi->glIsFramebuffer
+#define glIsProgram __evas_gl_glapi->glIsProgram
+#define glIsRenderbuffer __evas_gl_glapi->glIsRenderbuffer
+#define glIsShader __evas_gl_glapi->glIsShader
+#define glIsTexture __evas_gl_glapi->glIsTexture
+#define glLineWidth __evas_gl_glapi->glLineWidth
+#define glLinkProgram __evas_gl_glapi->glLinkProgram
+#define glPixelStorei __evas_gl_glapi->glPixelStorei
+#define glPolygonOffset __evas_gl_glapi->glPolygonOffset
+#define glReadPixels __evas_gl_glapi->glReadPixels
+#define glReleaseShaderCompiler __evas_gl_glapi->glReleaseShaderCompiler
+#define glRenderbufferStorage __evas_gl_glapi->glRenderbufferStorage
+#define glSampleCoverage __evas_gl_glapi->glSampleCoverage
+#define glScissor __evas_gl_glapi->glScissor
+#define glShaderBinary __evas_gl_glapi->glShaderBinary
+#define glShaderSource __evas_gl_glapi->glShaderSource
+#define glStencilFunc __evas_gl_glapi->glStencilFunc
+#define glStencilFuncSeparate __evas_gl_glapi->glStencilFuncSeparate
+#define glStencilMask __evas_gl_glapi->glStencilMask
+#define glStencilMaskSeparate __evas_gl_glapi->glStencilMaskSeparate
+#define glStencilOp __evas_gl_glapi->glStencilOp
+#define glStencilOpSeparate __evas_gl_glapi->glStencilOpSeparate
+#define glTexImage2D __evas_gl_glapi->glTexImage2D
+#define glTexParameterf __evas_gl_glapi->glTexParameterf
+#define glTexParameterfv __evas_gl_glapi->glTexParameterfv
+#define glTexParameteri __evas_gl_glapi->glTexParameteri
+#define glTexParameteriv __evas_gl_glapi->glTexParameteriv
+#define glTexSubImage2D __evas_gl_glapi->glTexSubImage2D
+#define glUniform1f __evas_gl_glapi->glUniform1f
+#define glUniform1fv __evas_gl_glapi->glUniform1fv
+#define glUniform1i __evas_gl_glapi->glUniform1i
+#define glUniform1iv __evas_gl_glapi->glUniform1iv
+#define glUniform2f __evas_gl_glapi->glUniform2f
+#define glUniform2fv __evas_gl_glapi->glUniform2fv
+#define glUniform2i __evas_gl_glapi->glUniform2i
+#define glUniform2iv __evas_gl_glapi->glUniform2iv
+#define glUniform3f __evas_gl_glapi->glUniform3f
+#define glUniform3fv __evas_gl_glapi->glUniform3fv
+#define glUniform3i __evas_gl_glapi->glUniform3i
+#define glUniform3iv __evas_gl_glapi->glUniform3iv
+#define glUniform4f __evas_gl_glapi->glUniform4f
+#define glUniform4fv __evas_gl_glapi->glUniform4fv
+#define glUniform4i __evas_gl_glapi->glUniform4i
+#define glUniform4iv __evas_gl_glapi->glUniform4iv
+#define glUniformMatrix2fv __evas_gl_glapi->glUniformMatrix2fv
+#define glUniformMatrix3fv __evas_gl_glapi->glUniformMatrix3fv
+#define glUniformMatrix4fv __evas_gl_glapi->glUniformMatrix4fv
+#define glUseProgram __evas_gl_glapi->glUseProgram
+#define glValidateProgram __evas_gl_glapi->glValidateProgram
+#define glVertexAttrib1f __evas_gl_glapi->glVertexAttrib1f
+#define glVertexAttrib1fv __evas_gl_glapi->glVertexAttrib1fv
+#define glVertexAttrib2f __evas_gl_glapi->glVertexAttrib2f
+#define glVertexAttrib2fv __evas_gl_glapi->glVertexAttrib2fv
+#define glVertexAttrib3f __evas_gl_glapi->glVertexAttrib3f
+#define glVertexAttrib3fv __evas_gl_glapi->glVertexAttrib3fv
+#define glVertexAttrib4f __evas_gl_glapi->glVertexAttrib4f
+#define glVertexAttrib4fv __evas_gl_glapi->glVertexAttrib4fv
+#define glVertexAttribPointer __evas_gl_glapi->glVertexAttribPointer
+#define glViewport __evas_gl_glapi->glViewport
+
+// GLES 2.0 extensions
+#define glGetProgramBinaryOES __evas_gl_glapi->glGetProgramBinaryOES
+#define glProgramBinaryOES __evas_gl_glapi->glProgramBinaryOES
+#define glMapBufferOES __evas_gl_glapi->glMapBufferOES
+#define glUnmapBufferOES __evas_gl_glapi->glUnmapBufferOES
+#define glGetBufferPointervOES __evas_gl_glapi->glGetBufferPointervOES
+#define glTexImage3DOES __evas_gl_glapi->glTexImage3DOES
+#define glTexSubImage3DOES __evas_gl_glapi->glTexSubImage3DOES
+#define glCopyTexSubImage3DOES __evas_gl_glapi->glCopyTexSubImage3DOES
+#define glCompressedTexImage3DOES __evas_gl_glapi->glCompressedTexImage3DOES
+#define glCompressedTexSubImage3DOES __evas_gl_glapi->glCompressedTexSubImage3DOES
+#define glFramebufferTexture3DOES __evas_gl_glapi->glFramebufferTexture3DOES
+#define glBindVertexArrayOES __evas_gl_glapi->glBindVertexArrayOES
+#define glDeleteVertexArraysOES __evas_gl_glapi->glDeleteVertexArraysOES
+#define glGenVertexArraysOES __evas_gl_glapi->glGenVertexArraysOES
+#define glIsVertexArrayOES __evas_gl_glapi->glIsVertexArrayOES
+#define glGetPerfMonitorGroupsAMD __evas_gl_glapi->glGetPerfMonitorGroupsAMD
+#define glGetPerfMonitorCountersAMD __evas_gl_glapi->glGetPerfMonitorCountersAMD
+#define glGetPerfMonitorGroupStringAMD __evas_gl_glapi->glGetPerfMonitorGroupStringAMD
+#define glGetPerfMonitorCounterStringAMD __evas_gl_glapi->glGetPerfMonitorCounterStringAMD
+#define glGetPerfMonitorCounterInfoAMD __evas_gl_glapi->glGetPerfMonitorCounterInfoAMD
+#define glGenPerfMonitorsAMD __evas_gl_glapi->glGenPerfMonitorsAMD
+#define glDeletePerfMonitorsAMD __evas_gl_glapi->glDeletePerfMonitorsAMD
+#define glSelectPerfMonitorCountersAMD __evas_gl_glapi->glSelectPerfMonitorCountersAMD
+#define glBeginPerfMonitorAMD __evas_gl_glapi->glBeginPerfMonitorAMD
+#define glEndPerfMonitorAMD __evas_gl_glapi->glEndPerfMonitorAMD
+#define glGetPerfMonitorCounterDataAMD __evas_gl_glapi->glGetPerfMonitorCounterDataAMD
+#define glCopyTextureLevelsAPPLE __evas_gl_glapi->glCopyTextureLevelsAPPLE
+#define glRenderbufferStorageMultisampleAPPLE __evas_gl_glapi->glRenderbufferStorageMultisampleAPPLE
+#define glResolveMultisampleFramebufferAPPLE __evas_gl_glapi->glResolveMultisampleFramebufferAPPLE
+#define glFenceSyncAPPLE __evas_gl_glapi->glFenceSyncAPPLE
+#define glIsSyncAPPLE __evas_gl_glapi->glIsSyncAPPLE
+#define glDeleteSyncAPPLE __evas_gl_glapi->glDeleteSyncAPPLE
+#define glClientWaitSyncAPPLE __evas_gl_glapi->glClientWaitSyncAPPLE
+#define glWaitSyncAPPLE __evas_gl_glapi->glWaitSyncAPPLE
+#define glGetInteger64vAPPLE __evas_gl_glapi->glGetInteger64vAPPLE
+#define glGetSyncivAPPLE __evas_gl_glapi->glGetSyncivAPPLE
+#define glDiscardFramebufferEXT __evas_gl_glapi->glDiscardFramebufferEXT
+#define glMapBufferRangeEXT __evas_gl_glapi->glMapBufferRangeEXT
+#define glFlushMappedBufferRangeEXT __evas_gl_glapi->glFlushMappedBufferRangeEXT
+#define glMultiDrawArraysEXT __evas_gl_glapi->glMultiDrawArraysEXT
+#define glMultiDrawElementsEXT __evas_gl_glapi->glMultiDrawElementsEXT
+#define glRenderbufferStorageMultisampleEXT __evas_gl_glapi->glRenderbufferStorageMultisampleEXT
+#define glFramebufferTexture2DMultisampleEXT __evas_gl_glapi->glFramebufferTexture2DMultisampleEXT
+#define glGetGraphicsResetStatusEXT __evas_gl_glapi->glGetGraphicsResetStatusEXT
+#define glReadnPixelsEXT __evas_gl_glapi->glReadnPixelsEXT
+#define glGetnUniformfvEXT __evas_gl_glapi->glGetnUniformfvEXT
+#define glGetnUniformivEXT __evas_gl_glapi->glGetnUniformivEXT
+#define glTexStorage1DEXT __evas_gl_glapi->glTexStorage1DEXT
+#define glTexStorage2DEXT __evas_gl_glapi->glTexStorage2DEXT
+#define glTexStorage3DEXT __evas_gl_glapi->glTexStorage3DEXT
+#define glTextureStorage1DEXT __evas_gl_glapi->glTextureStorage1DEXT
+#define glTextureStorage2DEXT __evas_gl_glapi->glTextureStorage2DEXT
+#define glTextureStorage3DEXT __evas_gl_glapi->glTextureStorage3DEXT
+#define glRenderbufferStorageMultisampleIMG __evas_gl_glapi->glRenderbufferStorageMultisampleIMG
+#define glFramebufferTexture2DMultisampleIMG __evas_gl_glapi->glFramebufferTexture2DMultisampleIMG
+#define glDeleteFencesNV __evas_gl_glapi->glDeleteFencesNV
+#define glGenFencesNV __evas_gl_glapi->glGenFencesNV
+#define glIsFenceNV __evas_gl_glapi->glIsFenceNV
+#define glTestFenceNV __evas_gl_glapi->glTestFenceNV
+#define glGetFenceivNV __evas_gl_glapi->glGetFenceivNV
+#define glFinishFenceNV __evas_gl_glapi->glFinishFenceNV
+#define glSetFenceNV __evas_gl_glapi->glSetFenceNV
+#define glGetDriverControlsQCOM __evas_gl_glapi->glGetDriverControlsQCOM
+#define glGetDriverControlStringQCOM __evas_gl_glapi->glGetDriverControlStringQCOM
+#define glEnableDriverControlQCOM __evas_gl_glapi->glEnableDriverControlQCOM
+#define glDisableDriverControlQCOM __evas_gl_glapi->glDisableDriverControlQCOM
+#define glExtGetTexturesQCOM __evas_gl_glapi->glExtGetTexturesQCOM
+#define glExtGetBuffersQCOM __evas_gl_glapi->glExtGetBuffersQCOM
+#define glExtGetRenderbuffersQCOM __evas_gl_glapi->glExtGetRenderbuffersQCOM
+#define glExtGetFramebuffersQCOM __evas_gl_glapi->glExtGetFramebuffersQCOM
+#define glExtGetTexLevelParameterivQCOM __evas_gl_glapi->glExtGetTexLevelParameterivQCOM
+#define glExtTexObjectStateOverrideiQCOM __evas_gl_glapi->glExtTexObjectStateOverrideiQCOM
+#define glExtGetTexSubImageQCOM __evas_gl_glapi->glExtGetTexSubImageQCOM
+#define glExtGetBufferPointervQCOM __evas_gl_glapi->glExtGetBufferPointervQCOM
+#define glExtGetShadersQCOM __evas_gl_glapi->glExtGetShadersQCOM
+#define glExtGetProgramsQCOM __evas_gl_glapi->glExtGetProgramsQCOM
+#define glExtIsProgramBinaryQCOM __evas_gl_glapi->glExtIsProgramBinaryQCOM
+#define glExtGetProgramBinarySourceQCOM __evas_gl_glapi->glExtGetProgramBinarySourceQCOM
+#define glStartTilingQCOM __evas_gl_glapi->glStartTilingQCOM
+#define glEndTilingQCOM __evas_gl_glapi->glEndTilingQCOM
+
+// glEvasGL functions
+#define glEvasGLImageTargetTexture2DOES __evas_gl_glapi->glEvasGLImageTargetTexture2DOES
+#define glEvasGLImageTargetRenderbufferStorageOES __evas_gl_glapi->glEvasGLImageTargetRenderbufferStorageOES
+
+// Evas GL glue layer
+#define evasglCreateImage __evas_gl_glapi->evasglCreateImage
+#define evasglCreateImageForContext __evas_gl_glapi->evasglCreateImageForContext
+#define evasglDestroyImage __evas_gl_glapi->evasglDestroyImage
+#define evasglCreateSync __evas_gl_glapi->evasglCreateSync
+#define evasglDestroySync __evas_gl_glapi->evasglDestroySync
+#define evasglClientWaitSync __evas_gl_glapi->evasglClientWaitSync
+#define evasglSignalSync __evas_gl_glapi->evasglSignalSync
+#define evasglGetSyncAttrib __evas_gl_glapi->evasglGetSyncAttrib
+#define evasglWaitSync __evas_gl_glapi->evasglWaitSync
+#endif
+
+#endif /* HERE_GRAPHIC_GL_MACRO_H */
diff --git a/inc/engine/graphic/Grp_Util.h b/inc/engine/graphic/Grp_Util.h
new file mode 100755
index 0000000..b5e2e39
--- /dev/null
+++ b/inc/engine/graphic/Grp_Util.h
@@ -0,0 +1,69 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_UTIL_H
+#define HERE_GRAPHIC_UTIL_H
+
+#include "common/HereMaps_global.h"
+#include "graphic/Grp_UtilType.h"
+#include "graphic/Bitmap.h"
+#include "graphic/PngDecoder.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+namespace _Util
+ {
+ bool IntersectRect(Rectangle<int>& outRect,
+ const Rectangle<int>& srcRect1,
+ const Rectangle<int>& srcRect2);
+
+ bool IntersectRect(Rectangle<float>& outRect,
+ const Rectangle<float>& srcRect1,
+ const Rectangle<float>& srcRect2);
+
+ long GetHashCode(const char *string);
+
+ EXPORT_API Bitmap* DecodePngToBmp(const byte* buffer, size_t size,
+ MediaPixelFormat pixelFormat=MEDIA_PIXEL_FORMAT_RGBA8888);
+
+ EXPORT_API void ConvertRGBA2BGRA(void *data, unsigned int w, unsigned int h,
+ MediaPixelFormat format=MEDIA_PIXEL_FORMAT_RGBA8888);
+
+ template<typename T>
+ inline T
+ Abs(const T& t)
+ {
+ return (t >= 0) ? t : -t;
+ }
+
+ template<typename T>
+ inline T
+ Min(T a, T b)
+ {
+ return (a < b) ? a : b;
+ }
+
+ template<typename T>
+ inline T
+ Max(T a, T b)
+ {
+ return (a > b) ? a : b;
+ }
+} // _Util
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_UTIL_H */
diff --git a/inc/engine/graphic/Grp_UtilType.h b/inc/engine/graphic/Grp_UtilType.h
new file mode 100755
index 0000000..889f371
--- /dev/null
+++ b/inc/engine/graphic/Grp_UtilType.h
@@ -0,0 +1,314 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_UTILTYPE_H
+#define HERE_GRAPHIC_UTILTYPE_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+namespace _Util
+{
+
+template <unsigned int preFixed, unsigned int postFixed>
+struct FixedPoint
+{
+ FixedPoint(void)
+ : __fixedPoint(0)
+ {
+ }
+
+ FixedPoint(const FixedPoint& rhs)
+ : __fixedPoint(rhs.__fixedPoint)
+ {
+ }
+
+ explicit FixedPoint(int value)
+ : __fixedPoint(value << SHIFT)
+ {
+ }
+
+ explicit FixedPoint(long value)
+ : __fixedPoint(value << SHIFT)
+ {
+ }
+
+ explicit FixedPoint(float value)
+ : __fixedPoint(value * ((1 << SHIFT) * 1.0f))
+ {
+ }
+
+ explicit FixedPoint(double value)
+ : __fixedPoint(value * ((1 << SHIFT) * 1.0))
+ {
+ }
+
+ inline int
+ ToInt() const
+ {
+ return (__fixedPoint >> SHIFT);
+ }
+
+ inline float
+ ToFloat() const
+ {
+ return (__fixedPoint / ((1 << SHIFT) * 1.0f));
+ }
+
+ inline double
+ ToDouble() const
+ {
+ return (__fixedPoint / ((1 << SHIFT) * 1.0));
+ }
+
+ inline void
+ Reset(int fixedPointValue)
+ {
+ __fixedPoint = fixedPointValue;
+ }
+
+ inline operator const int(void)
+ {
+ return __fixedPoint;
+ }
+
+// operator +
+ inline FixedPoint
+ operator +(const FixedPoint& rhs) const
+ {
+ FixedPoint<preFixed, SHIFT> tempFixed(0);
+
+ tempFixed.__fixedPoint = __fixedPoint + rhs.__fixedPoint;
+
+ return tempFixed;
+ }
+
+// operator -
+ inline FixedPoint
+ operator -(const FixedPoint& rhs) const
+ {
+ FixedPoint<preFixed, SHIFT> tempFixed(0);
+
+ tempFixed.__fixedPoint = __fixedPoint - rhs.__fixedPoint;
+
+ return tempFixed;
+ }
+
+// operator ==
+ template <typename T>
+ inline bool
+ operator ==(const T& rhs) const
+ {
+ return (ToFloat() == rhs);
+ }
+
+ inline bool
+ operator ==(const FixedPoint& rhs) const
+ {
+ return (ToFloat() == rhs.ToFloat);
+ }
+
+// operator !=
+ template <typename T>
+ inline bool
+ operator !=(const T& rhs) const
+ {
+ return (ToFloat() != rhs);
+ }
+
+ inline bool
+ operator !=(const FixedPoint& rhs) const
+ {
+ return (ToFloat() != rhs.ToFloat());
+ }
+
+// operator <=
+ template <typename T>
+ inline bool
+ operator <=(const T& rhs) const
+ {
+ return (ToFloat() <= rhs);
+ }
+
+ inline bool
+ operator <=(const FixedPoint& rhs) const
+ {
+ return (ToFloat() <= rhs.ToFloat());
+ }
+
+// operator >=
+ template <typename T>
+ inline bool
+ operator >=(const T& rhs) const
+ {
+ return (ToFloat() >= rhs);
+ }
+
+ inline bool
+ operator >=(const FixedPoint& rhs) const
+ {
+ return (ToFloat() >= rhs.ToFloat());
+ }
+
+// operator >
+ template <typename T>
+ inline bool
+ operator >(const T& rhs) const
+ {
+ return (ToFloat() > rhs);
+ }
+
+ inline bool
+ operator >(const FixedPoint& rhs) const
+ {
+ return (ToFloat() > rhs.ToFloat());
+ }
+
+// operator <
+ template <typename T>
+ inline bool
+ operator <(const T& rhs) const
+ {
+ return (ToFloat() < rhs);
+ }
+
+ inline bool
+ operator <(const FixedPoint& rhs) const
+ {
+ return (ToFloat() < rhs.ToFloat());
+ }
+
+ int __fixedPoint;
+ enum { SHIFT = postFixed };
+};
+
+typedef FixedPoint<26, 6> FixedPoint26_6;
+typedef FixedPoint<22, 10> FixedPoint22_10;
+
+
+template <typename T>
+struct Point
+{
+ T x;
+ T y;
+};
+
+template <typename T>
+struct Dimension
+{
+ T w;
+ T h;
+};
+
+template <typename T>
+struct Rectangle
+{
+ T x;
+ T y;
+ T w;
+ T h;
+};
+
+template <typename T>
+inline bool
+operator ==(const Rectangle<T>& lhs, const Rectangle<T>& rhs)
+{
+ return (lhs.x == rhs.x) && (lhs.y == rhs.y) && (lhs.w == rhs.w) && (lhs.h == rhs.h);
+}
+
+template <typename T>
+inline bool
+operator !=(const Rectangle<T>& lhs, const Rectangle<T>& rhs)
+{
+ return !(operator ==(lhs, rhs));
+}
+
+template <typename T>
+struct Bounds
+{
+ T x1;
+ T y1;
+ T x2;
+ T y2;
+
+ bool IsInside(T x, T y)
+ {
+ return ((x >= x1) && (x < x2) && (y >= y1) && (y < y2));
+ }
+
+ bool IsInsideX(T x)
+ {
+ return ((x >= x1) && (x < x2));
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// String
+
+struct String
+{
+ const wchar_t* pStart;
+ int length;
+
+ String(void)
+ : pStart(L"")
+ , length(0)
+ {
+ }
+
+ String(const wchar_t* pInputString, int inputStringLength)
+ : pStart(pInputString)
+ , length(inputStringLength)
+ {
+ }
+
+ String(const wchar_t* pInputString, int inputStringLength, int offset, int clippedLength)
+ {
+ const wchar_t* pInputStart = pInputString;
+ const wchar_t* pInputEnd = pInputStart + inputStringLength;
+
+ const wchar_t* pRevisedStart = pInputString + offset;
+ const wchar_t* pRevisedEnd = pRevisedStart + clippedLength;
+
+ const wchar_t* pClippedStart = (pInputStart > pRevisedStart) ? pInputStart : pRevisedStart;
+ const wchar_t* pClippedEnd = (pInputEnd < pRevisedEnd) ? pInputEnd : pRevisedEnd;
+
+ if (pClippedEnd - pClippedStart > 0)
+ {
+ this->pStart = pClippedStart;
+ this->length = pClippedEnd - pClippedStart;
+ }
+ else
+ {
+ this->pStart = (pClippedStart == pInputString) ? pClippedStart : L"";
+ this->length = 0;
+ }
+ }
+
+ operator const wchar_t*(void)
+ {
+ return pStart;
+ }
+};
+
+typedef std::wstring WString;
+
+} // _Util
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_UTILTYPE_H */
diff --git a/inc/engine/graphic/PngDecoder.h b/inc/engine/graphic/PngDecoder.h
new file mode 100755
index 0000000..059005c
--- /dev/null
+++ b/inc/engine/graphic/PngDecoder.h
@@ -0,0 +1,133 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef _PNG_DECODER_H_
+#define _PNG_DECODER_H_
+
+#include <png.h>
+#include "common/HereMaps_global.h"
+
+
+enum MediaPixelFormat
+{
+ MEDIA_PIXEL_FORMAT_NONE = 0x0000, /**< The undefined pixel format */
+ MEDIA_PIXEL_FORMAT_RGB565LE = 0x0001, /**< The RGB565 little-endian format */
+ MEDIA_PIXEL_FORMAT_RGB565BE, /**< The RGB565 big-endian format */
+ MEDIA_PIXEL_FORMAT_RGB888 = 0x0100, /**< The RGB888 format */
+ MEDIA_PIXEL_FORMAT_BGR888, /**< The BGR888 format */
+ MEDIA_PIXEL_FORMAT_RGBA8888, /**< The RGBA8888 format */
+ MEDIA_PIXEL_FORMAT_BGRA8888, /**< The BGRA8888 format */
+ MEDIA_PIXEL_FORMAT_YUV420P = 0x0200, /**< The YUV420 Planar format */
+ MEDIA_PIXEL_FORMAT_NV12, /**< The NV12 format */
+ MEDIA_PIXEL_FORMAT_NV12_TILE, /**< The NV12 tiled format */
+ MEDIA_PIXEL_FORMAT_NV21, /**< The NV21 format */
+ MEDIA_PIXEL_FORMAT_YUV444P, /**< The YUV444 Planar format */
+ MEDIA_PIXEL_FORMAT_YUYV422, /**< The YUYV422 format */
+ MEDIA_PIXEL_FORMAT_UYVY422, /**< The UYVY422 format */
+ MEDIA_PIXEL_FORMAT_GRAY, /**< The gray pixel format */
+};
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class PngDecoder
+{
+public:
+
+ static const int MAX_WIDTH = 5000;
+ static const int MAX_HEIGHT = 5000;
+ static const int MAX_SIZE = 4096000; // 4Mbyte
+
+ PngDecoder(void);
+ virtual ~PngDecoder(void);
+
+ /**
+ * Constructs this instancce with given buffer and length.
+ *
+ * @return An error code
+ * @param[in] buffer The buffer that contains compressed data.
+ * @param[in] length The length of buffer.
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_ARG The input parameter is invalid.
+ */
+ virtual result Construct(const byte* buffer, int length, MediaPixelFormat pixelFormat);
+
+ /**
+ * Decodes current frame and returns decoded data.
+ *
+ * @return A buffer pointer of decoded data
+ * @param[out] outLength The length of outBuf.
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_MEMORY Memory is insufficient.
+ * @exception E_INVALID_DATA The data is invalid.
+ */
+ virtual byte* DecodeN(int& outLength);
+
+ /**
+ * Sets the decoding region. @n
+ *
+ * @return An error code
+ * @param[in] rect The decoding region.
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_INVALID_ARG The input parameter is invalid.
+ * @exception E_UNSUPPORTED_OPERATION This method is unsupported.
+ */
+ virtual result SetDecodingRegion(int x, int y, int width, int height);
+
+ /**
+ * Gets current dimension of image.
+ *
+ * @return An error code
+ * @param[out] width The width of image.
+ * @param[out] height The height of image.
+ */
+ virtual result GetDimension(int& width, int& height);
+
+ /**
+ * Gets the output pixel format.
+ *
+ * @return The output pixel format.
+ */
+ virtual MediaPixelFormat GetPixelFormat(void);
+
+ void PngReadData(void *pngPtr, byte* data, int size);
+
+ static void PngReadDataStatic(png_structp pngPtr, png_bytep data, png_size_t length);
+protected:
+
+
+private:
+ byte* __pBuf;
+ unsigned int __curPos;
+ unsigned int __bufSize;
+
+ png_structp __pPng;
+ png_infop __pInfo;
+
+ int __srcWidth;
+ int __srcHeight;
+ int __scale;
+ int __decodingRectX;
+ int __decodingRectY;
+ int __decodingRectWidth;
+ int __decodingRectHeight;
+ bool __isDecodeRegionEnabled;
+ MediaPixelFormat __format;
+
+}; // class PngDecoder
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/graphic/Point.h b/inc/engine/graphic/Point.h
new file mode 100755
index 0000000..0d00531
--- /dev/null
+++ b/inc/engine/graphic/Point.h
@@ -0,0 +1,217 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_POINT_H
+#define HERE_GRAPHIC_POINT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Point;
+
+class EXPORT_API Point : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * This initializes an instance of %Point with the values (0, 0).
+ *
+ * @since 2.0
+ */
+ Point(void);
+
+ /**
+ * This is the copy constructor for the %Point class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Point
+ */
+ Point(const Point& rhs);
+
+ /**
+ * Initializes an instance of %Point with the specified location.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The x-coordinate
+ * @param[in] y The y-coordinate
+ */
+ Point(int x, int y);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Point(void);
+
+ /**
+ * Assigns the value of the specified instance to the current instance of %Point.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Point
+ */
+ Point& operator =(const Point& rhs);
+
+ /**
+ * Checks whether the current instance and the specified instance of %Point are equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the two instances of %Point are at the same location, @n
+ * else @c false
+ * @param[in] rhs An instance of %Point
+ */
+ bool operator ==(const Point& rhs) const;
+
+ /**
+ * Checks whether the current instance and the specified instance of %Point are not equal.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the two instances of %Point are at different locations, @n
+ * else @c false
+ * @param[in] rhs An instance of %Point
+ */
+ bool operator !=(const Point& rhs) const;
+
+ /**
+ * Adds the value of the specified instance of %Point and the current instance.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %Point containing the resulting value of the operation
+ * @param[in] rhs An instance of %Point
+ */
+ Point operator +(const Point& rhs) const;
+
+ /**
+ * Subtracts the value of the specified instance of %Point from the current instance.
+ *
+ * @since 2.0
+ *
+ * @return A new instance of %Point containing the resulting value of the operation
+ * @param[in] rhs An instance of %Point
+ */
+ Point operator -(const Point& rhs) const;
+
+ /**
+ * Adds the value of the specified instance of %Point to the current instance.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %Point
+ */
+ Point& operator +=(const Point& point);
+
+ /**
+ * Subtracts the value of the specified instance of %Point from the current instance.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %Point
+ */
+ Point& operator -=(const Point& point);
+
+ /**
+ * Checks whether the value of the specified instance of %Point equals the value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the specified instance equals the value of the current instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %Point
+ * @remarks The %Point class has a semantic value, which means that the
+ * Equals() method checks whether the two instances have the same
+ * location.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ * @remarks Two equal instances must return the same hash value. @n For better performance,
+ * the used hash function must generate a random distribution for all inputs.
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Sets the x and y coordinates for the current instance of %Point.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x-coordinate
+ * @param[in] y The new y-coordinate
+ */
+ void SetPosition(int x, int y);
+
+ /**
+ * Sets the current instance of %Point.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of %Point
+ */
+ void SetPosition(const Point& point);
+
+ /**
+ * Translates this %Point to the indicated distance.
+ *
+ * @since 2.0
+ *
+ * @param[in] deltaX The distance to move this point along the x-axis
+ * @param[in] deltaY The distance to move this point along the y-axis
+ */
+ void Translate(int deltaX, int deltaY);
+
+public:
+ /**
+ * The x-coordinate of the point.
+ *
+ * @since 2.0
+ */
+ int x;
+
+ /**
+ * The y-coordinate of the point.
+ *
+ * @since 2.0
+ */
+ int y;
+
+private:
+ friend class _PointImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _PointImpl * __pImpl;
+
+}; // Point
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_POINT_H */
diff --git a/inc/engine/graphic/Rectangle.h b/inc/engine/graphic/Rectangle.h
new file mode 100755
index 0000000..4d29ae0
--- /dev/null
+++ b/inc/engine/graphic/Rectangle.h
@@ -0,0 +1,327 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_RECTANGLE_H
+#define HERE_GRAPHIC_RECTANGLE_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Point.h"
+#include "graphic/Dimension.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Rectangle;
+
+class EXPORT_API Rectangle : public Object
+{
+public:
+ /**
+ * This is the default constructor for this class. @n
+ * It initializes an instance of %Rectangle with all its attributes set to @c 0.
+ *
+ * @since 2.0
+ *
+ * @remarks The attribute value is @c 0 when initialized.
+ */
+ Rectangle(void);
+
+ /**
+ * This is the copy constructor for the %Rectangle class.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Rectangle
+ */
+ Rectangle(const Rectangle& rhs);
+
+ /**
+ * Initializes an instance of %Rectangle with the specified location and dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The x-coordinate of the top-left corner of the rectangle
+ * @param[in] y The y-coordinate of the top-left corner of the rectangle
+ * @param[in] width The width of the rectangle
+ * @param[in] height The height of the rectangle
+ *
+ */
+ Rectangle(int x, int y, int width, int height);
+
+ /**
+ * Initializes an instance of %Rectangle at the location specified by @c point and
+ * with dimension specified by @c dim.
+ *
+ * @since 2.0
+ *
+ * @param[in] point The location of the top-left corner of the rectangle
+ * @param[in] dim The width and height of the rectangle
+ */
+ Rectangle(const Point& point, const Dimension& dim);
+
+ /**
+ * This is the destructor for this class.
+ *
+ * @since 2.0
+ */
+ virtual ~Rectangle(void);
+
+ /**
+ * Assigns the value of the specified instance to the current instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @param[in] rhs An instance of %Rectangle
+ */
+ Rectangle& operator =(const Rectangle& rhs);
+
+ /**
+ * Checks whether the location and dimension of the current instance of %Rectangle match those of the
+ * specified instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location and dimension of the current instance match those of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %Rectangle
+ */
+ bool operator ==(const Rectangle& rhs) const;
+
+ /**
+ * Checks whether the location and dimension of the current instance of %Rectangle do not match those of the
+ * specified instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location and dimension of the current instance do not match those of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %Rectangle
+ */
+ bool operator !=(const Rectangle& rhs) const;
+
+ /**
+ * Checks whether the specified point lies inside the current instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the location represented by the specified @c point lies inside the current instance of %Rectangle, @n
+ * else @c false
+ * @param[in] point An instance of %Point
+ */
+ bool Contains(const Point& point) const;
+
+ /**
+ * Checks whether the value of the current instance of %Rectangle equals the value of the specified instance of
+ * %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the value of the current instance of %Rectangle equals the value of the specified instance of %Rectangle, @n
+ * else @c false
+ * @param[in] rhs An instance of %Rectangle
+ * @remarks The %Rectangle class has a semantic value, which means that the Equals() method checks whether the
+ * two instances have the same location and size.
+ */
+ virtual bool Equals(const Object& rhs) const;
+
+ /**
+ * Gets the hash value of the current instance.
+ *
+ * @since 2.0
+ *
+ * @return The hash value of the current instance
+ */
+ virtual long GetHashCode(void) const;
+
+ /**
+ * Gets the intersection of the current instance and the specified instance of %Rectangle. @n
+ * If the two instances of %Rectangle do not intersect, an empty instance is returned.
+ *
+ * @since 2.0
+ *
+ * @param[in] rect An instance of %Rectangle
+ */
+ Rectangle GetIntersection(const Rectangle& rect) const;
+
+ /**
+ * Checks whether the current instance of %Rectangle intersects with the specified instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return @c true if the current instance of %Rectangle intersects with the specified instance of %Rectangle, @n
+ * else @c false
+ * @param[in] rect An instance of %Rectangle
+ *
+ */
+ bool IsIntersected(const Rectangle& rect) const;
+
+ /**
+ * Gets the union of the current instance and the specified instance of %Rectangle.
+ *
+ * @since 2.0
+ *
+ * @return An instance of %Rectangle containing the union of the two rectangles
+ * @param[in] rect An instance of %Rectangle
+ */
+ Rectangle GetUnion(const Rectangle& rect) const;
+
+ /**
+ * Gets the coordinates of the point at the bottom-right corner of the rectangle.
+ *
+ * @since 2.0
+ *
+ * @return The coordinates of the point at the bottom-right corner of the rectangle
+ */
+ Point GetBottomRight(void) const;
+
+ /**
+ * Gets the coordinates of the point at the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ *
+ * @return The coordinates of the point at the top-left corner of the rectangle
+ */
+ Point GetTopLeft(void) const;
+
+ /**
+ * Checks whether this %Rectangle is empty. @n
+ * A %Rectangle is empty if its width or its height is less than or equal to @c 0.
+ *
+ * @since 2.0
+ *
+ * @return @c true if this rectangle is empty, @n
+ * else @c false
+ */
+ bool IsEmpty(void) const;
+
+ /**
+ * Sets the size of this %Rectangle to match the specified Dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] dim The new size for the Dimension
+ */
+ void SetSize(const Dimension& dim);
+
+ /**
+ * Sets the size of this %Rectangle to match the specified dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetSize(int width, int height);
+
+ /**
+ * Sets the position of this %Rectangle to the specified point.
+ *
+ * @since 2.0
+ *
+ * @param[in] point The new position
+ */
+ void SetPosition(const Point& point);
+
+ /**
+ * Sets the location of the current instance of %Rectangle with the specified values of the
+ * x and y coordinates of the top-left corner point.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x-coordinate
+ * @param[in] y The new y-coordinate
+ */
+ void SetPosition(int x, int y);
+
+ /**
+ * Sets the location and the dimensions of the current instance of %Rectangle with the specified x and y
+ * coordinates of the top-left corner point and the specified dimensions.
+ *
+ * @since 2.0
+ *
+ * @param[in] x The new x coordinate
+ * @param[in] y The new y coordinate
+ * @param[in] width The new width
+ * @param[in] height The new height
+ */
+ void SetBounds(int x, int y, int width, int height);
+
+ /**
+ * Sets the location and the dimensions of the current instance of %Rectangle with the specified location and
+ * dimension.
+ *
+ * @since 2.0
+ *
+ * @param[in] point An instance of Point
+ * @param[in] dim An instance of Dimension
+ */
+ void SetBounds(const Point& point, const Dimension& dim);
+
+ /**
+ * Translates this %Rectangle to the new point by the specified distance along the x-axis and y-axis.
+ *
+ * @since 2.0
+ *
+ * @param[in] deltaX The distance to move this %Rectangle along the x-axis
+ * @param[in] deltaY The distance to move this %Rectangle along the y-axis
+ */
+ void Translate(int deltaX, int deltaY);
+
+public:
+ /**
+ * The x-coordinate of the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ */
+ int x;
+
+ /**
+ * The y-coordinate of the top-left corner of the rectangle.
+ *
+ * @since 2.0
+ */
+ int y;
+
+ /**
+ * The width of this rectangle.
+ *
+ * @since 2.0
+ */
+ int width;
+
+ /**
+ * The height of this rectangle.
+ *
+ * @since 2.0
+ */
+ int height;
+
+private:
+ friend class _RectangleImpl;
+
+ //
+ // This variable is for internal use only.
+ // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+ //
+ // @since 2.0
+ //
+ class _RectangleImpl * __pImpl;
+
+}; // Rectangle
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_RECTANGLE_H */
diff --git a/inc/engine/internal/Distance.h b/inc/engine/internal/Distance.h
new file mode 100644
index 0000000..af5e76a
--- /dev/null
+++ b/inc/engine/internal/Distance.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISTANCE_H_
+#define DISTANCE_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Distance
+{
+public:
+ Distance();
+ Distance(float f);
+ float Get() const;
+ bool IsValid() const;
+
+private:
+ float __internal;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISTANCE_H_
diff --git a/inc/engine/internal/DoublePoint.h b/inc/engine/internal/DoublePoint.h
new file mode 100644
index 0000000..54f923e
--- /dev/null
+++ b/inc/engine/internal/DoublePoint.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DOUBLEPOINT_H
+#define DOUBLEPOINT_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint
+{
+public:
+ DoublePoint(double _x, double _y) : x(_x), y(_y){}
+
+ double x;
+ double y;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/DoublePoint3.h b/inc/engine/internal/DoublePoint3.h
new file mode 100644
index 0000000..ab21fe7
--- /dev/null
+++ b/inc/engine/internal/DoublePoint3.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DOUBLEPOINT3_H
+#define DOUBLEPOINT3_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint3
+{
+public:
+ DoublePoint3() : x(0), y(0), z(0) {}
+ DoublePoint3(double _x, double _y, double _z) : x(_x), y(_y), z(_z){}
+
+ double x;
+ double y;
+ double z;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/EncodingConversion.h b/inc/engine/internal/EncodingConversion.h
new file mode 100755
index 0000000..dbad832
--- /dev/null
+++ b/inc/engine/internal/EncodingConversion.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ENCODING_CONVERSION_H
+#define ENCODING_CONVERSION_H
+
+#include "common/HereMaps_global.h"
+
+#include <string>
+
+#ifndef TIZEN_MIGRATION
+namespace Tizen{ namespace Base{ class ByteBuffer; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class offers encoding conversion utilities between UTF-8 and platform
+ * default string encoding.
+ */
+class EncodingConversion
+{
+public:
+ /**
+ * This method converts a platform string to UTF-8.
+ *
+ * @param sSrc A constant reference to a platform string to convert.
+ *
+ * @param sDst A reference to a string object holding the results of
+ * conversion to UTF-8.
+ *
+ * @return Always <code>true</code>.
+ */
+ static bool ToUTF8(const WString& sSrc, std::string& sDst);
+
+
+ /**
+ * This method converts a UTF-8 string to a platform string.
+ *
+ * @param sSrc A constant reference to an unsigned character buffer
+ * containing the string to convert.
+ *
+ * @param uLen A value representing the length of the buffer containing the
+ * string to covert.
+ *
+ * @param sDst A reference to a string object holding the results of
+ * conversion from UTF-8.
+ *
+ * @return Always <code>true</code>.
+ */
+ static bool FromUTF8(const char* pSrc, size_t uLen, WString& sDst);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(EncodingConversion);
+};
+
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/FPSCounter.h b/inc/engine/internal/FPSCounter.h
new file mode 100644
index 0000000..626cc2d
--- /dev/null
+++ b/inc/engine/internal/FPSCounter.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FPSCOUNTER_H
+#define FPSCOUNTER_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class FPSCounter
+{
+public:
+ FPSCounter(unsigned int uNumAccumulateFrames);
+ void operator++();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(FPSCounter);
+
+ long long m_lastTick;
+ unsigned int m_uNumFrames;
+ unsigned int m_uNumAccumulateFrames;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/GeoMercatorProjection.h b/inc/engine/internal/GeoMercatorProjection.h
new file mode 100755
index 0000000..9c30566
--- /dev/null
+++ b/inc/engine/internal/GeoMercatorProjection.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOMERCATORPROJECTION_H
+#define GEOMERCATORPROJECTION_H
+
+#include <cmath>
+
+#ifdef TIZEN_OSP_BASED
+#include <FGraphics.h>
+#endif
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProjection.h"
+#include "internal/DoublePoint.h"
+#include "internal/DoublePoint3.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+
+/**
+ * This class encapsulates the normalized mercator projection. In this
+ * projection, the map is represented by a grid of square tiles (bitmap
+ * images). The position of the tile in this grid depends on the map zoom level
+ * and is defined by the x and y coordinates. At the lowest zoom level, there is
+ * only one tile. At the next zoom level, the grid is 2 x 2. With each higher
+ * zoom level the x-size and the y-size of the grid increase by a power of two.
+ *
+ * \ingroup maps
+ */
+
+class GeoMercatorProjection : public GeoProjection
+{
+public:
+ GeoMercatorProjection();
+
+ virtual void setTileSize(const Tizen::Maps::Dimension& size);
+ virtual void setScreenSize(const Tizen::Maps::Dimension& size);
+ virtual void setLevel(double value);
+ virtual void setGeoCenter(const GeoCoordinates& value);
+ virtual void setHeading(double value);
+ virtual bool setGeoCenterInPx(const Tizen::Maps::Point& value);
+ virtual Tizen::Maps::Point geoToPixel(const GeoCoordinates& geo) const;
+ virtual GeoCoordinates pixelToGeo(const Tizen::Maps::Point &pixel) const;
+ virtual std::vector<GeoProjectionNode*> projectRoot();
+
+protected:
+ virtual GeoProjectionNode* createNodeAt(double left_x, double bottom_y);
+ virtual void filter(GeoProjectionNode& transform,const std::vector<DoublePoint3>& points);
+ virtual DoublePoint3 projectPoint(double x, double y, double z = 0.0) const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMercatorProjection);
+
+ void createProjection();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOMERCATORPROJECTION_P_H
diff --git a/inc/engine/internal/GeoOpenGlRenderer.h b/inc/engine/internal/GeoOpenGlRenderer.h
new file mode 100755
index 0000000..1686353
--- /dev/null
+++ b/inc/engine/internal/GeoOpenGlRenderer.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOOPENGLRENDERER_H
+#define GEOOPENGLRENDERER_H
+
+#include "common/HereMaps_global.h"
+
+#include <vector>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/FloatRectangle.h"
+#include "graphic/Color.h"
+#else
+#include <FGraphics.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GlTexture;
+class GeoTiledMap;
+class GeoMapObjectMarker;
+class GeoProjectionNode;
+class DrawableBitmap;
+
+/**
+ * This class encapsulates an Open GL renderer used to render map tiles.
+ *
+ * \ingroup maps
+ */
+class GeoOpenGlRenderer
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoOpenGlRenderer();
+
+ /**
+ * This method is the default destructor.
+ */
+ ~GeoOpenGlRenderer();
+
+ /**
+ * This method creates an EGL texture from the image associated with the
+ * caller-supplied bitmap drawable.
+ *
+ * @param rDrawableBitmap A reference to a bitmap object that contains the
+ * image to be drawn.
+ *
+ * @return <code>true</code> if the image has been made drawable,
+ * <code>false</code> if a texture could not be associated with the supplied
+ * bitmap object.
+ */
+ bool MakeDrawable(DrawableBitmap& rDrawableBitmap);
+
+ /**
+ * This method renders the image(s) provided by the caller. The caller can
+ * specify the size of the area to render (the visible map area).
+ *
+ * @param nodes A list of objects containing images to render.
+ *
+ * @param width A value indicating the width of the area to render.
+ *
+ * @param height A value indicating the height of the area to render.
+ */
+ bool Render(const std::vector<GeoProjectionNode*>& nodes,
+ unsigned int width,
+ unsigned int height);
+
+ /**
+ * This method renders a square, using the rectangle and texture specified
+ * by the caller.
+ *
+ * @param aRect A constant reference to the rectangle to render.
+ *
+ * @param rTexture A constant reference to the texture object to apply.
+ *
+ * @param sx0 A value providing the x coordinate of the top left corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sy0 A value providing the y coordinate of the top left corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sx1 A value providing the x coordinate of the bottom right corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sy1 A value providing the y coordinate of the bottom right corner of
+ * the rectangle in the tile grid.
+ */
+ bool RenderQuad(const Tizen::Maps::FloatRectangle& aRect, const GlTexture& rTexture, float sx0=0.f, float sy0=1.f, float sx1=1.f, float sy1=0.f);
+
+ /**
+ * This method renders a square, using the rectangle and texture specified
+ * by the caller.
+ *
+ * @param aRect A constant reference to the rectangle to render.
+ *
+ * @param uTexture A value of the id of the texture object to apply.
+ *
+ * @param sx0 A value providing the x coordinate of the top left corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sy0 A value providing the y coordinate of the top left corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sx1 A value providing the x coordinate of the bottom right corner of
+ * the rectangle in the tile grid.
+ *
+ * @param sy1 A value providing the y coordinate of the bottom right corner of
+ * the rectangle in the tile grid.
+ */
+ bool RenderQuad(const Tizen::Maps::FloatRectangle& aRect, unsigned int uTextureId, float sx0=0.f, float sy0=1.f, float sx1=1.f, float sy1=0.f);
+
+ /**
+ * This method changes the color that will be used by the gl clear method.
+ */
+ void SetClearColor(const Tizen::Maps::Color& color);
+
+ /**
+ * This method clears the screen.
+ */
+ void Clear();
+
+private:
+ bool Initialize();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoOpenGlRenderer);
+ class GeoOpenGlRendererImpl;
+ GeoOpenGlRendererImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOOPENGLRENDERER_P_H
diff --git a/inc/engine/internal/HereLogo.h b/inc/engine/internal/HereLogo.h
new file mode 100644
index 0000000..3a377b0
--- /dev/null
+++ b/inc/engine/internal/HereLogo.h
@@ -0,0 +1,4631 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+Byte byHERE_logo_blue_transparent_rgb_16px[3146] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a,
+0xf4, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0x75, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x95, 0xbd, 0x4b, 0x03, 0x31, 0x1c, 0x86, 0x9f,
+0x68, 0x29, 0x08, 0xa2, 0x0e, 0x8e, 0x72, 0x0e,
+0xce, 0x82, 0x93, 0x8b, 0x28, 0x55, 0x63, 0xa1,
+0x43, 0x37, 0x41, 0x10, 0xf5, 0x5f, 0x90, 0x08,
+0xfe, 0x03, 0x0e, 0x82, 0x53, 0x5c, 0x9d, 0x04,
+0x07, 0x11, 0x14, 0x11, 0x74, 0x33, 0x88, 0x74,
+0x73, 0x10, 0x07, 0x27, 0x41, 0xc1, 0xc6, 0x8f,
+0xc5, 0x49, 0x97, 0x82, 0x50, 0xce, 0x25, 0x95,
+0x70, 0x9c, 0x6d, 0xa1, 0x07, 0x1d, 0xcc, 0xbb,
+0xdd, 0xef, 0xbd, 0xbb, 0x3c, 0xfc, 0xbe, 0x22,
+0xe2, 0x38, 0xa6, 0x9b, 0xea, 0xa1, 0xcb, 0x0a,
+0x00, 0x01, 0x20, 0x00, 0x04, 0x80, 0x00, 0xd0,
+0x75, 0x80, 0x5c, 0x33, 0x53, 0x08, 0x01, 0x40,
+0x24, 0x75, 0x01, 0xb8, 0xb3, 0x46, 0x7d, 0xfa,
+0x7e, 0x24, 0xf5, 0x00, 0x30, 0x01, 0x54, 0xad,
+0x51, 0xd5, 0xb4, 0x7f, 0xb4, 0xba, 0xec, 0x44,
+0xb3, 0x17, 0x84, 0x10, 0x44, 0x52, 0xcf, 0x01,
+0x17, 0xc0, 0x3d, 0x50, 0x6c, 0x40, 0x38, 0xa8,
+0x63, 0x60, 0x18, 0x88, 0x81, 0x3d, 0x60, 0xdd,
+0x1a, 0xf5, 0x9d, 0x19, 0xc0, 0xe8, 0xc2, 0xee,
+0x14, 0x70, 0x09, 0xf4, 0xb9, 0x50, 0x05, 0x28,
+0x01, 0xfd, 0xc0, 0x03, 0x30, 0x94, 0xf8, 0xe4,
+0x1c, 0x58, 0xf4, 0x21, 0x5a, 0x01, 0xb4, 0xea,
+0x81, 0x27, 0xe0, 0xdd, 0x7b, 0x9e, 0x71, 0xd9,
+0x58, 0x4a, 0x39, 0x1c, 0xa0, 0x0c, 0x9c, 0x44,
+0x52, 0xe7, 0xda, 0xed, 0x81, 0x76, 0x4a, 0x30,
+0x02, 0x5c, 0x03, 0x63, 0x9e, 0x55, 0x73, 0x59,
+0x79, 0x06, 0xf6, 0x81, 0x0d, 0x60, 0xd0, 0xf3,
+0x0f, 0x81, 0x35, 0x6b, 0x54, 0xbd, 0xd3, 0x0c,
+0x60, 0x8d, 0x7a, 0x05, 0x66, 0x81, 0x37, 0x2f,
+0xdc, 0x28, 0xc9, 0xb6, 0x35, 0x6a, 0x0b, 0x98,
+0x07, 0xbe, 0x3c, 0x7f, 0x19, 0x38, 0x88, 0xa4,
+0xee, 0xcd, 0x64, 0x0c, 0xad, 0x51, 0x2f, 0x40,
+0x21, 0x01, 0x01, 0xb0, 0x1a, 0x49, 0x9d, 0xb7,
+0x46, 0xdd, 0x02, 0xc5, 0x14, 0x88, 0x72, 0x66,
+0x7b, 0xc0, 0x1a, 0xf5, 0xe8, 0x20, 0x3e, 0xbc,
+0xf0, 0xb4, 0xab, 0x79, 0xde, 0x1a, 0x75, 0xe3,
+0x1a, 0xb4, 0xe6, 0xbc, 0x1d, 0x6b, 0xd4, 0x59,
+0xc7, 0x3d, 0x90, 0x54, 0x24, 0xf5, 0x38, 0x70,
+0xe5, 0xc6, 0xaf, 0xa1, 0x23, 0x60, 0xc5, 0x1a,
+0x55, 0x77, 0x63, 0x5b, 0xb2, 0x46, 0x6d, 0x66,
+0xb2, 0x07, 0xd2, 0xe4, 0x20, 0x2a, 0x89, 0x49,
+0xf8, 0x6d, 0xbc, 0x4c, 0x17, 0xd1, 0x5f, 0x8a,
+0xa4, 0x9e, 0x74, 0x75, 0xf6, 0x75, 0x6a, 0x8d,
+0xaa, 0x64, 0x06, 0x10, 0x6e, 0xc3, 0x00, 0x10,
+0x00, 0xfe, 0x05, 0xc0, 0xcf, 0x00, 0x15, 0x33,
+0x91, 0x07, 0x5a, 0x84, 0x75, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_32px[3589] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71,
+0xde, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x03,
+0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0xdb, 0x4f, 0x68, 0x1d, 0x55, 0x14, 0xc7, 0xf1,
+0xcf, 0x2b, 0x56, 0xac, 0xa2, 0xb5, 0x63, 0x25,
+0xfe, 0xad, 0xa2, 0x48, 0xcd, 0xc2, 0xea, 0x4a,
+0xc4, 0x4d, 0x9d, 0xa2, 0x82, 0x21, 0x88, 0x48,
+0xe9, 0x22, 0x62, 0xed, 0xc2, 0x85, 0x2d, 0xb4,
+0x53, 0x14, 0x75, 0x53, 0x37, 0x2e, 0xc4, 0x85,
+0x88, 0x53, 0x41, 0x4a, 0x41, 0x45, 0x91, 0xe2,
+0xc2, 0xe0, 0xa2, 0x0a, 0x56, 0xa1, 0x77, 0x61,
+0x75, 0x21, 0x28, 0x5a, 0x05, 0x15, 0x51, 0x0b,
+0xfe, 0x29, 0x52, 0x19, 0xad, 0x9a, 0xa2, 0x29,
+0x18, 0x37, 0x37, 0x70, 0x79, 0x34, 0x69, 0xe2,
+0x4b, 0xd2, 0xf7, 0xe7, 0x1e, 0x78, 0x0c, 0x73,
+0xce, 0xdc, 0x3b, 0x73, 0xbe, 0x73, 0xef, 0x3d,
+0xbf, 0x3b, 0xf0, 0x5a, 0x53, 0x53, 0x53, 0x06,
+0xd9, 0x96, 0x19, 0x70, 0xcb, 0x00, 0x32, 0x80,
+0x0c, 0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c,
+0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20,
+0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20, 0x03,
+0xc8, 0x00, 0x32, 0x80, 0x0c, 0x60, 0xb0, 0xec,
+0xac, 0x4e, 0x1a, 0xb7, 0x5a, 0xad, 0x45, 0x7f,
+0xc0, 0xa2, 0xac, 0x2f, 0xc1, 0x5a, 0x7c, 0xdb,
+0x84, 0xea, 0xc7, 0xf6, 0x78, 0xa7, 0x5f, 0xb5,
+0x5b, 0x9d, 0x74, 0xb0, 0x98, 0x00, 0x8a, 0xb2,
+0x3e, 0x1f, 0x2f, 0xe0, 0x3e, 0x4c, 0xdf, 0xe8,
+0x6d, 0x6c, 0x6d, 0x42, 0xf5, 0x43, 0x5f, 0x03,
+0x28, 0xca, 0x7a, 0x05, 0x0e, 0xe2, 0x96, 0x53,
+0x84, 0x8f, 0xe1, 0xf6, 0x26, 0x54, 0x87, 0x17,
+0x02, 0x40, 0xb7, 0xae, 0x01, 0x8f, 0x26, 0xc9,
+0x7f, 0x8c, 0xe7, 0x31, 0x11, 0xcf, 0x2f, 0xc6,
+0xb6, 0x85, 0xba, 0x51, 0x57, 0x8d, 0x80, 0xa2,
+0xac, 0xcf, 0xc6, 0x08, 0x9e, 0xc2, 0x30, 0x8e,
+0xe2, 0x5a, 0xdc, 0x81, 0x37, 0xb0, 0x1c, 0xfb,
+0xb0, 0x03, 0x7f, 0x37, 0xa1, 0x9a, 0xe8, 0xb7,
+0x11, 0xf0, 0x32, 0xde, 0xc4, 0xf5, 0xd3, 0x53,
+0x3c, 0x02, 0x49, 0x93, 0xdf, 0x8c, 0x67, 0xf0,
+0x4d, 0x51, 0xd6, 0x0f, 0xf6, 0x4d, 0x19, 0x2c,
+0xca, 0xfa, 0x4a, 0x8c, 0x4d, 0x0f, 0xae, 0x78,
+0xbc, 0xec, 0x14, 0xc9, 0x8f, 0x61, 0x0b, 0x2e,
+0xc5, 0xc6, 0xbe, 0x00, 0x50, 0x94, 0xf5, 0x93,
+0xd8, 0x99, 0xb8, 0xf6, 0xb5, 0x5d, 0x32, 0x81,
+0x03, 0x78, 0x0e, 0xaf, 0x46, 0xdf, 0x3f, 0x78,
+0xb8, 0xe7, 0xd7, 0x80, 0xa2, 0xac, 0x9f, 0xc6,
+0xe3, 0x89, 0xeb, 0x8f, 0x26, 0x54, 0x2b, 0x8b,
+0xb2, 0xde, 0x8d, 0xed, 0x33, 0x34, 0xfb, 0x17,
+0x9b, 0x9a, 0x50, 0x8d, 0xf7, 0x74, 0x19, 0x2c,
+0xca, 0x7a, 0x35, 0x3e, 0xc5, 0xe5, 0x6d, 0xa1,
+0x9b, 0x70, 0x18, 0xbb, 0xf0, 0x44, 0x9c, 0x02,
+0xd3, 0x76, 0x14, 0x5b, 0x9a, 0x50, 0xbd, 0xdb,
+0xd3, 0x3a, 0xa0, 0x28, 0xeb, 0x6b, 0x70, 0x35,
+0xce, 0xc1, 0xde, 0x36, 0x08, 0x9f, 0x61, 0x7d,
+0x13, 0xaa, 0xe3, 0x45, 0x59, 0x5f, 0x81, 0xd1,
+0x58, 0xfe, 0xbe, 0xc6, 0x5b, 0x4d, 0xa8, 0x4e,
+0xf4, 0xac, 0x10, 0x2a, 0xca, 0x7a, 0x15, 0x5e,
+0xc2, 0x3d, 0x89, 0xfb, 0x17, 0x0c, 0xb5, 0x5d,
+0xfa, 0x21, 0x46, 0x9a, 0x50, 0x1d, 0x9f, 0xad,
+0xbf, 0x9e, 0x02, 0x10, 0xe5, 0xed, 0x21, 0xac,
+0x9b, 0x63, 0x93, 0x8f, 0x70, 0xe7, 0x6c, 0x10,
+0x7a, 0x4d, 0x07, 0xec, 0x4a, 0x92, 0xff, 0x00,
+0xcf, 0xe2, 0x44, 0x12, 0x7f, 0x0d, 0x3f, 0x25,
+0xe7, 0x37, 0xc7, 0x95, 0xbf, 0x6f, 0xb6, 0xc3,
+0x9b, 0xe2, 0xf1, 0x08, 0x36, 0xe0, 0x93, 0xb8,
+0x06, 0xc0, 0x9e, 0x58, 0xd6, 0x46, 0x13, 0x08,
+0x5f, 0xe0, 0xb1, 0xae, 0xdd, 0x0e, 0xff, 0x0f,
+0xbb, 0x20, 0x11, 0x3a, 0x63, 0x78, 0x31, 0xbe,
+0x84, 0x3d, 0x51, 0xdf, 0xbf, 0x8e, 0xf5, 0x78,
+0x25, 0x8e, 0x94, 0xcd, 0x4d, 0xa8, 0x8e, 0x75,
+0x3d, 0x80, 0xa2, 0xac, 0x6f, 0xc0, 0x56, 0xec,
+0x6c, 0x42, 0x35, 0x99, 0xf8, 0x57, 0xe2, 0xa1,
+0xb8, 0xc2, 0xbf, 0x17, 0x4b, 0xdb, 0x6d, 0xb8,
+0x2a, 0xca, 0x5e, 0x49, 0xf2, 0xdb, 0x92, 0x11,
+0xb2, 0xb6, 0x09, 0xd5, 0x5d, 0x4b, 0xf1, 0x46,
+0x3a, 0x5e, 0x04, 0x63, 0xf2, 0x07, 0xb1, 0x1a,
+0xfb, 0xb1, 0xb1, 0x09, 0xd5, 0x64, 0x51, 0xd6,
+0x43, 0x78, 0x1f, 0xd7, 0x25, 0x4d, 0x7e, 0xc7,
+0x85, 0xc9, 0xf9, 0x9f, 0x78, 0x04, 0xb7, 0x46,
+0x79, 0x0b, 0x7f, 0x61, 0x5d, 0x13, 0xaa, 0xef,
+0xe7, 0xf2, 0x0c, 0x67, 0xb4, 0x0a, 0x5c, 0xb4,
+0x61, 0xf7, 0xb2, 0x38, 0x4f, 0x87, 0x13, 0xf7,
+0xfe, 0xa8, 0xd1, 0xf7, 0xe2, 0x81, 0x79, 0x76,
+0x79, 0x12, 0x77, 0x37, 0xa1, 0x7a, 0x67, 0xae,
+0x0d, 0xce, 0x78, 0x19, 0x6c, 0x1b, 0x01, 0x29,
+0x84, 0x1b, 0xb1, 0x66, 0x1e, 0xdd, 0x1d, 0xc1,
+0xfd, 0x4d, 0xa8, 0x0e, 0xcd, 0xe7, 0x19, 0xba,
+0x42, 0x07, 0xcc, 0x00, 0x61, 0xda, 0x46, 0xe2,
+0x66, 0x66, 0xbc, 0x2d, 0xfe, 0x55, 0xfc, 0xe4,
+0xb5, 0x02, 0x5f, 0xe2, 0x40, 0xba, 0x7e, 0xf4,
+0x14, 0x80, 0x59, 0x20, 0x9c, 0xc4, 0x50, 0x13,
+0xaa, 0xdf, 0x66, 0x88, 0x07, 0x8c, 0xa6, 0xd2,
+0x76, 0xa9, 0x01, 0x2c, 0x98, 0x0e, 0x68, 0x42,
+0xf5, 0x79, 0xac, 0xed, 0xbf, 0x26, 0xee, 0xe5,
+0x18, 0x2f, 0xca, 0xfa, 0xdc, 0x19, 0xe2, 0xe7,
+0xb5, 0x6d, 0x74, 0x96, 0xdc, 0x16, 0x5c, 0x0a,
+0x9f, 0xee, 0x4d, 0x27, 0xf1, 0xef, 0x4e, 0x27,
+0x73, 0x7b, 0x6a, 0x0a, 0xcc, 0x13, 0xc2, 0x30,
+0x7e, 0xee, 0x34, 0xf9, 0xae, 0xde, 0x0c, 0x2d,
+0xd6, 0x9c, 0xef, 0x99, 0xcd, 0x50, 0x9c, 0xf3,
+0x6b, 0xb0, 0x2a, 0xf9, 0xdd, 0x8b, 0x49, 0x5d,
+0x64, 0xad, 0xfc, 0x87, 0x89, 0x01, 0xb7, 0x0c,
+0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20,
+0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20, 0x03,
+0xc8, 0x00, 0x32, 0x80, 0x81, 0xb4, 0xff, 0x06,
+0x00, 0xa5, 0x46, 0x44, 0x0a, 0xcc, 0xb9, 0x9e,
+0x9a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
+0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_24px[3358] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9,
+0x87, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x02,
+0x49, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0xd9, 0x4b, 0xa8, 0x4d, 0x51, 0x1c, 0xc7, 0xf1,
+0xcf, 0xb9, 0x88, 0xf2, 0xde, 0x94, 0x42, 0x06,
+0x24, 0x45, 0x77, 0x62, 0x60, 0x20, 0xc9, 0xbe,
+0x23, 0xe5, 0x31, 0xc2, 0x48, 0x37, 0x03, 0x49,
+0x26, 0xbb, 0xe4, 0x75, 0x07, 0x22, 0x49, 0x61,
+0x62, 0xcb, 0x4c, 0x49, 0xc8, 0x48, 0x52, 0x06,
+0x26, 0x6a, 0x9b, 0x92, 0xd7, 0x84, 0x99, 0x47,
+0x61, 0x22, 0xf6, 0x40, 0x21, 0xaf, 0xae, 0xc9,
+0x5f, 0x9d, 0xae, 0xeb, 0x71, 0x6e, 0xf7, 0x9c,
+0x7b, 0x6e, 0xad, 0x7f, 0x9d, 0xce, 0xe9, 0xb7,
+0xd6, 0x3e, 0x6b, 0x7d, 0xd7, 0xff, 0xb1, 0xfe,
+0xa7, 0xd3, 0x18, 0x1c, 0x1c, 0x34, 0x9e, 0xad,
+0xc7, 0x38, 0xb7, 0x04, 0x90, 0x00, 0x12, 0x40,
+0x02, 0x48, 0x00, 0x09, 0x20, 0x01, 0x24, 0x80,
+0x04, 0x90, 0x00, 0x12, 0xc0, 0x88, 0x6d, 0x62,
+0x2b, 0x93, 0x1b, 0x8d, 0xc6, 0xa8, 0x2c, 0x9a,
+0xe5, 0xe5, 0x2e, 0x1c, 0xc0, 0x74, 0xdc, 0xc0,
+0x40, 0x5d, 0x15, 0x35, 0xb4, 0xfa, 0x03, 0xab,
+0xd1, 0xca, 0x03, 0xa3, 0x01, 0x90, 0xe5, 0xe5,
+0x00, 0x4e, 0x0c, 0x91, 0x9f, 0x61, 0x5d, 0x5d,
+0x15, 0xaf, 0x5b, 0x05, 0xe8, 0x68, 0x08, 0x65,
+0x79, 0x39, 0x1f, 0x47, 0xf0, 0x1d, 0x5b, 0x71,
+0x29, 0x86, 0x3e, 0xe3, 0x4b, 0x57, 0xe7, 0x40,
+0x84, 0xcd, 0x53, 0x4c, 0xc6, 0x7b, 0x4c, 0xc5,
+0x76, 0x3c, 0xc4, 0x06, 0x5c, 0xcb, 0xf2, 0x72,
+0x47, 0x57, 0x02, 0x64, 0x79, 0x39, 0x05, 0x07,
+0x31, 0x33, 0xa4, 0x79, 0xb8, 0x88, 0xfb, 0x58,
+0x8f, 0xd3, 0x58, 0x1b, 0x40, 0xdd, 0x05, 0x90,
+0xe5, 0xe5, 0x66, 0xbc, 0xc4, 0x02, 0x3c, 0xc1,
+0xd1, 0xa6, 0xe1, 0x79, 0xb8, 0x87, 0x6d, 0xa8,
+0xb1, 0xbb, 0xd5, 0xef, 0x6f, 0x6b, 0x12, 0x67,
+0x79, 0x39, 0x0d, 0x2f, 0x30, 0x37, 0xa4, 0xe7,
+0x58, 0x86, 0xe3, 0xd8, 0xdf, 0x74, 0x80, 0xcf,
+0xb1, 0xa5, 0xae, 0x8a, 0x47, 0x5d, 0x93, 0xc4,
+0x59, 0x5e, 0xae, 0xc2, 0x2e, 0x9c, 0xc7, 0xa7,
+0x90, 0x17, 0xe3, 0x78, 0x5d, 0x15, 0x87, 0xb0,
+0x14, 0xfd, 0x11, 0xff, 0xcb, 0xeb, 0xaa, 0x78,
+0x34, 0x92, 0x75, 0xda, 0xe2, 0x81, 0x2c, 0x2f,
+0x4f, 0xc5, 0x09, 0xff, 0xc9, 0x4e, 0x06, 0xc4,
+0x6f, 0x36, 0xe6, 0x1e, 0xc8, 0xf2, 0x72, 0x5b,
+0x6c, 0xfe, 0x23, 0xae, 0xe3, 0x5b, 0x0c, 0x3d,
+0xc6, 0x87, 0xf8, 0x7c, 0x30, 0xcb, 0xcb, 0x9d,
+0xdd, 0xda, 0x4a, 0x6c, 0x8d, 0xf7, 0x7d, 0xb8,
+0x8d, 0x49, 0x91, 0xa8, 0x3b, 0xb1, 0x37, 0x20,
+0x2a, 0x5c, 0xed, 0x78, 0x2b, 0xd1, 0x74, 0xca,
+0xbd, 0x78, 0x5a, 0x57, 0xc5, 0x8f, 0x26, 0x6d,
+0x71, 0x5c, 0x46, 0xbf, 0x62, 0x60, 0x0f, 0x7a,
+0x63, 0xf3, 0x1b, 0xc3, 0x1b, 0xab, 0x71, 0x18,
+0x67, 0xea, 0xaa, 0xf8, 0x34, 0x26, 0x1e, 0xc8,
+0xf2, 0xb2, 0x0f, 0x77, 0x71, 0x29, 0xcb, 0xcb,
+0x09, 0xa1, 0x9d, 0x8b, 0x76, 0xe0, 0x15, 0x56,
+0xc6, 0xd4, 0x5e, 0x7c, 0xc5, 0x39, 0x5c, 0xc1,
+0x9a, 0x28, 0xa7, 0xe5, 0x68, 0x6d, 0xbe, 0xe5,
+0x24, 0x9e, 0xd3, 0x77, 0xb6, 0x27, 0x62, 0xb9,
+0x37, 0xa4, 0xab, 0xb8, 0x8c, 0x5b, 0xff, 0xf1,
+0xf8, 0x5b, 0xf4, 0xd5, 0x55, 0xf1, 0xe4, 0x6f,
+0x93, 0xda, 0xde, 0xcc, 0x65, 0x79, 0xb9, 0x10,
+0x77, 0xb0, 0x24, 0xe4, 0x77, 0x51, 0xe7, 0x6f,
+0xc4, 0xe9, 0x2f, 0x0a, 0xfd, 0x07, 0x1e, 0x60,
+0x56, 0xcc, 0x3f, 0x56, 0x57, 0xc5, 0x9b, 0x7f,
+0xad, 0xd1, 0x91, 0x6e, 0x74, 0x18, 0x88, 0xc1,
+0xd8, 0xe8, 0x8c, 0x21, 0xfa, 0xcd, 0xb8, 0xa0,
+0xbe, 0xfe, 0xef, 0x1a, 0x1d, 0x29, 0xa3, 0x75,
+0x55, 0xbc, 0xc6, 0xba, 0x88, 0x7b, 0x68, 0x44,
+0x9c, 0xbf, 0x1d, 0xa2, 0x4f, 0x1b, 0x69, 0xa1,
+0x68, 0x7b, 0x19, 0x1d, 0x06, 0x62, 0x13, 0xae,
+0x35, 0x41, 0x5c, 0xc0, 0xc6, 0xd1, 0x4c, 0xd8,
+0xb6, 0xdc, 0xc4, 0xc3, 0x84, 0x53, 0xcb, 0x61,
+0x33, 0xa6, 0x37, 0x71, 0x78, 0x62, 0x05, 0x66,
+0xc7, 0xab, 0x3f, 0x12, 0xb8, 0x23, 0xd6, 0x48,
+0x7f, 0xf2, 0x25, 0x80, 0x04, 0x90, 0x00, 0x12,
+0x40, 0x02, 0x48, 0x00, 0x09, 0x60, 0xe4, 0xf6,
+0x73, 0x00, 0x83, 0x0c, 0xcc, 0x82, 0x48, 0x2a,
+0xcd, 0xea, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
+0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_48px[4042] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xe2, 0x98, 0x77,
+0x38, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x04,
+0xf5, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9b, 0x5d, 0x6c, 0x54, 0x45, 0x18, 0x86, 0x9f,
+0xb5, 0x20, 0x4a, 0x00, 0xf1, 0x14, 0x24, 0x41,
+0x34, 0x1a, 0xb5, 0x9a, 0xc8, 0x85, 0xc1, 0xa4,
+0x18, 0x63, 0x4c, 0x4f, 0x2f, 0x88, 0x31, 0x95,
+0x0b, 0x12, 0x8d, 0xca, 0x8f, 0xa0, 0x31, 0xf1,
+0x0f, 0x26, 0xa1, 0x46, 0x45, 0x13, 0x8b, 0x1a,
+0x7f, 0xa3, 0xe0, 0x41, 0x11, 0x13, 0x2f, 0x94,
+0x46, 0x24, 0x12, 0x04, 0x12, 0xb9, 0xb1, 0xc4,
+0x0e, 0x89, 0xd4, 0xa4, 0x5e, 0xa8, 0x51, 0x2e,
+0x8c, 0x11, 0x8d, 0x3f, 0x90, 0xd8, 0xc2, 0xc4,
+0xaa, 0x54, 0x4b, 0xac, 0xf5, 0xe2, 0x4c, 0xcd,
+0x7a, 0xdc, 0xd3, 0x9e, 0xb6, 0xbb, 0xcb, 0xee,
+0xf6, 0x7d, 0x6f, 0x9a, 0xee, 0xcc, 0xec, 0xd9,
+0x79, 0x9f, 0xce, 0xcc, 0xf7, 0x7d, 0xb3, 0xcd,
+0x0d, 0x0d, 0x0d, 0x21, 0x9d, 0x3e, 0x9d, 0x21,
+0x0b, 0x04, 0x40, 0x00, 0x24, 0x01, 0x10, 0x00,
+0x49, 0x00, 0x04, 0x40, 0x12, 0x00, 0x01, 0x90,
+0x04, 0x40, 0x00, 0x24, 0x01, 0x10, 0x00, 0x49,
+0x00, 0x04, 0x40, 0x12, 0x00, 0x01, 0x90, 0x04,
+0x40, 0x00, 0x24, 0x01, 0x10, 0x00, 0x49, 0x00,
+0x04, 0x40, 0x12, 0x00, 0x01, 0x90, 0x04, 0x40,
+0x00, 0x24, 0x01, 0x10, 0x00, 0x49, 0x00, 0x04,
+0x40, 0x12, 0x00, 0x01, 0x90, 0x26, 0xa6, 0x29,
+0xa5, 0x7c, 0xf3, 0x5c, 0x2e, 0x57, 0x51, 0x93,
+0x0d, 0xc2, 0xe8, 0x22, 0xe0, 0x7e, 0xa0, 0x09,
+0x98, 0x0d, 0x7c, 0x0b, 0xec, 0x06, 0xda, 0x9d,
+0x35, 0x03, 0x85, 0xc6, 0x94, 0xfa, 0x3f, 0x88,
+0x72, 0xa5, 0x7c, 0x40, 0x25, 0x01, 0x08, 0xc2,
+0xe8, 0x1e, 0x60, 0x33, 0x70, 0x56, 0x81, 0xe6,
+0xef, 0x80, 0x55, 0xce, 0x9a, 0x43, 0xe5, 0x06,
+0x30, 0x29, 0xb6, 0xa0, 0x20, 0x8c, 0x36, 0x02,
+0xdb, 0x52, 0xcc, 0x07, 0xb8, 0x18, 0x38, 0x18,
+0x84, 0xd1, 0xdd, 0xe5, 0xfe, 0x6c, 0x35, 0xbf,
+0x02, 0x82, 0x30, 0x6a, 0x01, 0xde, 0x1f, 0xc3,
+0x90, 0x7b, 0x9d, 0x35, 0xaf, 0x6b, 0x05, 0x14,
+0xc7, 0xfc, 0x1c, 0xf0, 0x62, 0xe2, 0xe5, 0xcf,
+0x81, 0x9b, 0x81, 0xd5, 0xc0, 0x0f, 0x89, 0xb6,
+0x3f, 0x80, 0xaf, 0x15, 0x05, 0x15, 0xc7, 0xfc,
+0x05, 0xc0, 0x22, 0xe0, 0xf2, 0xbc, 0x97, 0x8f,
+0x01, 0x4d, 0xce, 0x9a, 0xdd, 0xc0, 0x57, 0xfe,
+0x20, 0xce, 0x37, 0xbf, 0xc5, 0x59, 0xd3, 0x59,
+0x33, 0x51, 0xd0, 0x69, 0x34, 0x7f, 0x39, 0xf0,
+0x26, 0xf0, 0x41, 0xa2, 0xe9, 0x90, 0xb3, 0xa6,
+0x2f, 0x08, 0xa3, 0xc5, 0x40, 0x07, 0x30, 0x2b,
+0x69, 0x7e, 0x10, 0x46, 0x06, 0x38, 0x0f, 0x78,
+0xc1, 0x59, 0xd3, 0xa7, 0x33, 0x60, 0xec, 0xe6,
+0x2f, 0x04, 0x3e, 0x05, 0xa6, 0x16, 0x68, 0x3e,
+0x06, 0xac, 0x00, 0xf6, 0xe5, 0x99, 0xff, 0x2b,
+0x70, 0xa3, 0xb3, 0xa6, 0x2b, 0x08, 0xa3, 0xf9,
+0x7e, 0x65, 0xcc, 0x04, 0x8e, 0x03, 0x1b, 0x4f,
+0x74, 0xae, 0xdb, 0xaa, 0x2d, 0x68, 0x6c, 0xba,
+0x2f, 0xc5, 0x7c, 0x80, 0xf9, 0x40, 0x67, 0xc2,
+0xfc, 0x25, 0xde, 0xfc, 0x33, 0x81, 0x9d, 0xde,
+0x7c, 0x80, 0x39, 0x40, 0xb3, 0xb6, 0xa0, 0xec,
+0x7f, 0xf9, 0xf3, 0x80, 0x1e, 0xe0, 0xea, 0x8c,
+0x43, 0x86, 0xcd, 0xef, 0x0e, 0xc2, 0x68, 0x86,
+0x37, 0xff, 0xfa, 0xbc, 0xf6, 0x41, 0xe0, 0x09,
+0x6d, 0x41, 0xd9, 0xcc, 0xbf, 0x14, 0x38, 0x08,
+0x74, 0x03, 0x0d, 0xc0, 0x42, 0xdf, 0xf4, 0x05,
+0xd0, 0x06, 0xec, 0x2d, 0x30, 0xec, 0x67, 0xe0,
+0x2d, 0xe0, 0x2f, 0xe0, 0x0e, 0x60, 0x41, 0xa2,
+0xfd, 0x71, 0x67, 0xcd, 0x53, 0x0a, 0x43, 0xb3,
+0x9b, 0x7f, 0x3e, 0xb0, 0x2c, 0xcf, 0x7c, 0x80,
+0x57, 0x9c, 0x35, 0xfb, 0x80, 0x4d, 0x05, 0x86,
+0xce, 0x03, 0x1e, 0x06, 0x1e, 0x2b, 0x60, 0xfe,
+0x2e, 0xe0, 0x69, 0x85, 0xa1, 0xd9, 0x6a, 0x3b,
+0xc3, 0xe6, 0x17, 0xd2, 0xb9, 0xfe, 0xe7, 0x43,
+0xfe, 0xaf, 0x3d, 0x8b, 0xde, 0x05, 0x56, 0x3a,
+0x6b, 0xfe, 0x16, 0x80, 0xd1, 0xd5, 0x33, 0x4a,
+0xe2, 0x74, 0x57, 0x10, 0x46, 0xd3, 0x9c, 0x35,
+0x83, 0xce, 0x9a, 0x35, 0xc0, 0x5a, 0xe0, 0xf7,
+0x94, 0xbe, 0xbf, 0x01, 0xeb, 0x81, 0xdb, 0x9c,
+0x35, 0xa7, 0x54, 0x8a, 0xc8, 0xbe, 0x0a, 0xa6,
+0x03, 0xfb, 0x81, 0x30, 0xa5, 0xcb, 0x66, 0x67,
+0xcd, 0xfa, 0xbc, 0xfe, 0x73, 0xfc, 0x56, 0x15,
+0x02, 0x73, 0x3d, 0xc4, 0x8f, 0x81, 0x9d, 0xce,
+0x9a, 0x13, 0xc9, 0xc1, 0xaa, 0x86, 0xfe, 0xdf,
+0xf0, 0x2b, 0x81, 0x75, 0xc4, 0x25, 0xe5, 0xe9,
+0xc0, 0xf7, 0xc0, 0x87, 0xc0, 0x52, 0xe0, 0xaa,
+0x94, 0x61, 0xad, 0xce, 0x9a, 0x4d, 0xe3, 0x79,
+0x9e, 0x00, 0xfc, 0xd7, 0xfc, 0x47, 0x81, 0x27,
+0x81, 0xba, 0x02, 0xcd, 0x03, 0xc0, 0xb4, 0x11,
+0x86, 0x6f, 0x70, 0xd6, 0x3c, 0x27, 0x00, 0xe3,
+0x37, 0x7f, 0xab, 0x4f, 0xb2, 0x26, 0xa2, 0x31,
+0x43, 0x10, 0x80, 0xd8, 0xfc, 0x95, 0x40, 0x7b,
+0x91, 0x3e, 0xd6, 0x98, 0x20, 0x4c, 0xfa, 0x3c,
+0x20, 0x08, 0xa3, 0x29, 0xc0, 0x33, 0x89, 0x97,
+0x3f, 0x02, 0x96, 0x00, 0xb7, 0x03, 0x47, 0x13,
+0x6d, 0xc7, 0x81, 0x6b, 0x00, 0x9b, 0xf2, 0x96,
+0x0f, 0x04, 0x61, 0x34, 0xbb, 0x52, 0xe6, 0x57,
+0x0d, 0x61, 0xe8, 0xb5, 0x89, 0x44, 0xe9, 0x08,
+0x70, 0x83, 0xb3, 0xe6, 0x00, 0x70, 0x92, 0xb8,
+0x72, 0x99, 0x6f, 0x7e, 0xb3, 0xb3, 0xa6, 0x1b,
+0x68, 0x29, 0x00, 0xe1, 0x28, 0x71, 0x39, 0xfa,
+0x97, 0x4a, 0x99, 0x5c, 0x35, 0xd4, 0x82, 0x2e,
+0x49, 0xfc, 0xde, 0xe5, 0xac, 0xe9, 0x0f, 0xc2,
+0x68, 0x29, 0xf1, 0x85, 0xfa, 0xd4, 0x84, 0xf9,
+0x5f, 0x06, 0x61, 0xd4, 0x46, 0x5c, 0x54, 0x5b,
+0x01, 0xbc, 0xed, 0x43, 0xce, 0x61, 0xf3, 0xbf,
+0xa9, 0xa4, 0xc9, 0x55, 0x63, 0x22, 0xd6, 0x14,
+0x84, 0xd1, 0x2d, 0x23, 0x98, 0x7f, 0x19, 0xb0,
+0x01, 0x68, 0x05, 0x0e, 0x03, 0x07, 0x80, 0x1d,
+0x95, 0x68, 0x7e, 0x59, 0x0f, 0xe1, 0x20, 0x8c,
+0xce, 0x01, 0x1e, 0x01, 0xda, 0x46, 0xca, 0x34,
+0x83, 0x30, 0xba, 0x10, 0xb8, 0x0e, 0x38, 0xe5,
+0xb7, 0x90, 0x0b, 0x80, 0xcf, 0x46, 0x78, 0x4c,
+0xbe, 0xf9, 0x33, 0xfc, 0xf9, 0x90, 0x9f, 0x0f,
+0x6c, 0x77, 0xd6, 0xac, 0x1e, 0xef, 0x1c, 0x4a,
+0x7d, 0x08, 0x97, 0x65, 0x0b, 0xf2, 0xe6, 0x77,
+0x00, 0x8d, 0x40, 0x63, 0x10, 0x46, 0x37, 0x39,
+0x6b, 0xfa, 0x13, 0x7d, 0xea, 0xfc, 0x61, 0xdb,
+0x9a, 0x17, 0xe7, 0x0f, 0x00, 0x2f, 0xfb, 0x72,
+0x43, 0xc3, 0x28, 0xe6, 0xd7, 0x03, 0x7b, 0x12,
+0xe6, 0xff, 0xe9, 0xf3, 0x86, 0x8a, 0x55, 0xc9,
+0x57, 0x40, 0xc2, 0xfc, 0x61, 0x59, 0xe2, 0x2b,
+0xc0, 0x7e, 0x6f, 0x7e, 0x0e, 0x78, 0x07, 0xb8,
+0x35, 0xe5, 0xad, 0x06, 0x53, 0x92, 0xaf, 0x5e,
+0xe2, 0x3a, 0xfe, 0x90, 0xdf, 0xef, 0xeb, 0x13,
+0xed, 0x6b, 0x9d, 0x35, 0xaf, 0x4e, 0x64, 0x0e,
+0x55, 0x9d, 0x07, 0xd4, 0x37, 0x6f, 0xa9, 0x03,
+0xba, 0x80, 0xc5, 0x05, 0x9a, 0xff, 0x85, 0x10,
+0x84, 0xd1, 0x32, 0xe0, 0xbd, 0x22, 0x3f, 0x7e,
+0x9b, 0xb3, 0x66, 0xa2, 0x89, 0x5b, 0x75, 0xe7,
+0x01, 0xce, 0x9a, 0x41, 0x60, 0x7b, 0x4a, 0x73,
+0x08, 0xec, 0xf7, 0xc5, 0xb4, 0xe5, 0x45, 0x7e,
+0xf4, 0x6b, 0xc4, 0x95, 0xcf, 0x8a, 0x57, 0x59,
+0x0e, 0xe1, 0x20, 0x8c, 0xee, 0x04, 0xde, 0x48,
+0x01, 0x6e, 0x89, 0xeb, 0xf9, 0x0d, 0x45, 0x78,
+0x64, 0x2f, 0xf0, 0xa0, 0xb3, 0xa6, 0x58, 0x59,
+0x73, 0xed, 0x94, 0x22, 0xfc, 0x57, 0x45, 0xda,
+0x33, 0xac, 0xba, 0x97, 0x80, 0xe7, 0x81, 0x35,
+0xc0, 0xb3, 0x29, 0xfd, 0x7f, 0x04, 0xb6, 0x00,
+0x57, 0x10, 0x5f, 0x9e, 0xf7, 0xf8, 0xe8, 0x67,
+0x8f, 0xb3, 0xe6, 0x64, 0x31, 0xe7, 0x50, 0x53,
+0xb5, 0xa0, 0x0c, 0x10, 0xfa, 0x80, 0x60, 0xf8,
+0x36, 0x6a, 0x94, 0xfe, 0x87, 0x7d, 0x04, 0xd4,
+0x5b, 0x4a, 0x83, 0x6a, 0xaa, 0x16, 0xe4, 0xac,
+0xd9, 0x01, 0xac, 0x02, 0xd2, 0xae, 0xfb, 0x66,
+0x11, 0x7f, 0x51, 0x36, 0x4b, 0xff, 0x85, 0x40,
+0x67, 0x10, 0x46, 0x73, 0xa9, 0x62, 0x95, 0x3d,
+0x13, 0x1e, 0xc5, 0xd4, 0x1c, 0xb0, 0xcb, 0x87,
+0xae, 0x59, 0xfa, 0x9f, 0xcd, 0xc8, 0x77, 0x00,
+0x02, 0x30, 0x0e, 0x08, 0x8b, 0x80, 0x8e, 0x0c,
+0x10, 0x8e, 0xf8, 0xf2, 0xc2, 0x4f, 0x02, 0x50,
+0x7c, 0x08, 0x8d, 0x1e, 0x42, 0x7d, 0x4a, 0xff,
+0x9a, 0x30, 0xbf, 0xec, 0x87, 0x70, 0x4a, 0x99,
+0x62, 0x4c, 0x07, 0xad, 0x4f, 0xda, 0x3e, 0x29,
+0x97, 0xf9, 0x93, 0xe2, 0x46, 0xac, 0x12, 0xa2,
+0x9d, 0x49, 0x11, 0x05, 0x8d, 0x73, 0x3b, 0xaa,
+0x89, 0x68, 0xa7, 0xa2, 0x57, 0x40, 0xde, 0x4a,
+0x98, 0x49, 0xe1, 0xa2, 0x1b, 0x40, 0x7f, 0x39,
+0xbf, 0x30, 0x55, 0x13, 0x5b, 0x90, 0x54, 0x25,
+0x5b, 0x90, 0x00, 0x48, 0x02, 0x20, 0x00, 0x92,
+0x00, 0x08, 0x80, 0x24, 0x00, 0x02, 0x20, 0x09,
+0x80, 0x00, 0x48, 0x02, 0x20, 0x00, 0x92, 0x00,
+0x08, 0x80, 0x24, 0x00, 0x02, 0x20, 0x09, 0x80,
+0x00, 0x48, 0x02, 0x20, 0x00, 0x92, 0x00, 0x08,
+0x80, 0x54, 0x74, 0xfd, 0x33, 0x00, 0xac, 0x57,
+0xf9, 0x90, 0x3b, 0x12, 0x4b, 0x91, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_64px[4455] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x3e, 0x61,
+0xcb, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x06,
+0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9c, 0x7b, 0x88, 0x54, 0x55, 0x1c, 0xc7, 0x3f,
+0x9b, 0x9a, 0x89, 0xa5, 0x78, 0xd5, 0x12, 0xcd,
+0x8d, 0x74, 0xc9, 0x08, 0xc4, 0xf2, 0x49, 0x99,
+0xe4, 0x5d, 0xc5, 0x07, 0x24, 0x96, 0x46, 0x96,
+0xa9, 0xf4, 0x8f, 0x19, 0x5b, 0x72, 0x90, 0x10,
+0x93, 0x5e, 0x04, 0x45, 0xf6, 0x80, 0xbc, 0x52,
+0x12, 0x22, 0x41, 0x56, 0xd2, 0xe3, 0x0f, 0x89,
+0x1e, 0x96, 0xa5, 0x67, 0x4b, 0xac, 0x94, 0x20,
+0xa2, 0x87, 0x46, 0x6c, 0x49, 0x66, 0x82, 0xe8,
+0x09, 0xa1, 0x74, 0xb1, 0x7d, 0xf4, 0xc7, 0x9c,
+0xb1, 0x75, 0xbc, 0x33, 0x73, 0x67, 0x1d, 0x77,
+0xef, 0xcc, 0x7e, 0x3f, 0xff, 0xed, 0xcc, 0xb9,
+0x77, 0x66, 0xe7, 0xfb, 0xb9, 0xbf, 0xf3, 0x98,
+0x73, 0xa7, 0xa6, 0xbd, 0xbd, 0x1d, 0xd1, 0x73,
+0xb9, 0x48, 0x1f, 0x81, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04,
+0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0x84,
+0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01,
+0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21,
+0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00,
+0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48,
+0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0xd1, 0xad, 0xf4, 0xee,
+0xce, 0x17, 0xaf, 0xa9, 0xa9, 0xa9, 0xf8, 0x0f,
+0x30, 0x08, 0xa3, 0x01, 0xc0, 0x4c, 0x60, 0x0c,
+0x50, 0x03, 0x1c, 0x00, 0x1a, 0x9d, 0x35, 0x2e,
+0xc9, 0xf1, 0xdd, 0xfd, 0x63, 0xdd, 0x35, 0xdd,
+0xf9, 0x06, 0x2a, 0x59, 0x00, 0x1f, 0xfc, 0x93,
+0xc0, 0x0a, 0xa0, 0x5f, 0xce, 0xd3, 0xa7, 0x81,
+0xb7, 0x80, 0xc7, 0x9c, 0x35, 0xbf, 0x4b, 0x80,
+0x2a, 0x13, 0x20, 0x08, 0xa3, 0xf1, 0xc0, 0x36,
+0xa0, 0xb6, 0x48, 0xd3, 0x66, 0xc0, 0x38, 0x6b,
+0x36, 0x49, 0x80, 0x2a, 0x11, 0x20, 0x08, 0xa3,
+0x29, 0xc0, 0x0e, 0x60, 0x40, 0x09, 0x87, 0xbd,
+0x0a, 0xac, 0x70, 0xd6, 0xb4, 0x48, 0x80, 0x0a,
+0x16, 0x20, 0x08, 0xa3, 0x5a, 0xe0, 0x5b, 0x20,
+0xe8, 0xc4, 0xe1, 0xef, 0x03, 0x77, 0x38, 0x6b,
+0x4e, 0xa7, 0x49, 0x00, 0xcd, 0x02, 0x4a, 0x63,
+0x53, 0x81, 0xf0, 0x5b, 0x8a, 0x1c, 0x3b, 0x0f,
+0x58, 0xab, 0x69, 0x60, 0xe5, 0x0e, 0xfa, 0xa6,
+0x00, 0xb3, 0x63, 0x9e, 0xfa, 0x19, 0x98, 0xea,
+0xac, 0xe9, 0x03, 0x5c, 0x07, 0x7c, 0x5e, 0xa0,
+0x02, 0x3c, 0x27, 0x01, 0x2a, 0x2f, 0xf8, 0xec,
+0x67, 0xb4, 0x30, 0xe6, 0xe9, 0xe3, 0x40, 0xe8,
+0xac, 0xf9, 0xd2, 0xff, 0xfd, 0x2f, 0x50, 0x57,
+0xa0, 0xfc, 0x9f, 0x92, 0x00, 0x95, 0x15, 0xfe,
+0x50, 0x60, 0x67, 0x10, 0x46, 0xcb, 0x81, 0x49,
+0x31, 0x4d, 0x5e, 0x77, 0xd6, 0x1c, 0xf1, 0x6d,
+0xeb, 0x80, 0x46, 0x60, 0x44, 0xbe, 0xbe, 0x3f,
+0x08, 0xa3, 0xc9, 0x41, 0x18, 0x8d, 0x4a, 0xd3,
+0xff, 0xd8, 0x5b, 0x31, 0xe7, 0x0d, 0x3f, 0x00,
+0xbe, 0x00, 0xae, 0x05, 0x6e, 0x02, 0xfe, 0xc9,
+0x77, 0x01, 0x25, 0x0c, 0xbf, 0x2f, 0xb0, 0x15,
+0xa8, 0x0d, 0xc2, 0xe8, 0x25, 0xe0, 0x69, 0x67,
+0xcd, 0x71, 0x55, 0x80, 0xf4, 0xf2, 0xa2, 0x0f,
+0x1f, 0xe0, 0x62, 0x60, 0x50, 0x4c, 0x9b, 0x3b,
+0x83, 0x30, 0xba, 0xbe, 0x58, 0xf8, 0xfe, 0xef,
+0xd5, 0xc0, 0x68, 0xa0, 0x0f, 0xb0, 0x0a, 0x68,
+0x0a, 0xc2, 0x68, 0x95, 0x2a, 0x40, 0x3a, 0xaf,
+0xfe, 0x61, 0xc0, 0x3d, 0x09, 0x9a, 0x0e, 0x03,
+0xbe, 0x01, 0x7a, 0x15, 0x0a, 0x3f, 0x08, 0xa3,
+0xa9, 0xc0, 0x13, 0x39, 0x6d, 0x06, 0x02, 0xe3,
+0x54, 0x01, 0xd2, 0xc9, 0x8d, 0x31, 0xa1, 0xe6,
+0xa3, 0x58, 0xf8, 0x63, 0x81, 0xf7, 0x62, 0x2e,
+0xb6, 0x56, 0x60, 0x9d, 0x04, 0x48, 0xd7, 0x95,
+0xbf, 0x3c, 0x08, 0xa3, 0xab, 0x80, 0xe1, 0x31,
+0x4f, 0x9f, 0x02, 0x0e, 0x15, 0x39, 0x45, 0x63,
+0x4e, 0xf8, 0xf3, 0x81, 0xdd, 0xc0, 0xe0, 0x98,
+0xb6, 0x1b, 0x9c, 0x35, 0x07, 0xba, 0xfb, 0x7f,
+0xd6, 0x4a, 0xe0, 0xff, 0xe1, 0xaf, 0x03, 0xd6,
+0x00, 0x47, 0x81, 0xb7, 0x81, 0x95, 0x39, 0x4d,
+0x6e, 0xf3, 0x12, 0x7c, 0x52, 0xe0, 0x34, 0x2d,
+0xfe, 0xf9, 0x83, 0x7e, 0xe0, 0x78, 0x43, 0x9e,
+0x76, 0x3f, 0x00, 0x93, 0x9c, 0x35, 0xcd, 0x5a,
+0x0a, 0x4e, 0x57, 0xf8, 0xf9, 0x68, 0x72, 0xd6,
+0xd4, 0xf9, 0xb6, 0xeb, 0x01, 0x73, 0x1e, 0x2f,
+0x77, 0x18, 0xb8, 0xd9, 0x59, 0x73, 0x10, 0xb4,
+0x14, 0x5c, 0x09, 0xe1, 0x93, 0x33, 0x05, 0x7c,
+0xc8, 0x4f, 0xe7, 0x3a, 0xc3, 0x31, 0x60, 0x6e,
+0x36, 0xfc, 0x34, 0xd0, 0xa3, 0x2b, 0x40, 0x10,
+0x46, 0x73, 0x80, 0xed, 0x09, 0x9a, 0xb6, 0x02,
+0x23, 0x3b, 0x2c, 0xfa, 0xf4, 0x02, 0x36, 0x00,
+0x0d, 0x25, 0xbc, 0xdc, 0x2f, 0xc0, 0x7c, 0x67,
+0xcd, 0xfe, 0x8e, 0x0f, 0xaa, 0x02, 0x74, 0x23,
+0xce, 0x9a, 0x8f, 0x81, 0x67, 0x13, 0x8e, 0xf4,
+0xd7, 0x74, 0x38, 0xae, 0xd5, 0x59, 0xf3, 0x00,
+0xb0, 0x08, 0x38, 0x92, 0x40, 0x9e, 0x8d, 0xc0,
+0x84, 0xdc, 0xf0, 0x55, 0x01, 0x2a, 0x67, 0x0c,
+0x00, 0xd0, 0x0e, 0xd4, 0x3b, 0x6b, 0x1a, 0x73,
+0x8e, 0xed, 0x07, 0xdc, 0x0d, 0x2c, 0x00, 0x26,
+0xf8, 0xb5, 0x81, 0x93, 0xc0, 0x7e, 0xe0, 0x53,
+0x60, 0x93, 0xb3, 0xe6, 0xb7, 0xbc, 0x27, 0xd5,
+0x20, 0xb0, 0xcb, 0xc3, 0x1e, 0x41, 0xe6, 0x5b,
+0xbd, 0x31, 0x40, 0x9b, 0x2f, 0xcd, 0xbb, 0x80,
+0xfb, 0x13, 0x48, 0x70, 0x02, 0x98, 0xe6, 0xac,
+0xf9, 0xbe, 0x5c, 0xef, 0x47, 0x02, 0x74, 0x5d,
+0xf0, 0xc3, 0x81, 0x17, 0x7c, 0xd9, 0x8e, 0xeb,
+0xfa, 0x3e, 0x03, 0xfa, 0x02, 0xd3, 0x12, 0x8c,
+0xe2, 0x67, 0x3b, 0x6b, 0x7e, 0x94, 0x00, 0x15,
+0x22, 0x40, 0x10, 0x46, 0x33, 0x80, 0x77, 0xe8,
+0xdc, 0x4e, 0x9e, 0x7c, 0xa3, 0xf9, 0xfa, 0x72,
+0x54, 0x02, 0x0d, 0x02, 0x2f, 0x7c, 0xf8, 0xb7,
+0xfa, 0x91, 0x7e, 0x50, 0xc6, 0xd3, 0x0e, 0x01,
+0x76, 0xf9, 0x65, 0xde, 0x8a, 0xa6, 0xaa, 0x2b,
+0x80, 0x0f, 0x68, 0x2f, 0xe7, 0x6e, 0xdb, 0x26,
+0x2d, 0x95, 0x40, 0x15, 0xe0, 0xc2, 0x85, 0x5f,
+0x43, 0x66, 0x37, 0x6e, 0xbe, 0xf0, 0xff, 0x4a,
+0x70, 0x9a, 0xfd, 0xd5, 0x5e, 0x09, 0xaa, 0xb9,
+0x0b, 0x98, 0x0b, 0x4c, 0x8c, 0x79, 0xfc, 0x6b,
+0x60, 0x8c, 0xb3, 0x26, 0x00, 0x46, 0x01, 0x7b,
+0xf2, 0x1c, 0xbf, 0x15, 0x18, 0x9b, 0x60, 0x9d,
+0xa0, 0xbf, 0x17, 0xa1, 0x22, 0xa9, 0xe6, 0xfd,
+0x00, 0x77, 0xc5, 0x3c, 0x76, 0x10, 0x98, 0xe3,
+0xac, 0x39, 0xe1, 0xff, 0xbe, 0xdc, 0x87, 0x1c,
+0x17, 0xfe, 0x32, 0x67, 0x4d, 0x2b, 0xf0, 0x70,
+0x10, 0x46, 0x2d, 0xc0, 0x23, 0x31, 0xed, 0x4e,
+0x01, 0xb7, 0x3a, 0x6b, 0xac, 0x2a, 0x40, 0xfa,
+0x18, 0x1f, 0xf3, 0xd8, 0x6b, 0xd9, 0xf0, 0x0b,
+0xdc, 0xe0, 0x71, 0x26, 0xfc, 0x20, 0x8c, 0x66,
+0x05, 0x61, 0x74, 0x8d, 0xb3, 0xe6, 0x51, 0xce,
+0xdd, 0xd2, 0x9d, 0x0d, 0x7f, 0x57, 0x25, 0x7f,
+0x48, 0xd5, 0x2c, 0xc0, 0xa5, 0x31, 0x8f, 0xf5,
+0x29, 0x12, 0xfe, 0x2b, 0xc0, 0x12, 0x1f, 0xfe,
+0x40, 0xe0, 0x0d, 0xe0, 0xa7, 0x20, 0x8c, 0x5e,
+0xf6, 0xe3, 0x89, 0xb5, 0xd5, 0x14, 0x7e, 0xb5,
+0x0b, 0x10, 0xb7, 0xe1, 0x72, 0x69, 0x10, 0x46,
+0xf5, 0x05, 0xc2, 0x6f, 0x70, 0xd6, 0x64, 0x87,
+0xe5, 0x4f, 0x01, 0x43, 0xc9, 0x7c, 0x0f, 0xd0,
+0x00, 0x34, 0x91, 0xf9, 0xbe, 0x7f, 0x75, 0xb5,
+0x84, 0x9f, 0xba, 0x31, 0x80, 0x1f, 0xb9, 0xaf,
+0x04, 0x36, 0x3b, 0x6b, 0x4e, 0x96, 0x70, 0xdc,
+0x20, 0xe0, 0x0a, 0xe0, 0x68, 0x87, 0xdb, 0xb2,
+0xbf, 0x8b, 0xe9, 0x06, 0x46, 0x02, 0x3b, 0x63,
+0x4e, 0x71, 0x56, 0xf8, 0x7e, 0x27, 0xcf, 0x83,
+0x31, 0x15, 0x65, 0xa4, 0xb3, 0xc6, 0x54, 0xd3,
+0x55, 0x92, 0x9a, 0x75, 0x00, 0x1f, 0xfe, 0x46,
+0x32, 0x6b, 0xf2, 0xbb, 0x81, 0x79, 0x1d, 0x06,
+0x6b, 0xf9, 0x82, 0x1f, 0x47, 0xe6, 0x6e, 0x9b,
+0x99, 0x1d, 0xaa, 0xd9, 0x5e, 0xe0, 0x79, 0x5f,
+0xa6, 0x3f, 0x4c, 0xf0, 0x36, 0x72, 0xc3, 0x9f,
+0x0e, 0x7c, 0x14, 0x33, 0x7d, 0x6c, 0x06, 0xea,
+0x9c, 0x35, 0x87, 0xcb, 0xf9, 0x19, 0x68, 0x29,
+0xf8, 0xdc, 0xf0, 0xb3, 0xec, 0x03, 0x66, 0xe5,
+0x93, 0x20, 0x08, 0xa3, 0x65, 0xc0, 0xe6, 0x6c,
+0xbf, 0x1e, 0xc3, 0x07, 0x64, 0x36, 0x77, 0x0e,
+0x2e, 0xf0, 0x16, 0xb6, 0x01, 0x0b, 0x9d, 0x35,
+0xed, 0xfe, 0x0e, 0xa0, 0xfb, 0xc8, 0x6c, 0x07,
+0xbf, 0x24, 0xa6, 0xed, 0x1a, 0x67, 0x4d, 0xd9,
+0x6f, 0xed, 0xea, 0xf1, 0x02, 0xf8, 0xcd, 0x15,
+0x9b, 0x81, 0x7b, 0x63, 0x9a, 0xc4, 0x4a, 0x10,
+0x84, 0xd1, 0x22, 0x32, 0x3f, 0xc0, 0x70, 0xbe,
+0xb4, 0x91, 0xb9, 0x97, 0xef, 0x4f, 0x32, 0x7b,
+0xf8, 0xae, 0xce, 0xd3, 0xae, 0x11, 0x98, 0xe1,
+0xac, 0x69, 0x93, 0x00, 0x65, 0x64, 0x70, 0xfd,
+0x86, 0x5e, 0xc0, 0x16, 0x60, 0x71, 0x81, 0x66,
+0x67, 0x49, 0x10, 0x84, 0xd1, 0x10, 0xe0, 0x57,
+0xe0, 0xb2, 0x2e, 0x7a, 0x9b, 0x07, 0xc8, 0x7c,
+0x05, 0x7c, 0xec, 0x42, 0x9c, 0x5c, 0x4b, 0xc1,
+0xc5, 0x99, 0x0c, 0xec, 0xf0, 0xd3, 0x32, 0x80,
+0x25, 0x5d, 0x18, 0xfe, 0x41, 0x2f, 0xdf, 0x31,
+0xaa, 0x94, 0xb4, 0x74, 0x01, 0xc5, 0xaa, 0xc0,
+0x99, 0x4a, 0xe0, 0xc7, 0x0a, 0x8b, 0xbb, 0xe0,
+0xed, 0xed, 0x03, 0x16, 0x94, 0x7b, 0xd0, 0xa7,
+0x0a, 0x90, 0x83, 0x5f, 0x6e, 0x5d, 0x46, 0xf1,
+0x9d, 0xb6, 0x93, 0xfd, 0xfc, 0x7d, 0xf8, 0x79,
+0xbe, 0x64, 0xb1, 0x5b, 0xb4, 0x4f, 0x02, 0x8f,
+0x93, 0xd9, 0xba, 0x7d, 0x98, 0x2a, 0x27, 0x4d,
+0xd3, 0xc0, 0xa4, 0x95, 0x20, 0x97, 0x3d, 0x5e,
+0xa0, 0x16, 0x60, 0x3d, 0x70, 0x7b, 0x91, 0xf6,
+0x87, 0xc8, 0xec, 0xe8, 0x9d, 0x48, 0x66, 0x0f,
+0xdf, 0x50, 0xe0, 0x6f, 0x32, 0xdf, 0xfc, 0x6d,
+0x07, 0xb6, 0x74, 0x65, 0xc9, 0xd7, 0x34, 0xf0,
+0xec, 0xd1, 0x7d, 0xa9, 0x12, 0x9c, 0x02, 0x6a,
+0xb3, 0x81, 0xe5, 0x99, 0x4e, 0xc6, 0xd1, 0x04,
+0x4c, 0x77, 0xd6, 0xfc, 0xd1, 0xdd, 0x57, 0xa0,
+0x06, 0x81, 0x9d, 0xeb, 0x0e, 0xb2, 0x1c, 0xee,
+0x78, 0xb5, 0xfa, 0xc5, 0x9c, 0x06, 0xbf, 0xb8,
+0x53, 0x88, 0xd1, 0x40, 0x63, 0x10, 0x46, 0x57,
+0xd2, 0xc3, 0x49, 0xdd, 0x2c, 0xc0, 0x4b, 0xb0,
+0x34, 0x41, 0x88, 0x00, 0x75, 0xfe, 0x37, 0xfb,
+0xe8, 0xa4, 0x04, 0x5f, 0xf9, 0x1f, 0x77, 0x90,
+0x00, 0x29, 0x93, 0xa0, 0x2d, 0x61, 0x88, 0x00,
+0xef, 0xe6, 0x5e, 0xc9, 0x25, 0x48, 0xd0, 0x9f,
+0xf2, 0xee, 0x15, 0x94, 0x00, 0x65, 0x94, 0x20,
+0x69, 0x88, 0xa3, 0xe2, 0xca, 0x79, 0x82, 0xe3,
+0x8f, 0x01, 0xb7, 0x38, 0x6b, 0xf6, 0x49, 0x80,
+0xca, 0x97, 0x60, 0x74, 0x89, 0x12, 0x94, 0x6d,
+0x5b, 0xb7, 0x04, 0xa8, 0x3c, 0x09, 0x14, 0x7e,
+0x5a, 0xa7, 0x81, 0x85, 0x38, 0xdf, 0x29, 0x9e,
+0x3f, 0xfe, 0x19, 0xe0, 0xcd, 0x34, 0x85, 0xaf,
+0x75, 0x80, 0x12, 0x28, 0x51, 0x82, 0xd0, 0x59,
+0x73, 0x28, 0xed, 0x57, 0xa0, 0xd6, 0x01, 0x2e,
+0x5c, 0x77, 0xd0, 0xe3, 0xa7, 0x78, 0x55, 0x27,
+0x40, 0x89, 0x12, 0x8c, 0xf0, 0x63, 0x02, 0x49,
+0x50, 0x2d, 0x5d, 0x40, 0x4c, 0x77, 0x30, 0x30,
+0x41, 0xd3, 0x66, 0x67, 0x4d, 0xb3, 0xba, 0x80,
+0x14, 0x0a, 0x20, 0xd4, 0x05, 0x08, 0x09, 0x20,
+0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09,
+0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08,
+0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02,
+0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80,
+0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x92,
+0xf2, 0xdf, 0x00, 0x13, 0x6e, 0xb4, 0xce, 0x04,
+0xe4, 0x5d, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49,
+0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_16px[3066] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a,
+0xf4, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0x25, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x97, 0xb1, 0x4a, 0x04, 0x31, 0x14, 0x45, 0xdf,
+0x8c, 0x62, 0x61, 0xb1, 0x6b, 0x65, 0xa5, 0xd8,
+0xd8, 0x5a, 0x09, 0x0a, 0x0a, 0xcb, 0x62, 0x2f,
+0xd8, 0x09, 0xf6, 0xfe, 0x86, 0xb5, 0xe0, 0x07,
+0xf8, 0x05, 0x62, 0xb3, 0x58, 0x88, 0x3f, 0xe0,
+0x76, 0xfe, 0x83, 0x62, 0x23, 0x16, 0x5a, 0xac,
+0x36, 0x76, 0xe7, 0x3e, 0x9b, 0x09, 0x84, 0x30,
+0x3a, 0xee, 0x38, 0xb0, 0x88, 0x09, 0xdc, 0x22,
+0x2f, 0x21, 0x39, 0x79, 0x37, 0x0f, 0x92, 0xc2,
+0xdd, 0x6d, 0x96, 0xad, 0xb4, 0x19, 0xb7, 0x0c,
+0x90, 0x01, 0x32, 0x40, 0x06, 0xc8, 0x00, 0x7f,
+0x03, 0xc0, 0xa5, 0xa1, 0x4b, 0xfd, 0x9a, 0x78,
+0xcf, 0xa5, 0x81, 0x4b, 0x6b, 0xad, 0x09, 0xdc,
+0xfd, 0x5b, 0x09, 0xf6, 0x04, 0x1f, 0x82, 0x3b,
+0x41, 0x3f, 0x8a, 0x0f, 0x05, 0xaf, 0x02, 0x17,
+0x48, 0x70, 0x2e, 0x58, 0x68, 0x5a, 0x2f, 0x55,
+0xd3, 0xe6, 0xbb, 0xd5, 0xe6, 0x5e, 0xe9, 0x56,
+0xb0, 0x28, 0x58, 0x16, 0x4c, 0xa2, 0x78, 0xd0,
+0xf5, 0xb4, 0x10, 0x4d, 0x16, 0x3c, 0x98, 0xd9,
+0x73, 0xd4, 0x1f, 0x98, 0xd9, 0x8d, 0x99, 0x1d,
+0x9a, 0xd9, 0x52, 0xcd, 0xfc, 0x7d, 0x33, 0x1b,
+0xb9, 0x34, 0xdf, 0xa5, 0x05, 0x2b, 0x82, 0xfb,
+0xe4, 0xa4, 0x21, 0x2b, 0x8f, 0x82, 0x13, 0xc1,
+0x5b, 0x32, 0x7e, 0x21, 0x98, 0xfb, 0xb5, 0x05,
+0x11, 0xc4, 0xaa, 0xe0, 0xa9, 0x26, 0xe5, 0xc7,
+0xd5, 0xf8, 0xa6, 0xe0, 0xbd, 0x0d, 0xc4, 0x8f,
+0xbd, 0x12, 0xac, 0xd7, 0x40, 0x8c, 0x83, 0xe7,
+0x82, 0xed, 0x1a, 0x88, 0x83, 0xce, 0x00, 0x22,
+0x88, 0x97, 0xaf, 0x2e, 0x9e, 0x60, 0x27, 0xb2,
+0xe7, 0xb4, 0x33, 0x0b, 0x12, 0x88, 0x8d, 0xa8,
+0xfc, 0x82, 0x2e, 0x43, 0xba, 0xab, 0xb2, 0x3d,
+0xeb, 0xa4, 0x0c, 0x1b, 0x20, 0x26, 0x6d, 0x2f,
+0x5e, 0xac, 0xa2, 0xed, 0xb3, 0xdc, 0xa5, 0x2d,
+0x33, 0x3b, 0x4a, 0xc2, 0x57, 0x45, 0x59, 0x8e,
+0xa7, 0x59, 0xa7, 0xc8, 0xff, 0x82, 0x0c, 0x90,
+0x01, 0xfe, 0x3d, 0xc0, 0xe7, 0x00, 0xd8, 0xf7,
+0x60, 0xce, 0x4d, 0x78, 0xb9, 0xef, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_32px[3475] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71,
+0xde, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x02,
+0xbe, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x99, 0x4f, 0x88, 0x4d, 0x71, 0x14, 0xc7, 0x3f,
+0x6f, 0x64, 0x98, 0x99, 0x26, 0x4d, 0xcd, 0x34,
+0x8a, 0x11, 0x76, 0x16, 0x63, 0xac, 0x64, 0x23,
+0x25, 0x4d, 0x9a, 0x28, 0x65, 0xa3, 0x34, 0x65,
+0xc1, 0x86, 0x8d, 0x94, 0x2c, 0xb0, 0xb1, 0x62,
+0x23, 0x51, 0xa3, 0x2c, 0x10, 0x66, 0xca, 0x42,
+0x09, 0x85, 0xd2, 0x8c, 0x05, 0x8a, 0xb2, 0x60,
+0xca, 0xbf, 0xcd, 0x4c, 0x31, 0x83, 0x86, 0xf4,
+0x30, 0x53, 0x5e, 0xf8, 0x5a, 0x38, 0xb7, 0x7e,
+0xdd, 0x9e, 0x19, 0xd3, 0xdc, 0x7b, 0xdf, 0x9d,
+0x79, 0xe7, 0x5b, 0xaf, 0xd7, 0xef, 0x9c, 0xdb,
+0xbb, 0xf7, 0x7c, 0x7e, 0x7f, 0xce, 0x39, 0xf7,
+0x15, 0x24, 0x51, 0xcd, 0xaa, 0xa1, 0xca, 0xe5,
+0x00, 0x1c, 0x80, 0x03, 0x70, 0x00, 0x0e, 0xc0,
+0x01, 0x38, 0x00, 0x07, 0xe0, 0x00, 0x1c, 0x80,
+0x03, 0x70, 0x00, 0x0e, 0xc0, 0x01, 0x38, 0x00,
+0x07, 0xe0, 0x00, 0x1c, 0x80, 0x03, 0x70, 0x00,
+0x79, 0xd3, 0x62, 0x60, 0x03, 0xb0, 0xb4, 0xda,
+0x00, 0x34, 0x02, 0x97, 0x81, 0x51, 0xe0, 0x3e,
+0xf0, 0x16, 0xb8, 0x05, 0xb4, 0x25, 0x79, 0x93,
+0x42, 0x4e, 0xff, 0x17, 0xa8, 0x03, 0xfa, 0x81,
+0x75, 0x65, 0x7c, 0x63, 0xc0, 0x26, 0xe0, 0xf9,
+0x5c, 0x5e, 0x01, 0x07, 0x83, 0xe0, 0x9f, 0x02,
+0x67, 0x80, 0x71, 0x1b, 0xb7, 0x00, 0x7b, 0xe7,
+0xea, 0x16, 0xa8, 0x05, 0xb6, 0x01, 0x3b, 0x6c,
+0xfc, 0x1e, 0x58, 0x0f, 0xdc, 0x33, 0x1f, 0x40,
+0x1f, 0x70, 0x18, 0x68, 0x48, 0xe4, 0x8e, 0x92,
+0xf2, 0xf4, 0xe9, 0xd5, 0x5f, 0xfd, 0xb6, 0xef,
+0x11, 0x49, 0xdb, 0x25, 0x95, 0x6c, 0xdc, 0x2b,
+0x69, 0x9e, 0xa4, 0x0b, 0x92, 0x46, 0x25, 0xed,
+0x9e, 0xe9, 0x3d, 0xf3, 0x14, 0x7c, 0x9b, 0x26,
+0x57, 0x14, 0x7c, 0x77, 0x60, 0xbb, 0x33, 0xd3,
+0xfb, 0xe6, 0x65, 0x0b, 0x1c, 0x03, 0xf6, 0x07,
+0xe3, 0xbe, 0x98, 0x7f, 0x1c, 0xb8, 0x0b, 0x9c,
+0x02, 0x2e, 0x99, 0xed, 0x07, 0x70, 0x60, 0x2e,
+0x6c, 0x81, 0xe3, 0xb1, 0x99, 0x2e, 0x9a, 0xfd,
+0xf4, 0x24, 0xab, 0xe1, 0x97, 0x6d, 0x0d, 0x66,
+0xfb, 0x16, 0x68, 0x96, 0xf4, 0xae, 0x4c, 0x80,
+0x1d, 0x92, 0x0a, 0x92, 0x8e, 0x06, 0xfb, 0x3f,
+0xd2, 0xa8, 0xa4, 0xce, 0xa4, 0x9e, 0xa1, 0x92,
+0x75, 0xc0, 0x4a, 0x60, 0x39, 0xb0, 0x10, 0x38,
+0x07, 0x2c, 0x09, 0x7c, 0xcf, 0xac, 0xfa, 0x2b,
+0x5a, 0x05, 0xb8, 0xc5, 0xd2, 0xdf, 0x6b, 0x2b,
+0x86, 0x26, 0x66, 0x73, 0x21, 0xd4, 0x04, 0x9c,
+0xb7, 0x74, 0x17, 0xe9, 0x23, 0xd0, 0x1a, 0xbb,
+0xee, 0x11, 0xd0, 0x65, 0x10, 0x52, 0x53, 0xd6,
+0x00, 0x1a, 0x81, 0x07, 0xc0, 0xea, 0xff, 0xbc,
+0xfe, 0x09, 0xd0, 0x99, 0x26, 0x84, 0xac, 0xb3,
+0xc0, 0x91, 0x20, 0xf8, 0x87, 0xc0, 0xc9, 0xd8,
+0x72, 0xbe, 0x02, 0x8c, 0x04, 0xe3, 0xb5, 0x76,
+0xf2, 0xa7, 0xa7, 0x8c, 0x0f, 0xbd, 0x21, 0x3b,
+0xc8, 0x86, 0x24, 0xd5, 0x4a, 0xda, 0x69, 0x27,
+0xba, 0x24, 0x9d, 0x95, 0xd4, 0x22, 0x69, 0x4d,
+0x70, 0x30, 0x0e, 0x9a, 0x2d, 0xb5, 0x67, 0xca,
+0x1a, 0xc0, 0x67, 0x0b, 0x6c, 0x58, 0xd2, 0xae,
+0x58, 0xf0, 0x05, 0x49, 0x57, 0x25, 0x7d, 0x90,
+0x74, 0x42, 0xd2, 0xed, 0xb4, 0x83, 0x4f, 0x12,
+0x40, 0xbb, 0xa4, 0x1e, 0x9b, 0xd5, 0xd0, 0xbe,
+0x48, 0xd2, 0x21, 0xcb, 0xe9, 0x5b, 0x25, 0x0d,
+0x94, 0x49, 0x79, 0x51, 0xf0, 0xfb, 0x02, 0xdb,
+0xf5, 0xac, 0x26, 0x25, 0xa9, 0xe0, 0xc7, 0xec,
+0xc1, 0x6f, 0x04, 0x10, 0x5a, 0x25, 0xbd, 0x89,
+0x05, 0xfb, 0x25, 0x36, 0xfe, 0x2a, 0x69, 0x8f,
+0xd5, 0xf6, 0x91, 0xbe, 0x49, 0x5a, 0x31, 0x5b,
+0x00, 0xd4, 0x48, 0x7a, 0x11, 0x0b, 0x2a, 0x82,
+0x70, 0x51, 0xd3, 0x57, 0x49, 0xd2, 0xe6, 0x2c,
+0xb7, 0x65, 0x12, 0x69, 0xb0, 0xdd, 0x5e, 0x5e,
+0x34, 0x07, 0xb6, 0x9b, 0x40, 0x07, 0xb0, 0x6c,
+0x1a, 0xbf, 0x33, 0x0c, 0x74, 0x5b, 0x9a, 0xcc,
+0x4c, 0x49, 0xd5, 0x01, 0xe5, 0x20, 0x44, 0xea,
+0xb2, 0x66, 0xe6, 0x5a, 0xcc, 0xff, 0x0a, 0xe8,
+0xb1, 0xb7, 0x3f, 0x2f, 0xad, 0xd9, 0x29, 0x65,
+0x5e, 0x8f, 0x26, 0xb8, 0x9c, 0xc2, 0xb3, 0x20,
+0x5c, 0xd2, 0x4d, 0x93, 0xf8, 0xfb, 0x25, 0xd5,
+0x57, 0xb2, 0x1f, 0x49, 0xb2, 0x10, 0x1a, 0x04,
+0x36, 0x02, 0x9f, 0x02, 0xdb, 0x7c, 0x9b, 0xf9,
+0xfa, 0x7f, 0xf8, 0x1b, 0xec, 0x9a, 0xca, 0x29,
+0x05, 0xaa, 0x53, 0xcd, 0x74, 0xe4, 0x7f, 0x6c,
+0x69, 0xb2, 0xa2, 0x1d, 0x69, 0x5a, 0xbd, 0x40,
+0xb9, 0x33, 0x61, 0xc0, 0xba, 0xba, 0x09, 0x60,
+0x95, 0xbd, 0xee, 0x2e, 0x52, 0x61, 0xa5, 0xd9,
+0x0c, 0x4d, 0x05, 0x21, 0x17, 0x4a, 0xbb, 0x1b,
+0xac, 0x03, 0x16, 0xc4, 0x6c, 0xdf, 0x81, 0x9f,
+0xd5, 0x02, 0xc0, 0xff, 0x1b, 0x74, 0x00, 0x0e,
+0xc0, 0x01, 0x38, 0x00, 0x07, 0xe0, 0x00, 0x1c,
+0x80, 0x03, 0x70, 0x00, 0x0e, 0xc0, 0x01, 0x38,
+0x00, 0x07, 0x90, 0x43, 0xfd, 0x19, 0x00, 0xb2,
+0x95, 0x14, 0x60, 0x77, 0x8c, 0x0e, 0x76, 0x00,
+0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_24px[3266] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9,
+0x87, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0xed, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x99, 0x3d, 0x68, 0x14, 0x51, 0x10, 0x80, 0xbf,
+0x8b, 0xd1, 0x68, 0x12, 0x2c, 0x44, 0x1b, 0xbd,
+0x2a, 0xd8, 0x89, 0x45, 0x1a, 0x1b, 0x2d, 0xc4,
+0x4a, 0x10, 0xec, 0x62, 0xa5, 0x90, 0x22, 0xa4,
+0x15, 0xc4, 0x42, 0x6d, 0xd2, 0x46, 0x6b, 0x9b,
+0x14, 0x36, 0x62, 0x02, 0x8a, 0x22, 0xd8, 0x05,
+0x22, 0x16, 0x56, 0x5a, 0x28, 0x88, 0x08, 0x81,
+0x1c, 0x2a, 0x58, 0x18, 0x25, 0x85, 0x3f, 0xa8,
+0x91, 0x24, 0x9f, 0xcd, 0x0b, 0x2c, 0x9b, 0x4b,
+0x30, 0xeb, 0xee, 0x7a, 0x07, 0x33, 0xb0, 0xec,
+0xce, 0xc0, 0xbe, 0x99, 0x6f, 0x76, 0xde, 0xbc,
+0xb7, 0xbb, 0x0d, 0x95, 0x6e, 0x96, 0x1e, 0xba,
+0x5c, 0x02, 0x20, 0x00, 0x02, 0x20, 0x00, 0x02,
+0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x00,
+0x02, 0xa0, 0xeb, 0x00, 0xc6, 0x81, 0x05, 0x60,
+0x11, 0x98, 0x02, 0xf6, 0x15, 0x1e, 0x49, 0xad,
+0xfb, 0xb8, 0xea, 0x46, 0x59, 0x50, 0x9b, 0x45,
+0xc6, 0xab, 0xfb, 0x09, 0x1c, 0x04, 0x26, 0x80,
+0x15, 0x60, 0x04, 0xb8, 0x9d, 0xec, 0x3f, 0x81,
+0xe5, 0x4e, 0x2f, 0xa1, 0x71, 0xe0, 0x0d, 0xd0,
+0x07, 0x2c, 0x01, 0x03, 0xc0, 0x79, 0xe0, 0x05,
+0x70, 0x06, 0xb8, 0x0f, 0x8c, 0x76, 0x6a, 0x09,
+0xed, 0x56, 0x5b, 0x6d, 0x4a, 0xe7, 0x99, 0x7a,
+0x40, 0xbd, 0x9b, 0xf4, 0xb9, 0xed, 0x8e, 0x5d,
+0x47, 0xf0, 0x67, 0xd5, 0x8f, 0xea, 0x2f, 0xf5,
+0xb5, 0x3a, 0x91, 0x01, 0x78, 0xa7, 0xbe, 0x4d,
+0xd7, 0x4b, 0xea, 0xe1, 0x4e, 0x03, 0x18, 0x54,
+0x3f, 0x67, 0x02, 0x6e, 0xa9, 0xbd, 0xea, 0xa4,
+0xba, 0x9a, 0xb3, 0x0f, 0x17, 0xf1, 0xd1, 0xa8,
+0xf0, 0xbb, 0xd0, 0x31, 0xe0, 0x04, 0xb0, 0x1f,
+0xb8, 0x08, 0xf4, 0x27, 0xfb, 0x75, 0xe0, 0x0a,
+0x30, 0x04, 0x1c, 0x4f, 0xf3, 0xe1, 0x71, 0xd1,
+0x49, 0x5c, 0x55, 0xe6, 0x6f, 0xb8, 0xb5, 0x4c,
+0x96, 0xe5, 0xab, 0x8a, 0xe0, 0xcf, 0xa5, 0x20,
+0xbf, 0xab, 0x0f, 0xd4, 0xdf, 0x49, 0x7f, 0xa9,
+0x7e, 0xc9, 0x40, 0x8c, 0x95, 0xe1, 0xaf, 0x8a,
+0x36, 0x3a, 0x92, 0xce, 0x97, 0x81, 0x39, 0x60,
+0x27, 0xf0, 0x1c, 0x18, 0x03, 0x2e, 0x01, 0x5f,
+0x81, 0x27, 0xc0, 0x4c, 0x29, 0xde, 0x0a, 0x92,
+0x1f, 0x55, 0x77, 0xe4, 0x6c, 0x43, 0xea, 0x21,
+0xf5, 0x5e, 0xca, 0xf0, 0xab, 0x5c, 0xab, 0x7c,
+0x9a, 0x26, 0xee, 0x35, 0xb5, 0xff, 0x7f, 0x96,
+0xd0, 0x29, 0xf5, 0x87, 0x3a, 0x9d, 0x81, 0xb8,
+0x99, 0x82, 0x5d, 0x4b, 0xdb, 0x82, 0x75, 0x59,
+0x56, 0x2f, 0xa8, 0xb3, 0x99, 0x6e, 0x33, 0x50,
+0x66, 0xc9, 0x6e, 0xf7, 0x86, 0x9e, 0x4c, 0x66,
+0x4d, 0x10, 0xa7, 0xfd, 0x3b, 0x59, 0x54, 0x8f,
+0x94, 0x3d, 0xe7, 0x8a, 0xdc, 0xd4, 0xcc, 0x65,
+0x79, 0xbd, 0xcf, 0x3f, 0x54, 0xdf, 0x67, 0xec,
+0x2b, 0xa9, 0x7c, 0xe6, 0xd5, 0xa9, 0x54, 0x5e,
+0x74, 0x02, 0x40, 0x3b, 0x88, 0x35, 0x75, 0x6f,
+0x1b, 0xfb, 0x23, 0x75, 0x57, 0x95, 0x8b, 0x65,
+0xd1, 0x2e, 0xf4, 0x01, 0x38, 0x09, 0xb4, 0x92,
+0xde, 0x00, 0xee, 0x00, 0x9f, 0x72, 0xf6, 0x41,
+0xa0, 0xb7, 0xd2, 0x2d, 0xe2, 0x3f, 0x66, 0x60,
+0xb3, 0x8c, 0x37, 0xd5, 0x5b, 0x65, 0x76, 0x9b,
+0x2a, 0x17, 0xb2, 0xda, 0xcb, 0xa6, 0x8a, 0xbd,
+0x50, 0x1f, 0xb0, 0x27, 0xa3, 0x7f, 0x03, 0x56,
+0xeb, 0x78, 0xc9, 0x68, 0xc4, 0x4f, 0xbe, 0x00,
+0x08, 0x80, 0x00, 0x08, 0x80, 0x00, 0x08, 0x80,
+0x00, 0x28, 0x2e, 0x7f, 0x06, 0x00, 0x7e, 0x07,
+0xde, 0xa0, 0x65, 0x46, 0xd5, 0x06, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_48px[3908] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xe2, 0x98, 0x77,
+0x38, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x04,
+0x6f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9b, 0x5f, 0x8c, 0x5c, 0x53, 0x1c, 0xc7, 0x3f,
+0xdb, 0xad, 0x62, 0xd2, 0x76, 0xb1, 0xaa, 0x49,
+0x35, 0x52, 0xd4, 0x9f, 0xa4, 0x95, 0x34, 0x91,
+0x20, 0x24, 0x62, 0xfb, 0x20, 0x1e, 0x36, 0x12,
+0x1b, 0x84, 0xae, 0x8a, 0xfa, 0x93, 0x50, 0x4a,
+0x82, 0x48, 0xea, 0x85, 0x0a, 0xda, 0x86, 0x6a,
+0x22, 0x94, 0xc4, 0x4b, 0x49, 0x91, 0x4a, 0x79,
+0xe1, 0x05, 0x69, 0xb7, 0xa2, 0x15, 0x4b, 0x84,
+0x20, 0x11, 0x14, 0x29, 0x5d, 0x0f, 0x1d, 0xc4,
+0x16, 0xdd, 0xda, 0x18, 0x5f, 0x0f, 0xf3, 0x9b,
+0xf4, 0xf6, 0x66, 0xee, 0xce, 0x6c, 0x77, 0x76,
+0xf6, 0xce, 0xf8, 0x7e, 0x92, 0xc9, 0x66, 0xcf,
+0x39, 0xf7, 0xce, 0xdd, 0xdf, 0xe7, 0x9c, 0x7b,
+0xce, 0xf9, 0xdd, 0xbb, 0x1d, 0x92, 0x30, 0x53,
+0xc7, 0x34, 0x87, 0xc0, 0x02, 0x2c, 0xc0, 0x58,
+0x80, 0x05, 0x18, 0x0b, 0xb0, 0x00, 0x63, 0x01,
+0x16, 0x60, 0x2c, 0xc0, 0x02, 0x8c, 0x05, 0x58,
+0x80, 0xb1, 0x00, 0x0b, 0x30, 0x16, 0x60, 0x01,
+0xc6, 0x02, 0x2c, 0xc0, 0x58, 0x80, 0x05, 0x18,
+0x0b, 0xb0, 0x00, 0x63, 0x01, 0x16, 0x60, 0x2c,
+0xc0, 0x02, 0x8c, 0x05, 0x58, 0x80, 0xb1, 0x00,
+0x0b, 0x30, 0x16, 0x60, 0x01, 0xc6, 0x02, 0xc6,
+0xc3, 0x02, 0xe0, 0x09, 0xe0, 0x63, 0xe0, 0x5b,
+0xe0, 0x6d, 0xe0, 0x36, 0xe0, 0xd8, 0xa9, 0xba,
+0xa0, 0x8e, 0xff, 0xd1, 0xbf, 0x28, 0xdd, 0x0e,
+0x6c, 0x04, 0x8e, 0xab, 0x52, 0xf7, 0x03, 0x70,
+0x23, 0xb0, 0xcb, 0x23, 0x60, 0x72, 0x78, 0x18,
+0x78, 0x2e, 0x23, 0xf8, 0x00, 0xa7, 0x03, 0x3b,
+0x63, 0x34, 0x78, 0x04, 0x34, 0x98, 0x5e, 0xe0,
+0xcd, 0x71, 0xb4, 0xbf, 0x03, 0x78, 0xde, 0x23,
+0xa0, 0x41, 0x1d, 0x0c, 0x78, 0x32, 0x55, 0xf6,
+0x19, 0x70, 0x0d, 0x70, 0x13, 0xf0, 0x63, 0xaa,
+0x6e, 0x04, 0xf8, 0xa6, 0x99, 0x17, 0x38, 0xbd,
+0x8d, 0x83, 0x3f, 0x1f, 0x98, 0x0b, 0x9c, 0x93,
+0x28, 0xfb, 0x19, 0xb8, 0x0c, 0x18, 0x06, 0x2e,
+0x04, 0x4e, 0x48, 0x05, 0xbf, 0x17, 0xd8, 0xe1,
+0x39, 0x60, 0xe2, 0xf4, 0x03, 0xdf, 0xc7, 0xbd,
+0x3f, 0xc9, 0xae, 0x44, 0xf0, 0xdf, 0x01, 0x66,
+0x57, 0x09, 0xfe, 0x3d, 0xc0, 0x63, 0x40, 0x57,
+0x53, 0xae, 0x54, 0x52, 0xbb, 0x7d, 0x16, 0x4b,
+0x1a, 0x55, 0x75, 0x86, 0x24, 0xf5, 0x48, 0x1a,
+0x4e, 0x94, 0x0d, 0x4b, 0xba, 0x24, 0x8e, 0x9d,
+0x27, 0xe9, 0x40, 0x94, 0x17, 0x25, 0xdd, 0x39,
+0xd9, 0xd7, 0xdb, 0x8e, 0x23, 0x60, 0x25, 0x70,
+0x4c, 0x46, 0xdd, 0xbc, 0xe8, 0xe5, 0x95, 0x9e,
+0x7f, 0x00, 0xb8, 0x1c, 0xd8, 0x0d, 0xcc, 0x00,
+0x5e, 0x05, 0x66, 0x45, 0xdd, 0xc9, 0xc0, 0x52,
+0xdf, 0x82, 0xea, 0x67, 0x6e, 0x4c, 0xba, 0xe7,
+0xd7, 0xd9, 0xbe, 0x12, 0xfc, 0x41, 0x60, 0x26,
+0xf0, 0x3a, 0x70, 0x69, 0xa2, 0xbe, 0x04, 0xac,
+0xb1, 0x80, 0xfa, 0x58, 0x08, 0x7c, 0x02, 0x6c,
+0x03, 0x0a, 0x89, 0xf2, 0xcf, 0x81, 0xab, 0x32,
+0x8e, 0x19, 0x89, 0xba, 0x47, 0x81, 0xaf, 0x62,
+0x0e, 0x48, 0xb2, 0x26, 0x8e, 0xf7, 0x1c, 0x50,
+0xe3, 0xb3, 0x50, 0xd2, 0xbe, 0x8c, 0x7b, 0xfe,
+0xad, 0xd1, 0x66, 0x83, 0xc6, 0xc7, 0x56, 0x49,
+0xd3, 0x9a, 0x71, 0xfd, 0xad, 0x3e, 0x02, 0x16,
+0xc4, 0x0e, 0xf6, 0xd4, 0x8c, 0xfa, 0x13, 0xe3,
+0xe7, 0x03, 0xc0, 0xe6, 0x3a, 0xcf, 0xb9, 0x15,
+0x58, 0x0e, 0xfc, 0xeb, 0x65, 0x68, 0x6d, 0xf6,
+0xd7, 0xd8, 0x38, 0xdd, 0x12, 0x89, 0xb6, 0x12,
+0xb0, 0x02, 0x58, 0x05, 0xfc, 0x99, 0xd1, 0xf6,
+0x0f, 0xe0, 0x5e, 0xe0, 0x7a, 0x60, 0xd4, 0xa9,
+0x88, 0xfa, 0x29, 0x00, 0x6f, 0x01, 0x3d, 0x19,
+0xf5, 0x1b, 0x23, 0xb0, 0x24, 0x56, 0x37, 0x7d,
+0xd1, 0x7e, 0x4e, 0x48, 0xfc, 0x20, 0x56, 0x40,
+0xbf, 0x3a, 0x17, 0x54, 0x9b, 0x45, 0xc0, 0xdd,
+0xb1, 0xa3, 0x2d, 0x00, 0x7b, 0x81, 0xed, 0xc0,
+0x95, 0xc0, 0x92, 0x8c, 0x63, 0xee, 0x03, 0x9e,
+0xca, 0x65, 0xae, 0xa4, 0xc5, 0x04, 0x3c, 0x08,
+0x3c, 0x02, 0x74, 0x56, 0xa9, 0xfb, 0x9b, 0xb1,
+0xf3, 0xfa, 0xab, 0x81, 0x75, 0x16, 0x70, 0xf4,
+0x3c, 0x1b, 0x9b, 0xac, 0x89, 0x90, 0x3b, 0x09,
+0xad, 0x22, 0x60, 0x39, 0xf0, 0x52, 0x83, 0xce,
+0x95, 0x2b, 0x09, 0xad, 0xb0, 0x0a, 0x9a, 0x0e,
+0x3c, 0x9e, 0x2a, 0x7b, 0x3f, 0x76, 0xb1, 0xcb,
+0x80, 0xa1, 0x54, 0xdd, 0x2f, 0xc0, 0x45, 0xc0,
+0x40, 0xc6, 0xf9, 0xee, 0xe2, 0xc8, 0x2c, 0xa8,
+0x05, 0xd4, 0xe0, 0x62, 0xca, 0xa9, 0xe5, 0x0a,
+0xdf, 0x01, 0x57, 0x00, 0xef, 0x02, 0x7f, 0x01,
+0xa7, 0xa4, 0x82, 0xbf, 0x34, 0xd2, 0x0b, 0xbd,
+0x55, 0x24, 0x0c, 0xc5, 0xe4, 0xfd, 0x7b, 0x9e,
+0x7a, 0x57, 0xde, 0x39, 0x33, 0xf5, 0xfb, 0x6e,
+0xe0, 0x60, 0xac, 0x7a, 0xb6, 0x71, 0x38, 0xf1,
+0x56, 0x09, 0xfe, 0x17, 0xc0, 0x43, 0x94, 0x93,
+0x6a, 0x37, 0x00, 0x5b, 0x62, 0xc9, 0x59, 0x09,
+0xfe, 0x9e, 0x5c, 0xfd, 0x75, 0x2d, 0x90, 0x6a,
+0x58, 0x91, 0x4a, 0x13, 0xec, 0x95, 0x74, 0x6d,
+0x2a, 0xe5, 0x5c, 0x94, 0x74, 0x5e, 0xb4, 0x3f,
+0x4b, 0xd2, 0xa1, 0x28, 0xff, 0x4d, 0xd2, 0x6a,
+0x49, 0x5b, 0x22, 0x65, 0x91, 0xbb, 0xbf, 0xaf,
+0x99, 0x5f, 0xd6, 0x25, 0x69, 0xad, 0xa4, 0x19,
+0x35, 0xda, 0x9d, 0x26, 0x69, 0x99, 0xa4, 0xab,
+0x25, 0x75, 0x4b, 0x5a, 0x52, 0x23, 0x6f, 0x93,
+0x0c, 0xfe, 0x4c, 0x49, 0x9f, 0xa6, 0xea, 0x37,
+0xe7, 0xb9, 0x83, 0x35, 0x33, 0xf8, 0x83, 0x11,
+0x90, 0xed, 0x92, 0x0a, 0x55, 0xda, 0x74, 0x4a,
+0x5a, 0x2f, 0xe9, 0x9f, 0x44, 0xf0, 0x0e, 0x49,
+0x5a, 0x27, 0xe9, 0xeb, 0x3a, 0x82, 0xdf, 0x2d,
+0xe9, 0xbd, 0x54, 0xfd, 0x88, 0xa4, 0x33, 0xf2,
+0x2c, 0xa0, 0x19, 0xcb, 0xd0, 0x2e, 0xca, 0x8f,
+0xff, 0x2e, 0x48, 0x94, 0x0d, 0xc4, 0x24, 0x79,
+0xb0, 0xb2, 0x1c, 0x06, 0x5e, 0x01, 0xae, 0xcb,
+0x38, 0x47, 0x29, 0x63, 0xf3, 0x55, 0x8c, 0x14,
+0x82, 0xe2, 0x7e, 0xdf, 0x9d, 0xaa, 0x5f, 0x05,
+0x3c, 0x93, 0xeb, 0x19, 0x6e, 0x92, 0x0d, 0x77,
+0x4a, 0xfa, 0x30, 0xa3, 0xf7, 0xee, 0x48, 0x8c,
+0x84, 0x3e, 0x35, 0x9e, 0x4d, 0xad, 0x90, 0x4e,
+0x9f, 0xec, 0x65, 0x68, 0x09, 0x78, 0x31, 0xa3,
+0xae, 0x27, 0x92, 0x68, 0x05, 0xca, 0x0f, 0xd1,
+0x1b, 0xc9, 0xa6, 0xe8, 0xfd, 0xb9, 0xa7, 0x59,
+0x3b, 0xe1, 0x9b, 0x81, 0x17, 0x32, 0xf6, 0x1d,
+0x03, 0x94, 0xf3, 0xf9, 0x67, 0x37, 0xe0, 0x7b,
+0x8a, 0xc0, 0xfd, 0x0d, 0xdc, 0x35, 0xb7, 0x55,
+0x2a, 0xa2, 0x3f, 0x02, 0x53, 0x6b, 0xd4, 0x6d,
+0x00, 0xd6, 0x53, 0xce, 0xdf, 0xaf, 0xcd, 0x68,
+0xff, 0x13, 0xf0, 0x34, 0x70, 0x6e, 0xa4, 0x97,
+0xf7, 0xc7, 0xee, 0xf8, 0x8d, 0xd8, 0x9c, 0x61,
+0x01, 0x47, 0x27, 0x61, 0x18, 0x38, 0x89, 0xc3,
+0x4f, 0xa3, 0xc6, 0x6a, 0xff, 0x65, 0x6c, 0xbc,
+0x8a, 0xb4, 0x30, 0xcd, 0x4e, 0x45, 0xbc, 0x4c,
+0xf9, 0x2d, 0xe4, 0xac, 0xc7, 0x7d, 0xb3, 0x29,
+0xbf, 0x28, 0x5b, 0x4f, 0xfb, 0xc5, 0x94, 0x5f,
+0x31, 0x99, 0x63, 0x01, 0x8d, 0x93, 0xd0, 0x01,
+0xbc, 0xc6, 0x91, 0x6f, 0xa5, 0x8d, 0xd5, 0xfe,
+0x78, 0xa6, 0xf0, 0xdd, 0xfe, 0x56, 0x4f, 0x45,
+0xf4, 0x4b, 0x2a, 0x65, 0x2c, 0x21, 0x07, 0x63,
+0xf3, 0x36, 0x56, 0xfb, 0x3d, 0x92, 0xe6, 0xb7,
+0xfa, 0x5b, 0x1d, 0x53, 0x7d, 0x01, 0xb5, 0x24,
+0x74, 0x67, 0xb4, 0x6f, 0x8b, 0xe0, 0x37, 0x6b,
+0x27, 0x3c, 0x91, 0x89, 0xb9, 0xda, 0x44, 0xdb,
+0x07, 0x7c, 0x04, 0xec, 0xa3, 0x0d, 0xc8, 0xcb,
+0x13, 0xb1, 0xb6, 0x5f, 0xed, 0xe4, 0xfd, 0x81,
+0x4c, 0xdb, 0xaf, 0x76, 0xf2, 0x3e, 0x02, 0x2a,
+0xcc, 0xca, 0x48, 0xba, 0x11, 0x89, 0xbb, 0x51,
+0x0b, 0x30, 0x6d, 0x79, 0x0b, 0xb2, 0x00, 0x63,
+0x01, 0x16, 0x60, 0x2c, 0xc0, 0x02, 0x8c, 0x05,
+0x58, 0x80, 0xb1, 0x00, 0x0b, 0x30, 0x16, 0x60,
+0x01, 0xc6, 0x02, 0x2c, 0xc0, 0x58, 0x80, 0x05,
+0x18, 0x0b, 0xb0, 0x00, 0x63, 0x01, 0x16, 0x60,
+0x2c, 0xc0, 0x02, 0x4c, 0x63, 0xf9, 0x6f, 0x00,
+0xc5, 0x56, 0x3d, 0x4a, 0xf2, 0xbc, 0x47, 0xe8,
+0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
+0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_64px[4279] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x3e, 0x61,
+0xcb, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x05,
+0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9c, 0x6b, 0x88, 0x15, 0x65, 0x18, 0xc7, 0x7f,
+0x67, 0x37, 0x0b, 0xb3, 0x5a, 0xda, 0x34, 0x64,
+0xb7, 0x35, 0x2a, 0xc9, 0x08, 0x96, 0xca, 0xd4,
+0x28, 0x13, 0xd4, 0x22, 0x33, 0x0a, 0x2b, 0x03,
+0x2b, 0x4c, 0xfa, 0x22, 0x89, 0xdd, 0x88, 0x20,
+0x93, 0x2c, 0xe8, 0x43, 0x64, 0xd1, 0x87, 0xe8,
+0xa2, 0x22, 0x11, 0xac, 0xd5, 0xd2, 0x05, 0x94,
+0xf2, 0x43, 0xd9, 0x65, 0xdb, 0x0c, 0x49, 0x85,
+0x8a, 0xe8, 0xa2, 0x21, 0xd6, 0xd2, 0xba, 0x09,
+0xb1, 0x5d, 0x16, 0x6a, 0x77, 0xb1, 0xdd, 0x7d,
+0xfa, 0xf0, 0xbe, 0x4b, 0xc3, 0x38, 0xe7, 0xcc,
+0x9c, 0xb3, 0xeb, 0x9e, 0x99, 0x39, 0xff, 0x1f,
+0x9c, 0x0f, 0x67, 0xe6, 0x9d, 0x73, 0x7b, 0x7e,
+0xf3, 0xbc, 0x97, 0x79, 0xe6, 0x14, 0xcc, 0x0c,
+0x51, 0xbb, 0xd4, 0xe9, 0x27, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80,
+0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24,
+0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20,
+0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09,
+0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08,
+0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02,
+0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0xaa, 0xca,
+0x49, 0xfa, 0x09, 0xc6, 0xcc, 0x19, 0xc0, 0xb5,
+0xc0, 0x2c, 0xa0, 0x00, 0x1c, 0x04, 0x3a, 0x81,
+0x3f, 0x24, 0x40, 0xfe, 0x03, 0xff, 0x24, 0x70,
+0x0f, 0x30, 0x39, 0xb4, 0xef, 0x18, 0xf0, 0x26,
+0xf0, 0x38, 0xf0, 0x4b, 0x9a, 0xbf, 0x44, 0x41,
+0x7f, 0x17, 0x5f, 0x11, 0xb3, 0x81, 0x1d, 0xc0,
+0x8c, 0x98, 0x76, 0x83, 0xc0, 0x83, 0xc0, 0x56,
+0x09, 0x90, 0x1f, 0xae, 0x00, 0x3e, 0xf4, 0x19,
+0x20, 0x29, 0xaf, 0xfa, 0x4c, 0x31, 0x24, 0x01,
+0xb2, 0xcd, 0x0c, 0xe0, 0x6b, 0xa0, 0xb1, 0x82,
+0x63, 0x77, 0x02, 0xb7, 0xf9, 0xee, 0x41, 0xb3,
+0x80, 0x8c, 0xb2, 0xb5, 0x44, 0xf0, 0xe3, 0xce,
+0xee, 0x9b, 0x80, 0xf5, 0x9a, 0x06, 0x66, 0x3b,
+0xf5, 0x2f, 0x89, 0xd8, 0xfe, 0x23, 0x30, 0x1f,
+0x98, 0x04, 0x5c, 0x0c, 0x7c, 0x56, 0x22, 0x03,
+0x3c, 0xab, 0x59, 0x40, 0xf6, 0xa8, 0x03, 0x46,
+0x80, 0xe5, 0x11, 0xfb, 0x7e, 0x07, 0x16, 0x01,
+0x47, 0xfd, 0xf3, 0x7f, 0x81, 0x99, 0x59, 0x49,
+0xff, 0xca, 0x00, 0xf1, 0x4c, 0x03, 0x3e, 0x01,
+0x56, 0x03, 0x73, 0x23, 0xf6, 0xbf, 0x16, 0x08,
+0xfe, 0x4c, 0x3f, 0xff, 0x6f, 0x2e, 0x11, 0xfc,
+0x79, 0xc0, 0xf9, 0xca, 0x00, 0xd9, 0xa0, 0x11,
+0xd8, 0x0d, 0x5c, 0x04, 0x5c, 0x05, 0xfc, 0x53,
+0xe2, 0x04, 0x4a, 0x12, 0xfc, 0x53, 0x80, 0x76,
+0x3f, 0x90, 0x7c, 0x09, 0x78, 0xca, 0x67, 0x90,
+0xea, 0x62, 0x66, 0x7a, 0x44, 0x3f, 0xda, 0x2c,
+0x9e, 0xa3, 0x66, 0x76, 0xa9, 0x99, 0x1d, 0x89,
+0xd8, 0xf7, 0x9e, 0x99, 0x9d, 0x1c, 0x78, 0xbd,
+0x0d, 0xa1, 0xfd, 0x7f, 0x99, 0xd9, 0x43, 0xd5,
+0xfe, 0x9e, 0x9a, 0x06, 0x46, 0x33, 0x1d, 0x38,
+0x02, 0xd4, 0x27, 0x68, 0x3b, 0x1c, 0xd1, 0x2e,
+0xdc, 0xe7, 0xcf, 0xf7, 0x19, 0x22, 0x9c, 0x71,
+0xdb, 0x80, 0xbb, 0x35, 0x06, 0x48, 0x1f, 0x57,
+0x26, 0x0c, 0x3e, 0x09, 0x82, 0xdf, 0x0a, 0xbc,
+0x1b, 0x11, 0xfc, 0x61, 0x60, 0xa3, 0x06, 0x81,
+0xe9, 0x62, 0x35, 0x70, 0x2e, 0xd0, 0x14, 0xb1,
+0x6f, 0x00, 0xe8, 0x8e, 0x39, 0xbe, 0x33, 0x14,
+0xfc, 0x65, 0xc0, 0xe7, 0xc0, 0x59, 0x11, 0x6d,
+0x5f, 0xc0, 0x5d, 0x38, 0xaa, 0x2a, 0xea, 0x02,
+0xfe, 0x67, 0x23, 0xb0, 0x0e, 0xf8, 0x0d, 0x78,
+0x0b, 0xb8, 0x3f, 0xb4, 0xff, 0x66, 0x2f, 0xc1,
+0xae, 0x12, 0xaf, 0x31, 0xe4, 0xf7, 0x77, 0xf9,
+0x81, 0xe3, 0x65, 0x45, 0xda, 0x7d, 0xe7, 0x67,
+0x15, 0x83, 0x12, 0x20, 0x5d, 0xc1, 0x2f, 0xc6,
+0xe1, 0xc0, 0xfc, 0xfe, 0x79, 0xdc, 0x05, 0x9e,
+0x4a, 0xe9, 0x01, 0xae, 0xf6, 0x92, 0x68, 0x1d,
+0x20, 0x03, 0xc1, 0x27, 0x34, 0x05, 0x7c, 0xd8,
+0x4f, 0xe7, 0x2a, 0xa1, 0x17, 0x58, 0x9a, 0x96,
+0xe0, 0x2b, 0x03, 0xc0, 0xf5, 0xc0, 0xfb, 0x09,
+0x47, 0xfa, 0x2d, 0x81, 0x45, 0x9f, 0x7a, 0xdf,
+0x87, 0xaf, 0x2d, 0xe3, 0xbd, 0x0e, 0xf9, 0x31,
+0xc1, 0x81, 0x34, 0xfd, 0x00, 0xb5, 0x9e, 0x01,
+0x3e, 0x00, 0x9e, 0x49, 0x38, 0xd2, 0x5f, 0x17,
+0x12, 0xe2, 0x5e, 0x60, 0x45, 0x40, 0x8a, 0x52,
+0xf2, 0x6c, 0x02, 0x2e, 0x4f, 0x5b, 0xf0, 0x95,
+0x01, 0xca, 0xeb, 0x06, 0x0c, 0x58, 0xec, 0x47,
+0xfa, 0x41, 0x26, 0x03, 0x77, 0x00, 0xb7, 0xfa,
+0x20, 0x4f, 0x07, 0xfa, 0x7d, 0xb0, 0x3f, 0xc2,
+0x5d, 0x41, 0xfc, 0x39, 0xad, 0x5f, 0xbc, 0x16,
+0x05, 0x68, 0xc6, 0x5d, 0xd5, 0x9b, 0x85, 0xbb,
+0xc8, 0x73, 0x08, 0xe8, 0x00, 0xd6, 0x24, 0x90,
+0xa0, 0x0f, 0x58, 0x00, 0x7c, 0x9b, 0x97, 0x1f,
+0xa3, 0x96, 0x04, 0x68, 0x02, 0x9e, 0xf3, 0x69,
+0x3b, 0xaa, 0xeb, 0xfb, 0x18, 0xb7, 0x5e, 0xbf,
+0x20, 0xc1, 0x28, 0x7e, 0x09, 0xf0, 0xbd, 0x04,
+0xc8, 0x0e, 0xd7, 0x00, 0x6f, 0x53, 0x59, 0x25,
+0x4f, 0xb1, 0xd1, 0xfc, 0xe2, 0x3c, 0x64, 0x82,
+0x5a, 0x10, 0xe0, 0x46, 0x60, 0x3b, 0xae, 0x60,
+0x63, 0x3c, 0xc9, 0x85, 0x04, 0x79, 0x17, 0xa0,
+0x15, 0xd8, 0xc7, 0xf1, 0x65, 0xdb, 0x92, 0xa0,
+0x06, 0xa6, 0x81, 0x05, 0x5c, 0x35, 0x6e, 0xb1,
+0xe0, 0xff, 0x99, 0xe0, 0x35, 0xe2, 0xa6, 0x6d,
+0x53, 0xfd, 0x00, 0xb2, 0x55, 0x02, 0xa4, 0x8f,
+0xa5, 0xc0, 0x9c, 0x88, 0xed, 0x7b, 0xfd, 0x0c,
+0xa0, 0x11, 0x57, 0x9d, 0xb3, 0xa7, 0xc8, 0xf1,
+0xed, 0x3e, 0xb0, 0x71, 0xeb, 0x04, 0x53, 0xbc,
+0x08, 0x99, 0x24, 0xcf, 0x15, 0x41, 0xb7, 0x47,
+0x6c, 0xeb, 0xc2, 0xad, 0xfe, 0xf5, 0xf9, 0xe7,
+0x67, 0x17, 0x39, 0x7b, 0xdb, 0x81, 0x55, 0xb8,
+0x45, 0x9c, 0x47, 0x71, 0x17, 0x79, 0x1e, 0x8b,
+0x68, 0x37, 0xe0, 0xc7, 0x18, 0x9f, 0x2a, 0x03,
+0xa4, 0x8f, 0xd9, 0x11, 0xdb, 0xda, 0x02, 0xc1,
+0x2f, 0x76, 0x83, 0x47, 0x30, 0xf8, 0xd7, 0x01,
+0x17, 0x02, 0x1b, 0x38, 0xbe, 0xa4, 0x7b, 0x34,
+0xf8, 0x1d, 0x59, 0xfe, 0x91, 0xf2, 0x2c, 0xc0,
+0x69, 0x11, 0xdb, 0x26, 0xc5, 0x04, 0x7f, 0x0b,
+0xb0, 0xd2, 0x07, 0xbf, 0x01, 0x78, 0x1d, 0xf8,
+0x01, 0x78, 0xd9, 0x8f, 0x27, 0xd6, 0xe7, 0x29,
+0xf8, 0x79, 0x9f, 0x05, 0x7c, 0x19, 0x91, 0x05,
+0xba, 0x71, 0x25, 0x58, 0x3b, 0x8a, 0x04, 0x7f,
+0x2d, 0x6e, 0xc9, 0x17, 0xe0, 0x45, 0xe0, 0xbe,
+0xc0, 0xfe, 0xbf, 0x71, 0x37, 0x83, 0x02, 0x7c,
+0x95, 0x87, 0xe0, 0xa7, 0x31, 0x03, 0x14, 0x80,
+0x07, 0x80, 0x53, 0xcb, 0x3c, 0xee, 0x4c, 0x5c,
+0xf5, 0x6e, 0x70, 0xa1, 0xe7, 0x9b, 0x88, 0x76,
+0x2d, 0xb8, 0x32, 0xef, 0xb8, 0xe0, 0x2f, 0x0b,
+0x05, 0x7f, 0x34, 0xa3, 0xb4, 0xe0, 0x56, 0x13,
+0x3b, 0x72, 0x73, 0x9a, 0xa4, 0xa8, 0x0a, 0xb7,
+0x60, 0x66, 0x9b, 0x7d, 0xc5, 0xec, 0x6e, 0x33,
+0x6b, 0x48, 0x70, 0xcc, 0x25, 0x66, 0xb6, 0xcb,
+0xcc, 0x86, 0x03, 0xd5, 0xb6, 0x7b, 0xcd, 0x6c,
+0xb9, 0x99, 0xdd, 0x60, 0xc9, 0xd8, 0xec, 0xdf,
+0x7b, 0xf4, 0x35, 0x17, 0x9a, 0x59, 0x7f, 0x44,
+0xbb, 0x01, 0x33, 0x6b, 0xce, 0x5b, 0xf5, 0x73,
+0x1a, 0x83, 0x3f, 0xca, 0xbe, 0x18, 0x09, 0x56,
+0x99, 0xd9, 0xb1, 0x12, 0x81, 0xdd, 0x69, 0x66,
+0xbd, 0x31, 0xc1, 0xdf, 0x1e, 0x08, 0x7e, 0x9d,
+0x99, 0xad, 0xf1, 0x81, 0x8e, 0xe2, 0x91, 0x3c,
+0x96, 0xbf, 0xa7, 0x61, 0x0c, 0x50, 0x0f, 0xbc,
+0x42, 0x74, 0x79, 0xf4, 0x7e, 0x3f, 0x12, 0xef,
+0x0b, 0x6d, 0x5f, 0x81, 0xfb, 0x03, 0x86, 0xb1,
+0x32, 0x82, 0xbb, 0x97, 0xef, 0x57, 0x5c, 0x0d,
+0xdf, 0x79, 0x45, 0xda, 0x75, 0xe2, 0xae, 0x27,
+0x8c, 0xe4, 0x6e, 0xb5, 0xac, 0xca, 0x02, 0xd4,
+0x03, 0xdb, 0x80, 0x3b, 0x4b, 0xb4, 0x09, 0x4b,
+0x30, 0x15, 0xf8, 0x09, 0x38, 0x7d, 0x82, 0x3e,
+0xe3, 0x41, 0xdc, 0x15, 0xc2, 0xde, 0x3c, 0x8e,
+0x94, 0xb3, 0x30, 0x0d, 0x9c, 0xe7, 0xa7, 0x6c,
+0x0d, 0xfe, 0xf9, 0xca, 0x09, 0x0c, 0x7e, 0x97,
+0x97, 0x2f, 0x97, 0xc1, 0x4f, 0x83, 0x00, 0xc3,
+0x7e, 0xd1, 0xa5, 0xbd, 0x0c, 0x09, 0xe6, 0x4e,
+0xd0, 0x67, 0xdb, 0x8f, 0xab, 0xde, 0xed, 0x26,
+0xc7, 0xa4, 0x21, 0x03, 0x94, 0x2b, 0x41, 0xd3,
+0x18, 0xdf, 0x6f, 0x20, 0x66, 0x7f, 0x3f, 0xf0,
+0x84, 0x0f, 0x7e, 0x0f, 0x39, 0x27, 0x4d, 0x0b,
+0x41, 0x49, 0xc6, 0x03, 0x51, 0xec, 0xf1, 0x02,
+0x0d, 0xe1, 0x6a, 0xf6, 0x6f, 0x89, 0x69, 0xdf,
+0x8d, 0xab, 0xe8, 0x9d, 0x83, 0xab, 0xe1, 0x9b,
+0xe6, 0x17, 0x79, 0x0e, 0xe0, 0x2a, 0x84, 0xb7,
+0xe5, 0x39, 0xe5, 0xa7, 0x7d, 0x25, 0xb0, 0x5c,
+0x09, 0x06, 0x70, 0xb7, 0x5b, 0xf7, 0x06, 0x16,
+0x92, 0x36, 0xe1, 0xea, 0xfb, 0x4a, 0x71, 0x18,
+0x58, 0x88, 0xbb, 0x01, 0xb4, 0xa6, 0x49, 0xdb,
+0x20, 0x30, 0x69, 0x77, 0x30, 0x4a, 0x4f, 0xe8,
+0x6c, 0x35, 0xbf, 0xa2, 0xb7, 0x25, 0xe6, 0xb8,
+0x0b, 0xfc, 0xd4, 0xee, 0x1c, 0x09, 0x90, 0x3e,
+0x86, 0x81, 0xbb, 0x12, 0x04, 0x11, 0xdc, 0xed,
+0x5a, 0xe1, 0xf5, 0xfe, 0x72, 0x24, 0xf8, 0x82,
+0xe8, 0xbf, 0x74, 0x91, 0x00, 0x55, 0x66, 0x24,
+0x61, 0x10, 0x01, 0xde, 0x89, 0x38, 0x93, 0x93,
+0x4a, 0x30, 0x85, 0xf1, 0x2b, 0x14, 0xd5, 0x18,
+0xe0, 0x44, 0x7c, 0xbe, 0x31, 0xf6, 0xe9, 0xa5,
+0x8e, 0xcf, 0x4d, 0x65, 0x6f, 0x1e, 0x33, 0xc0,
+0x78, 0xf5, 0xe9, 0xc5, 0x8e, 0x57, 0xf0, 0x33,
+0x22, 0xc0, 0x89, 0x90, 0x40, 0xc1, 0xcf, 0x50,
+0x17, 0x30, 0xde, 0xdd, 0xc1, 0xd3, 0xc0, 0x1b,
+0x0a, 0x7e, 0x36, 0x05, 0x28, 0x57, 0x82, 0x45,
+0xe4, 0x7c, 0x19, 0xb7, 0x56, 0xba, 0x00, 0x4d,
+0xf1, 0x24, 0x40, 0x45, 0x12, 0x34, 0xfb, 0x31,
+0x81, 0x24, 0xc8, 0x51, 0x17, 0x10, 0xee, 0x0e,
+0x1a, 0x12, 0xb4, 0x1b, 0x24, 0x05, 0x7f, 0xc6,
+0x24, 0x01, 0x84, 0xba, 0x00, 0x21, 0x01, 0x84,
+0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01,
+0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21,
+0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00,
+0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48,
+0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0xc4, 0x18,
+0xf8, 0x6f, 0x00, 0xae, 0xb1, 0x18, 0x25, 0xd7,
+0x66, 0x43, 0x37, 0x00, 0x00, 0x00, 0x00, 0x49,
+0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+
+HERE_MAPS_END_NAMESPACE
diff --git a/inc/engine/internal/JsonParser.h b/inc/engine/internal/JsonParser.h
new file mode 100755
index 0000000..7fa4c40
--- /dev/null
+++ b/inc/engine/internal/JsonParser.h
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef JSON_PARSER_H_
+#define JSON_PARSER_H_
+
+#include "common/HereMaps_global.h"
+#include "finder/Category.h"
+#include "finder/ContactDetails.h"
+#include "finder/ExtendedAttribute.h"
+#include "finder/ImageContent.h"
+#include "finder/ReviewContent.h"
+#include "finder/EditorialContent.h"
+#include "finder/PlaceItem.h"
+#include "finder/SearchItem.h"
+#include "finder/PlaceDetails.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#include <FWeb.h>
+#endif
+#include <vector>
+#include <map>
+
+#ifdef TIZEN_MIGRATION
+#include "base/BaseByteBuffer.h"
+#include <json.h>
+
+#define JsonArray json_object
+#define JsonNumber json_object
+#define JsonObject json_object
+#define IJsonValue json_object
+#define JsonBool json_object
+
+using namespace Tizen::Maps;
+#else
+using namespace Tizen::Base;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Web::Json;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DiscoveryReply;
+class BaseContent;
+class Address;
+class GeoCoordinates;
+class BaseQuery;
+class GeoLocation;
+class LinkObject;
+class Ratings;
+class GeoBoundingBox;
+class SearchContext;
+class FinderError;
+
+/**
+ * Parses Places API Json data.
+ *
+ * @ingroup Search / Online / Parser
+ */
+class JsonParser
+{
+public:
+
+ /**
+ * Parse discover search results.
+ * @param json_stream ByteBuffer.
+ * @param results_page Parsed Discovery query.
+ * @param error A pointer to an object that is populated
+ * with error information should parsing fail.
+ */
+ static bool ParseDiscoverySearch( ByteBuffer& buf, DiscoveryReply& results_page, FinderError*& error);
+
+ /**
+ * Parse place result.
+ * @param json_stream ByteBuffer.
+ * @param place_data Parsed place data.
+ * @param error A pointer to an object that is populated
+ * with error information should parsing fail.
+ */
+ static bool ParsePlaceResult( ByteBuffer& buf, PlaceDetails& place_data, FinderError*& error);
+
+private:
+
+ static void ParseGeocodeSearch( ByteBuffer& json_stream,
+ std::vector< GeoLocation >& results );
+
+ static void ParseReverseGeocodeSearch( ByteBuffer& json_stream, Address& address );
+
+
+ static void ParseTextSuggestions( ByteBuffer& json, std::vector< String >& suggestions );
+
+
+ static void ParseDiscoverySearch( IJsonValue* json, DiscoveryReply& results_page );
+
+ static void ParsePlaceResult( IJsonValue* json, PlaceDetails& place_data );
+
+ static void ParseAlternativeNames( JsonArray* json_data,
+ PlaceDetails::AlternativeNames& alternative_names );
+
+ static void ParsePlaceLocation( JsonObject* json_data, GeoLocation& location );
+
+ static void ParsePosition( JsonObject* json_data, GeoCoordinates& position );
+
+ static void ParseAddress( JsonObject* json_data, Address& address );
+
+ static void ParseContacts( JsonArray* json_data, const String& key,
+ ContactDetailsList& contacts );
+#ifndef TIZEN_MIGRATION
+ static void ParseLinkObject( IJsonValue* json_data,
+ const char* object_name,
+ LinkObject& link_object );
+#endif
+ static void ParseLinkObject( JsonObject* json_data, LinkObject& link_object );
+#ifndef TIZEN_MIGRATION
+ static void ParseLinkObject( JsonObject* json_data,
+ const char* object_name,
+ LinkObject& link_object );
+#endif
+ static void ParseRatings( JsonObject* json_data, Ratings& ratings );
+
+ static void ParseCategories( JsonArray* json_data, CategoryList& categories );
+
+ static void ParseCategory( JsonObject* json_data, Category& category );
+
+ static void ParseAttributes( JsonObject* json_data, ExtendedAttributeList& attributes );
+
+ static void ParseSearchContext( JsonObject* json_data, SearchContext& results_context );
+
+ static void ParseBbox( JsonObject* json_data, GeoBoundingBox& bbox );
+
+ static void ParseResultsItemPlace( JsonObject* json_data, PlaceItem& place_result );
+
+ static void ParseResultsItemSearch( JsonObject* json_data, SearchItem& search_result );
+
+ static void ParsePlaceRelated( JsonObject* json_data, PlaceDetails& place_data );
+
+ static void ParsePlaceMedia( JsonObject* json_data, PlaceDetails& place_data );
+
+ static void ParsePlaceEditorials( JsonObject* json_data, EditorialContentList& editorials );
+
+ static void ParsePlaceImages( JsonObject* json_data, ImageContentList& images );
+
+ static void ParsePlaceReviews( JsonObject* json_data, ReviewContentList& reviews );
+
+ static void ParsePlaceEditorial( JsonObject* json_data, EditorialContent& editorial );
+
+ static void ParsePlaceImage( JsonObject* json_data, ImageContent& image );
+
+ static void ParsePlaceReview( JsonObject* json_data, ReviewContent& review );
+
+ static void ParsePlaceBaseContent( JsonObject* json_data, BaseContent& media );
+
+ static void TraverseRootNode( ByteBuffer& json_stream, IJsonValue* root );
+ static void ParseCoordinates( IJsonValue* json_location, GeoLocation& loc );
+ static void ParseBoundingBox( IJsonValue* json_location, GeoLocation& loc );
+ static void ParseAddress( IJsonValue* json_location, GeoLocation& loc );
+
+ static void ParsePlaceResults(JsonArray* pObject, PlaceItemList&, SearchItemList& );
+
+private:
+ static void GetStringValue(JsonObject* pObject, const String& sKey, String& value );
+ static void GetUriValue(JsonObject* pObject, const String& sKey, Uri& uri );
+ static bool GetValuePtr(JsonObject* pObject, const String& sKey, IJsonValue*& pValue );
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // JSON_PARSER_H_
diff --git a/inc/engine/internal/Logger.h b/inc/engine/internal/Logger.h
new file mode 100644
index 0000000..27a6fc3
--- /dev/null
+++ b/inc/engine/internal/Logger.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LOGGER_H
+#define LOGGER_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class GeoLocation;
+
+/**
+ * This class encapsulates logging utility methods which allow you to output
+ * debug, error and warning messages as well as specific data objects.
+ */
+class Logger
+{
+public:
+ /**
+ * This method obtains a instance of <code>Logger</code>.
+ *
+ * @return A static reference to <code>Logger</code>.
+ */
+ static Logger& getInstance();
+
+ /**
+ * This method writes a debug message to standard output (and to a file if
+ * writing to a file is enabled).
+ *
+ * @param pFile A constant pointer to a character string containing the name
+ * of the file where the message originates.
+ *
+ * @param uLine A value indicating the line number in the file named by
+ * <code>pFile</code>.
+ *
+ * @param pMsg A constant pointer to a character buffer containing the
+ * format string of the message to output.
+ *
+ * @param ... A variable list of arguments that are used to complete the
+ * message on the basis of the format string specified by
+ * <code>pMsg</code>.
+ */
+ void debug(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+ /**
+ * This method writes an error message to standard output (and to a file if
+ * writing to a file is enabled).
+ *
+ * @param pFile A constant pointer to a character string containing the name
+ * of the file where the message originates.
+ *
+ * @param uLine A value indicating the line number in the file named by
+ * <code>pFile</code>.
+ *
+ * @param pMsg A constant pointer to a character buffer containing the
+ * format string of the message to output.
+ *
+ * @param ... A variable list of arguments that are used to complete the
+ * message on the basis of the format string specified by
+ * <code>pMsg</code>.
+ */
+ void error(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+ /**
+ * This method writes a warning message to standard output (and to a file if
+ * writing to a file is enabled).
+ *
+ * @param pFile A constant pointer to a character string containing the name
+ * of the file where the message originates.
+ *
+ * @param uLine A value indicating the line number in the file named by
+ * <code>pFile</code>.
+ *
+ * @param pMsg A constant pointer to a character buffer containing the
+ * format string of the message to output.
+ *
+ * @param ... A variable list of arguments that are used to complete the
+ * message on the basis of the format string specified by
+ * <code>pMsg</code>.
+ */
+ void warning(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+ /**
+ * This method prints the object provided by the caller to standard output
+ * and to a file (if writing to a file is enabled).
+ *
+ * @param rResult A constant reference to the object to output.
+ */
+ void print(const Result& rResult);
+
+ /**
+ * This method prints the object provided by the caller to standard output
+ * and to a file (if writing to a file is enabled).
+ *
+ * @param rResult A constant reference to the object to output.
+ */
+ void print(const Address& rResult);
+
+ /**
+ * This method prints the object provided by the caller to standard output
+ * and to a file (if writing to a file is enabled).
+ *
+ * @param rResult A constant reference to the object to output.
+ */
+ void print(const GeoLocation& rResult);
+
+private:
+ //HERE_MAPS_NO_COPY_NO_ASSIGN(Logger);
+
+ Logger();
+ ~Logger();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/Opt.h b/inc/engine/internal/Opt.h
new file mode 100644
index 0000000..f20d599
--- /dev/null
+++ b/inc/engine/internal/Opt.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef OPT_H
+#define OPT_H
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This is a template helper class for optional parameters.
+ */
+template<class T>
+class Opt
+{
+public:
+ /**
+ * This is the default constructor.
+ */
+ Opt();
+
+ //flag management
+ /**
+ * This method retrieves a Boolean value indicating if the property is available
+ * (set).
+ *
+ * @return <code>true</code> if the property is set, otherwise <code>false</code>.
+ */
+ bool IsAvailable() const;
+
+ /**
+ * This method resets a Boolean value indicating if the property is available
+ * (set).
+ */
+ void Reset();
+
+ //access implicit
+ /**
+ * This operator returns a reference to the property.
+ */
+ operator T&();
+
+ /**
+ * This operator returns a constant reference to the property.
+ */
+ operator const T&() const;
+
+ //access explicit
+ /**
+ * This method retrieves a reference to the property.
+ *
+ * @return A reference to the property.
+ */
+ T& Get();
+
+ /**
+ * This method retrieves a constant reference to the property.
+ *
+ * @return A constant reference to the property.
+ */
+ const T& Get() const;
+
+ //assignment
+ /**
+ * This is the assignment operator.
+ *
+ * @param t A constant reference to a property whose value is to be copied
+ * to the given instance.
+ */
+ void operator=(const T& t);
+
+private:
+ bool m_bAvailable;
+ T m_aValue;
+};
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::Opt()
+: m_bAvailable(false)
+{
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline bool Opt<T>::IsAvailable() const
+{
+ return m_bAvailable;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+void Opt<T>::Reset()
+{
+ m_bAvailable = false;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::operator T&()
+{
+ return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::operator const T&() const
+{
+ return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T& Opt<T>::Get()
+{
+ return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline const T& Opt<T>::Get() const
+{
+ return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void Opt<T>::operator=(const T& t)
+{
+ m_aValue = t;
+ m_bAvailable = true;
+}
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/Proximity.h b/inc/engine/internal/Proximity.h
new file mode 100644
index 0000000..b767e41
--- /dev/null
+++ b/inc/engine/internal/Proximity.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PROXIMITY_H_
+#define PROXIMITY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "internal/Distance.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Proximity
+{
+public:
+ Proximity() : __center(0,0) {}
+ Proximity(const GeoCoordinates& center, const Distance& radius);
+
+ GeoCoordinates GetCenter() const;
+ Distance GetRadius() const;
+ bool IsValid() const;
+
+private:
+ GeoCoordinates __center;
+ Distance __radius;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PROXIMITY_H_
diff --git a/inc/engine/internal/RestCurl.h b/inc/engine/internal/RestCurl.h
new file mode 100755
index 0000000..5e5598b
--- /dev/null
+++ b/inc/engine/internal/RestCurl.h
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef REST_CURL_H
+#define REST_CURL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <vector>
+#include <glib.h>
+#include <curl/curl.h>
+#include <curl/easy.h>
+
+#include "common/HereMaps_global.h"
+
+#include "common/RestItemHandle.h"
+#include "base/BaseByteBuffer.h"
+#include "base/EventDrivenThread.h"
+
+#define RESTCURL_CRYPTO_LOCK
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+using namespace Tizen::Maps;
+
+typedef struct MemoryStruct {
+ char *memory;
+ size_t size;
+ long http_code;
+} MemoryStruct_s;
+
+class RestCurl
+{
+public:
+ RestCurl();
+ virtual ~RestCurl();
+ bool Commit(void *pArgs);
+ void Clear();
+ void Shutdown();
+ void Abort(const Here::Maps::RestItemHandle::RequestId aRequestId);
+ int EasyCurl(String sUrl, MemoryStruct_s* pChunk);
+ String UrlEncode(String sStr);
+ static RestCurl& GetInstance();
+
+private:
+ static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp);
+ static void *ThreadFunc(void *pArgs);
+
+ class RestCurlImpl;
+ RestCurlImpl* m_pImpl;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* REST_CURL_H */
diff --git a/inc/engine/internal/RestEngine.h b/inc/engine/internal/RestEngine.h
new file mode 100755
index 0000000..62127ec
--- /dev/null
+++ b/inc/engine/internal/RestEngine.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTENGINE_H
+#define RESTENGINE_H
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBaseObject.h>
+#include <FBaseRtEventDrivenThread.h>
+#include <FNetHttpIHttpTransactionEventListener.h>
+#endif
+
+#include "common/QueryListener.h"
+#include "common/RestItemHandle.h"
+
+#ifdef TIZEN_MIGRATION
+#include "base/BaseObject.h"
+#include "base/BaseByteBuffer.h"
+#include "base/EventDrivenThread.h"
+#include "internal/RestCurl.h"
+
+using namespace Tizen::Maps;
+#else
+using namespace Tizen::Base::Runtime;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class RestItem;
+class BaseReply;
+class QueryListener;
+
+class RestEngineArgument
+: public Tizen::Maps::Object
+{
+public:
+ RestEngineArgument(const String& sUrl, RestItem* pRestItem)
+ : m_sUrl(sUrl)
+ , m_pRestItem(pRestItem)
+ {
+ }
+
+ RestEngineArgument(RestItemHandle::RequestId aRequestId)
+ : m_aRequestId(aRequestId)
+ {
+ }
+
+ RestEngineArgument(RestItem* pRestItem)
+ : m_pRestItem(pRestItem)
+ {
+ }
+
+ ~RestEngineArgument()
+ {
+ }
+
+ String m_sUrl;
+ RestItem* m_pRestItem;
+ RestItemHandle::RequestId m_aRequestId;
+ #ifdef TIZEN_MIGRATION
+ Tizen::Maps::MemoryStruct_s m_Chunk;
+ #endif
+};
+
+//this is an internal class and should not be used outside
+class RestEngine
+: public EventDrivenThread
+#ifndef TIZEN_MIGRATION
+, public Tizen::Net::Http::IHttpTransactionEventListener
+#endif
+{
+public:
+ static RestEngine& GetInstance();
+
+ RestItemHandle::RequestId OpenRequest(const String& sUrl, QueryListener* pListener, BaseReplyPtr pReply);
+ size_t GetNumPendingRequests() const;
+ void ShutdownEngine();
+ void AbortRequest(RestItemHandle::RequestId aRequestId);
+ void AbortListenerRequests(QueryListener* pListener);
+ void AbortAllRequests();
+ void UnregisterListener(QueryListener* pListener);
+
+ int CountListeners() const;
+
+ static unsigned int GetMaxPendingRequests();
+
+#ifdef TIZEN_MIGRATION
+ void FireImpl(void* pArgs);
+#endif
+
+private:
+ enum RequestType
+ {
+ RT_OpenRequest = 0,
+ RT_CloseRestItem,
+ RT_DeleteRestItem
+ };
+ bool CheckRequestIn(RestItem* pRestItem);
+ RestItem* GetChechedInRequest(RestItemHandle::RequestId aRequestId) const;
+
+ void CloseRestItemLater(RestItemHandle::RequestId aRequestId);
+ void CloseRestItem(RestItemHandle::RequestId aRequestId, bool bDeleteLater = false);
+ void DeleteRestItemLater(RestItem* pRestItem);
+
+#ifdef TIZEN_MIGRATION
+ void OnUserEventReceivedN(int requestType, void *pArgs);
+#else
+ void OnTransactionAborted(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction, result r);
+
+ void OnTransactionCertVerificationRequiredN(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction,
+ Tizen::Base::String* pCert);
+
+ void OnTransactionCompleted(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction);
+
+ void OnTransactionHeaderCompleted(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction,
+ int headerLen,
+ bool bAuthRequired);
+
+ void OnTransactionReadyToRead(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction,
+ int availableBodyLen);
+
+ void OnTransactionReadyToWrite(Tizen::Net::Http::HttpSession& httpSession,
+ Tizen::Net::Http::HttpTransaction& httpTransaction,
+ int recommendedChunkSize);
+
+ void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList *pArgs);
+#endif
+
+ RestEngine();
+ ~RestEngine();
+
+ void Begin();
+
+ void LockPendingRequests() const;
+ void UnlockPendingRequests() const;
+
+ void LockListenersRegistery() const;
+ void UnlockListenersRegistery() const;
+
+ bool OnStart();
+ void OnStop();
+
+ void RegisterListener(QueryListener* rListener);
+
+ bool DoOpenRequest(const String& sUrl, RestItem* pRestItem);
+ void DoCloseRestItemLater(RestItemHandle::RequestId aRequestId);
+ void DoDeleteRestItemLater(RestItem* pRestItem);
+
+ //classes allowed to access this internal instance
+ friend class RestItem;
+ friend class QueryListener;
+
+ //members
+ class RestEngineImpl;
+ RestEngineImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/RestItem.h b/inc/engine/internal/RestItem.h
new file mode 100755
index 0000000..8b13f77
--- /dev/null
+++ b/inc/engine/internal/RestItem.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTITEM_H
+#define RESTITEM_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "common/RestItemHandle.h"
+
+#ifdef TIZEN_MIGRATION
+#include "internal/RestCurl.h" // MemoryStruct_s
+#else
+#include <FNet.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+class BaseReply;
+class QueryListener;
+#ifndef TIZEN_MIGRATION
+class RestEngine;
+#endif
+
+//this class is for internal use only - do not rely on this outside
+class RestItem
+#ifdef TIZEN_MIGRATION
+: public Tizen::Maps::Object
+#endif
+{
+public:
+ enum RestItemStatus
+ {
+ RIS_Created = 0,
+ RIS_RequestIssued,
+ RIS_Completed
+ };
+
+ RestItem(QueryListener* rListener, BaseReplyPtr pBaseReply);
+ ~RestItem();
+
+ bool Run(const String& rUri);
+ void Stop();
+
+ void OnError(ErrorBase& rError);
+ void OnResponseData(const Tizen::Maps::ByteBuffer& rBuff);
+
+#ifndef TIZEN_MIGRATION
+ bool OwnsTransaction(Tizen::Net::Http::HttpTransaction* pTransaction) const;
+#endif
+ QueryListener* GetListener() const;
+
+ RestItemHandle::RequestId GetRequestId() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(RestItem);
+ friend class RestEngine;
+
+ class RestItemImpl;
+ RestItemImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/ServerStringBuilder.h b/inc/engine/internal/ServerStringBuilder.h
new file mode 100644
index 0000000..8bb0fd0
--- /dev/null
+++ b/inc/engine/internal/ServerStringBuilder.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SERVERSTRINGBUILDER_H_
+#define SERVERSTRINGBUILDER_H_
+
+#include <iostream>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+class GeoBoundingBox;
+class Distance;
+class Proximity;
+
+class ServerStringBuilder
+{
+public:
+ virtual ~ServerStringBuilder();
+
+ std::string ToString(const GeoCoordinates& coords) const;
+ std::string ToString(const GeoBoundingBox& box) const;
+ std::string ToString(const Distance& distance) const;
+ std::string ToString(const Proximity& proximity) const;
+
+ static ServerStringBuilder& GetInstance();
+
+private:
+ ServerStringBuilder();
+
+ std::string CoordinateToString(double d) const;
+ std::string ToString(double d, int percision) const;
+
+ void removeTrailingZeros(std::string& s) const;
+
+private:
+ static ServerStringBuilder* m_instance;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* SERVERSTRINGBUILDER_H_ */
diff --git a/inc/engine/internal/StringHelper.h b/inc/engine/internal/StringHelper.h
new file mode 100755
index 0000000..3cb1366
--- /dev/null
+++ b/inc/engine/internal/StringHelper.h
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef STRINGHELPER_H
+#define STRINGHELPER_H
+
+#include "common/HereMaps_global.h"
+#ifdef TIZEN_MIGRATION
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+#include "common/GeoBoundingCircle.h"
+#else
+//#include "common/GeoCoordinates.h"
+//#include "common/GeoBoundingBox.h"
+#endif
+
+#include <sstream>
+#ifndef TIZEN_MIGRATION
+#include <string>
+#endif
+#include <algorithm>
+#ifndef TIZEN_MIGRATION
+#include <iomanip> // std::setprecision
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+struct TSPredicate
+{
+ bool operator()(const String& key, const String& value)
+ {
+ return key.compare(value) < 0;
+ }
+};
+
+class StringHelper
+{
+public:
+ static void ToLower(std::string& sStr);
+
+ template<class T>
+ static T ToNumber(const std::wstring& sStd);
+
+ template<class T>
+ static T ToNumber(const std::string& sStd);
+
+#ifndef TIZEN_MIGRATION
+ template<class T>
+ static T ToNumber(const Tizen::Base::String& sStd);
+#endif
+
+ template<class T>
+ static void ToString(T aNumber, std::wstring& sDst);
+
+ template<class T>
+ static void ToString(T aNumber, std::string& sDst);
+
+#ifndef TIZEN_MIGRATION
+ template<class T>
+ static void ToString(T aNumber, Tizen::Base::String& rDst);
+#endif
+
+#ifdef TIZEN_MIGRATION
+ /**
+ * This method retrieves a string representation of an object containing the
+ * geographic coordinates of a location.
+ *
+ * @param rCoordinate A constant reference to an object containing
+ * geographic coordinates of a location; the object to be converted.
+ *
+ * @param sDst A reference to a string object to which the result of the
+ * conversion is to be copied.
+ */
+ static void ToString(const GeoCoordinates& rCoordinate, String& sDst);
+
+ /**
+ * This method converts a bounding box object to string.
+ *
+ * @param rBoundingBox A constant reference to the object whose string
+ * representation is to be obtained.
+ *
+ * @param sDst A reference to a string object to which the result of the
+ * conversion is to be copied.
+ */
+ static void ToString(const GeoBoundingBox& rBoundingBox, String& sDst);
+
+ static void ToString(const GeoBoundingCircle& rBoundingCircle, String& sDst);
+#endif
+};
+
+#ifdef TIZEN_MIGRATION
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoCoordinates& rCoordinate, String& sDst)
+{
+ String sLatitude;
+ ToString(rCoordinate.GetLatitude(), sLatitude);
+
+ String sLongitude;
+ ToString(rCoordinate.GetLongitude(), sLongitude);
+
+ sDst = sLatitude + "," + sLongitude;
+}
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingBox& rBoundingBox, String& sDst)
+{
+ String sTopLeft;
+ ToString(rBoundingBox.GetTopLeft(), sTopLeft);
+
+ String sBottomRight;
+ ToString(rBoundingBox.GetBottomRight(), sBottomRight);
+
+ sDst = sTopLeft + ";" + sBottomRight;
+}
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingCircle& rBoundingCircle, String& sDst)
+{
+ String sCenter;
+ ToString(rBoundingCircle.GetCenter(), sCenter);
+
+ String sRadius;
+ ToString(rBoundingCircle.GetRadius(), sRadius);
+
+ sDst = sCenter + ";r=" + sRadius;
+}
+#else
+/*
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingBox& rBoundingBox, Tizen::Base::String& sDst)
+{
+ Tizen::Base::String sTopLeft;
+ ToString(rBoundingBox.GetTopLeft(), sTopLeft);
+
+ Tizen::Base::String sBottomRight;
+ ToString(rBoundingBox.GetBottomRight(), sBottomRight);
+
+ sDst = sTopLeft + ";" + sBottomRight;
+}
+*/
+#endif
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToLower(String& sStr)
+{
+ std::transform(sStr.begin(), sStr.end(), sStr.begin(), ::tolower);
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T StringHelper::ToNumber(const std::wstring& sStr)
+{
+ T t;
+ std::wstringstream aStream;
+ aStream << sStr;
+ aStream >> t;
+ return t;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T StringHelper::ToNumber(const std::string& sStr)
+{
+ T t;
+ std::stringstream aStream;
+ aStream << sStr;
+ aStream >> t;
+ return t;
+}
+
+
+//-----------------------------------------------------------------------------
+#ifndef TIZEN_MIGRATION
+template<class T>
+inline T StringHelper::ToNumber(const Tizen::Base::String& sStd)
+{
+ std::wstring sTmp = sStd.GetPointer();
+ return ToNumber<T>(sTmp);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void StringHelper::ToString(T aNumber, std::wstring& sDst)
+{
+ std::wstringstream aStream;
+ aStream << aNumber;
+ sDst = aStream.str();
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void StringHelper::ToString(T aNumber, std::string& sDst)
+{
+ std::stringstream aStream;
+ aStream << aNumber;
+ sDst = aStream.str();
+}
+
+//-----------------------------------------------------------------------------
+#ifndef TIZEN_MIGRATION
+template<class T>
+inline void StringHelper::ToString(T aNumber, Tizen::Base::String& rDst)
+{
+ std::wstring sTemp;
+ ToString(aNumber, sTemp);
+ rDst = sTemp.c_str();
+}
+#endif
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/DrawableBitmap.h b/inc/engine/maps/DrawableBitmap.h
new file mode 100755
index 0000000..3819e7c
--- /dev/null
+++ b/inc/engine/maps/DrawableBitmap.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DRAWABLE_BITMAP_H
+#define DRAWABLE_BITMAP_H
+
+#include "common/HereMaps_global.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Bitmap.h"
+#else
+#include <FGraphics.h>
+#endif
+
+#include <tr1/memory>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a bitmap that can be drawn on the map.
+ */
+class DrawableBitmap
+{
+public:
+ /**
+ * This typedef defines a rendering handle as a type.
+ */
+ typedef UInt RenderHandle;
+
+ /**
+ * This is a copy constructor. It creates a new instance of the class, using
+ * an existing bitmap.
+ *
+ * @param bitmap A pointer to an existing bitmap.
+ */
+#ifdef TIZEN_MIGRATION
+ DrawableBitmap(std::unique_ptr<Tizen::Maps::Bitmap>& bitmap);
+#else
+ DrawableBitmap(std::auto_ptr<Tizen::Graphics::Bitmap>& bitmap);
+#endif
+ /**
+ * This is the destructor.
+ */
+ ~DrawableBitmap();
+
+ /**
+ * This method retrieves a pointer to the bitmap encapsulated in the given
+ * instance of the class.
+ */
+#ifdef TIZEN_MIGRATION
+ Tizen::Maps::Bitmap* GetBitmap() const;
+#else
+ Tizen::Graphics::Bitmap* GetBitmap() const;
+#endif
+ /**
+ * This method sets the rendering handle.
+ *
+ * @param aRenderHandle A value representing the rendering handle to set.
+ */
+ void SetRenderHandle(RenderHandle aRenderHandle);
+
+ /**
+ * This method retrieves the rendering handle.
+ *
+ * @return A value representing the rendering handle to set.
+ */
+ RenderHandle GetRenderHandle() const;
+
+ /**
+ * This method resets the rendering handle on the given object.
+ */
+ void ResetRenderHandle();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(DrawableBitmap);
+
+ class DrawableBitmapImpl;
+ DrawableBitmapImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<DrawableBitmap> DrawableBitmapPtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObject.h b/inc/engine/maps/GeoMapObject.h
new file mode 100644
index 0000000..17507e6
--- /dev/null
+++ b/inc/engine/maps/GeoMapObject.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOMAPOBJECT_H
+#define GEOMAPOBJECT_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingBox.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTiledMap;
+class GeoCoordinates;
+
+/**
+ * This class encapsulates the common aspects of objects such as markers,
+ * polygons and polylines (or groups of such objects) that can be placed on the
+ * map.
+ *
+ * \ingroup maps
+ */
+class GeoMapObject
+{
+public:
+ /**
+ * This enumeration defines identifiers for types of objects that can be
+ * placed on the map.
+ */
+ enum Type
+ {
+ GMO_Marker, ///< Indicates a marker.
+ GMO_Polyline, ///< Indicates a polyline.
+ GMO_Polygon, ///< Indicates a polygon.
+ };
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoMapObject();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoMapObject();
+
+ /**
+ * This method retrieves the object type.
+ *
+ * @return A member of the enumerated data type indicating the type of the
+ * given object.
+ */
+ virtual Type GetType() const = 0;
+
+ /**
+ * This method retrieves the object bounding box.
+ *
+ * @return An object encapsulating the bounding box of the given object.
+ */
+ virtual GeoBoundingBox GetBoundingBox() const = 0;
+
+ /**
+ * This method checks if the given object is visible.
+ *
+ * @return <code>true</code> if the object is visible, otherwise
+ * <code>false</code>.
+ */
+ bool IsVisible() const;
+
+ /**
+ * This method sets a flag to indicate if the given object is visible.
+ *
+ * @return visible A Boolean, <code>true</code> if the object is visible,
+ * otherwise <code>false</code>.
+ */
+ virtual void SetVisible(bool visible);
+
+ /**
+ * This method checks if the object can be rendered on the map.
+ *
+ * @return A Boolean, <code>true</code> if the object can be rendered,
+ * otherwise <code>false</code>.
+ */
+ virtual bool IsValid() const = 0;
+
+protected:
+
+ /**
+ * This method updates the map.
+ */
+ void UpdateMap();
+
+ /**
+ * This method retrieves the parent object of the map, which is in effect the
+ * GL context in which the map is drawn.
+ *
+ * @return A pointer to an object encapsulating the parent map.
+ */
+ GeoTiledMap* GetParentMap() const;
+
+private:
+ friend class GeoTiledMap;
+ friend class GeoMapObjectGroup;
+ void SetParentMap(GeoTiledMap& rMap);
+ void ResetParentMap();
+
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObject);
+
+ class GeoMapObjectImpl;
+ std::auto_ptr<GeoMapObjectImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOMAPOBJECT_H
diff --git a/inc/engine/maps/GeoMapObjectMarker.h b/inc/engine/maps/GeoMapObjectMarker.h
new file mode 100755
index 0000000..d25a7d5
--- /dev/null
+++ b/inc/engine/maps/GeoMapObjectMarker.h
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTMARKER_H
+#define MAPOBJECTMARKER_H
+
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#endif
+
+#include "maps/GeoMapObject.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#include "graphic/Bitmap.h"
+#include "graphic/FloatPoint.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GlTexture;
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a map marker object that indicates a location
+ * with an image (icon).
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectMarker : public GeoMapObject
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoMapObjectMarker();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoMapObjectMarker();
+
+ /**
+ * This method retrieves the object type.
+ *
+ * @return A member of the enumerated data type indicating the type of the
+ * given object.
+ */
+ virtual Type GetType() const;
+
+ /**
+ * This method retrieves the object bounding box.
+ *
+ * @return An object encapsulating the bounding box of the given object.
+ */
+ virtual GeoBoundingBox GetBoundingBox() const;
+
+ /**
+ * This method sets the position of the given object.
+ *
+ * @param rCoord A constant reference to an object containing the geographic
+ * coordinates of the position of the given object.
+ */
+ virtual void SetPosition(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the position of the given object.
+ *
+ * @return A constant reference to an object containing the geographic
+ * coordinates of the position of the given object.
+ */
+ const GeoCoordinates& GetPosition() const;
+
+ /**
+ * This method sets the marker image (icon).
+ *
+ * @param rBitmap A constant reference to an object encapsulating the icon
+ * image.
+ */
+ void SetBitmap(const Tizen::Maps::Bitmap& rBitmap);
+
+ /**
+ * This method retrieves the width of the bitmap (icon).
+ *
+ * @return A value indicating the width of the bitmap (icon) in pixels.
+ */
+ unsigned int GetWidth() const;
+
+ /**
+ * This method retrieves the height of the bitmap (icon).
+ *
+ * @return A value indicating the height of the bitmap (icon) in pixels.
+ */
+ unsigned int GetHeight() const;
+
+ /**
+ * This method sets a value that defines the point on the marker bitmap that
+ * touches the map. The point is calculated relative to the top-left corner
+ * of the bitmap.
+ *
+ * @param rOrigin A floating point value defining the origin.
+ */
+ void SetMarkerOrigin(const Tizen::Maps::FloatPoint& rOrigin);
+
+ /**
+ * This method retrieves a value that represents the point on the marker
+ * bitmap that "touches" the map. The point is calculated relative to the
+ * top-left corner of the bitmap.
+ *
+ * @return A floating point value defining the bitmap origin.
+ */
+ Tizen::Maps::FloatPoint GetMarkerOrigin() const;
+
+ /**
+ * This method retrieves a value that represents the point on the marker
+ * bitmap that "touches" the map. The point is calculated relative to the
+ * top-left corner of the bitmap.
+ *
+ * @return An object containing the pixel coordinates of the bitmap origin
+ * relative to the top-left corner of the bitmap.
+ */
+ Tizen::Maps::Point GetMarkerOriginInPx() const;
+
+ /**
+ * This method retrieves the marker bitmap as a GL texture.
+ *
+ * @return A pointer to the GL texture of the bitmap.
+ */
+ GlTexture* GetGlTexture() const;
+
+ /**
+ * This method checks if the object is valid (it geographic location is
+ * defined).
+ *
+ * @return visible A Boolean, <code>true</code> if the object is valid,
+ * otherwise <code>false</code>.
+ */
+ virtual bool IsValid() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectMarker);
+
+ class GeoMapObjectMarkerImpl;
+ GeoMapObjectMarkerImpl* m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObjectPolygon.h b/inc/engine/maps/GeoMapObjectPolygon.h
new file mode 100755
index 0000000..eaa2b5f
--- /dev/null
+++ b/inc/engine/maps/GeoMapObjectPolygon.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTPOLYGON_H
+#define MAPOBJECTPOLYGON_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoMapObject.h"
+#include "common/GeoCoordinates.h"
+#include <tr1/functional>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Color.h"
+#else
+namespace Tizen { namespace Graphics { class Color; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a map polygon object. A polygon is a closed polyline,
+ * therefore, in addition to a polyline, its properties include a fill color.
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectPolygon : public GeoMapObject
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoMapObjectPolygon();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoMapObjectPolygon();
+
+ /**
+ * This method sets the path of the polygon, which is a list of locations
+ * that the path (line) connects.
+ *
+ * @param path A constant reference to an object containing a list of
+ * locations defined in terms of their geographic coordinates.
+ * Paths representing self-intersecting polygons are not supported.
+ * Such paths are not rendered on the map.
+ */
+ void SetPath(const GeoCoordinateList& path);
+
+ /**
+ * This method appends the location of a new vertex to the polyline path.
+ *
+ * Note that self-intersecting polygons are not supported, therefore, if the
+ * given polygon should become self-intersecting as a result of this
+ * operation, it cannot be rendered on the map.
+ *
+ * @param rCoord A constant reference to an object specifying the geographic
+ * coordinates of a new vertex to be added to the path.
+ */
+ void AppendToPath(const GeoCoordinates& rCoord);
+
+ /**
+ * This method retrieves the path of the polygon, which is a list of
+ * objects containing the geographic coordinates of its vertices.
+ *
+ * @return A reference to an object containing a list of vertices defined
+ * in terms of their geographic coordinates.
+ */
+ GeoCoordinateList GetPath() const;
+
+ /**
+ * This typedef defines a function object as a type. The function object can
+ * be called when the path of the polygon has changed. A function object of
+ * this type returns <code>void</code> and receives a constant reference to
+ * a <code>GeoMapObject</code> as an argument.
+ */
+ typedef std::tr1::function<void (const GeoMapObject&)> PathChangedFunctor;
+
+ /**
+ * This method sets a callback to be invoked when the polygon path has
+ * changed.
+ *
+ * @param pathChanged A function object to be called when the path has
+ * changed.
+ */
+ void SetPathChangedNotifier(PathChangedFunctor pathChanged);
+
+ /**
+ * This method retrieves the bounding box of the polygon.
+ *
+ * @return An object encapsulating the bounding box of the given polygon
+ * object.
+ */
+ GeoBoundingBox GetBoundingBox() const;
+
+ /**
+ * This method retrieves the current value of the polygon fill color.
+ *
+ * @return An object encapsulating the fill color.
+ */
+ Tizen::Maps::Color GetFillColor() const;
+
+ /**
+ * This method sets the current value of the polygon fill color.
+ *
+ * @param fillColor An object encapsulating the fill color.
+ */
+ void SetFillColor(const Tizen::Maps::Color& fillColor);
+
+ /**
+ * This typedef defines a fill-color-changed function object as a
+ * type. The function object can be called when the polygon fill color
+ * has changed. A function object of this type returns <code>void</code> and
+ * receives a constant reference to a <code>GeoMapObject</code> as an
+ * argument.
+ */
+ typedef std::tr1::function<void (const GeoMapObject&)> FillColorChangedFunctor;
+
+ /**
+ * This method sets a callback to be invoked when the polygon fill color
+ * has changed.
+ *
+ * @param fillColorChanged A function object to be called when the polygon
+ * fill color has changed.
+ */
+ void SetFillColorChangedNotifier(FillColorChangedFunctor fillColorChanged);
+
+ /**
+ * This method retrieves the object type of the given polygon.
+ *
+ * @return A member of the enumerated data type indicating the type of the
+ * given polygon object.
+ */
+ Type GetType() const;
+
+ /**
+ * This method sets a flag to indicate if the given object is visible.
+ *
+ * @return visible A Boolean, <code>true</code> if the object is visible,
+ * otherwise <code>false</code>.
+ */
+ virtual void SetVisible(bool visible);
+
+ /**
+ * This method checks if the object can be rendered on the map.
+ *
+ * @return A Boolean, <code>true</code> if the object can be rendered,
+ * otherwise <code>false</code>.
+ */
+ virtual bool IsValid() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectPolygon);
+
+ class GeoMapObjectPolygonImpl;
+ GeoMapObjectPolygonImpl* m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObjectPolyline.h b/inc/engine/maps/GeoMapObjectPolyline.h
new file mode 100755
index 0000000..105064b
--- /dev/null
+++ b/inc/engine/maps/GeoMapObjectPolyline.h
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTPOLYLINE_H
+#define MAPOBJECTPOLYLINE_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoMapObject.h"
+#include "common/GeoCoordinates.h"
+#include <tr1/functional>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Color.h"
+#else
+namespace Tizen { namespace Graphics { class Color; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a map polyline object. A polyline is a line that
+ * connects a number of points on the map. Its properties include stroke color
+ * and thickness.
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectPolyline : public GeoMapObject
+{
+public:
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoMapObjectPolyline();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoMapObjectPolyline();
+
+ /**
+ * This method sets the path of the polyline, which is a list of locations
+ * that the polyline connects.
+ *
+ * @param path A constant reference to an object containing a list of
+ * locations defined in terms of their geographic coordinates.
+ */
+ void SetPath(const GeoCoordinateList& path);
+
+ /**
+ * This method appends the location of a new vertex to the polyline path.
+ *
+ * @param aCoord A constant reference to an object specifying the geographic
+ * coordinates of a new vertex to be added to the path.
+ */
+ void AppendToPath(const GeoCoordinates& aCoord);
+
+ /**
+ * This method retrieves the path of the polyline, which is a list of
+ * locations that the polyline connects.
+ *
+ * @return A reference to an object containing a list of locations defined
+ * in terms of their geographic coordinates.
+ */
+ GeoCoordinateList GetPath() const;
+
+ /**
+ * This typedef defines a function object as a type. The function object can
+ * be called when the polyline path has changed. A function object of this
+ * type returns <code>void</code> and receives a constant reference to a
+ * <code>GeoMapObject</code> as an argument.
+ */
+ typedef std::tr1::function<void (const GeoMapObject&)> PathChangedFunctor;
+
+ /**
+ * This method sets a callback to be invoked when the polyline path has
+ * changed.
+ *
+ * @param pathChanged A function object to be called when the path has
+ * changed.
+ */
+ void SetPathChangedNotifier(PathChangedFunctor pathChanged);
+
+ /**
+ * This method retrieves the current value of the polyline stroke color.
+ *
+ * @return An object encapsulating the stroke color.
+ */
+ Tizen::Maps::Color GetStrokeColor() const;
+
+ /**
+ * This method sets the value of the polyline stroke color.
+ *
+ * @param strokeColor A constant reference to an object encapsulating the
+ * stroke color.
+ */
+ void SetStrokeColor(const Tizen::Maps::Color& strokeColor);
+
+ /**
+ * This typedef defines a function object as a type. The function object can
+ * be called when the polyline stroke color has changed. A function object
+ * of this type returns <code>void</code> and receives a constant reference
+ * to a <code>GeoMapObject</code> as an argument.
+ */
+ typedef std::tr1::function<void (const GeoMapObject&)> StrokeColorChangedFunctor;
+
+ /**
+ * This method sets a callback to be invoked when the polyline stroke color
+ * has changed.
+ *
+ * @param strokeColorChanged A function object to be called when the polyline
+ * stroke color has changed.
+ */
+ void SetStrokeColorChangedNotifier(StrokeColorChangedFunctor strokeColorChanged);
+
+ /**
+ * This method retrieves a value indicating the polyline stroke thickness in
+ * pixels.
+ *
+ * @return A value indicating the stroke thickness in pixels.
+ */
+ int GetStrokeThickness() const;
+
+ /**
+ * This method sets a value indicating the polyline stroke thickness in
+ * pixels.
+ *
+ * @strokeThickness A value indicating the stroke thickness in pixels.
+ */
+ void SetStrokeThickness(int strokeThickness);
+
+ /**
+ * This typedef defines a function object as a type. The function object can
+ * be called when the polyline stroke thickness has changed. A function
+ * object of this type returns <code>void</code> and receives a constant
+ * reference to a <code>GeoMapObject</code> as an argument.
+ */
+ typedef std::tr1::function<void (const GeoMapObject&)> StrokeThicknessChangedFunctor;
+
+ /**
+ * This method sets a callback to be invoked when the polyline stroke
+ * thickness has changed.
+ *
+ * @param strokeThicknessChanged A function object to be called when the polyline
+ * stroke thickness has changed.
+ */
+ void SetStrokeThicknessChangedNotifier(StrokeThicknessChangedFunctor strokeThicknessChanged);
+
+ /**
+ * This method retrieves the bounding box of the polyline.
+ *
+ * @return An object encapsulating the bounding box of the given polyline
+ * object.
+ */
+ GeoBoundingBox GetBoundingBox() const;
+
+ /**
+ * This method retrieves the object type of the given polyline.
+ *
+ * @return A member of the enumerated data type indicating the type of the
+ * given polyline object.
+ */
+ Type GetType() const;
+
+ /**
+ * This method sets a flag to indicate if the given object is visible.
+ *
+ * @return visible A Boolean, <code>true</code> if the object is visible,
+ * otherwise <code>false</code>.
+ */
+ virtual void SetVisible(bool visible);
+
+ /**
+ * This method checks if the object was built with legal input. A valid
+ * polyline must have a path that contains of at least two vertices.
+ *
+ * @return visible A Boolean, <code>true</code> if the object is valid,
+ * otherwise <code>false</code>.
+ */
+ virtual bool IsValid() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectPolyline);
+
+ class GeoMapObjectPolylineImpl;
+ std::auto_ptr<GeoMapObjectPolylineImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoObjectProvider.h b/inc/engine/maps/GeoObjectProvider.h
new file mode 100755
index 0000000..b742203
--- /dev/null
+++ b/inc/engine/maps/GeoObjectProvider.h
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOOBJECTPROVIDER_H
+#define GEOOBJECTPROVIDER_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProvider.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoMapObject;
+class GeoProjection;
+
+/**
+ * This class encapsulates a map object provider which manages all the objects
+ * to be displayed in any of the tiles that make up the visible map. The
+ * provider object can load tiles, add and remove objects to them, and retrieve
+ * objects from a specific pixel location.
+ *
+ * \ingroup maps
+ */
+class GeoObjectProvider: public GeoProvider
+{
+public:
+
+ /**
+ * This method is a constructor.
+ *
+ * @param projection A Pointer to the projection to use.
+ *
+ * @param tileSize a value indicating the size of the map tile to use.
+ */
+ GeoObjectProvider(GeoProjection* projection, int tileSize);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoObjectProvider();
+
+ /**
+ * This method loads the tile specified by the caller.
+ *
+ * @param tileKey A constant reference to an object that specifies a tile
+ * key.
+ *
+ * @return A value representing the identifier of the issued request.
+ */
+ RestItemHandle::RequestId LoadTile(const TileKey& tileKey);
+
+ /**
+ * This method aborts loading of the tile specified by the caller.
+ *
+ * @param tile A constant reference to an object encapsulating the tile
+ * whose loading is to be aborted.
+ */
+ void AbortTile(const TilePtr& tile);
+
+ /**
+ * This method sets a function to be invoked when the tile has loaded.
+ *
+ * @param signal A constant reference to a function to be invoked when the
+ * tile has loaded; the function accepts a reference to a
+ * <code>TileKey</code> object and a pointer to the tile bitmap (see
+ * also <code>GeoProvider</code>).
+ */
+ void TileLoaded(const TileLoadedFunc& signal);
+
+ /**
+ * This method sets function to be invoked when loading the tile failed.
+ *
+ * @param signal A constant reference to a function to be invoked when the
+ * tile load failed; the function accepts a reference to the
+ * corresponding <code>ErrorBase</code> object
+ * <code>GeoProvider</code>).
+ */
+ void TileFailed(const TileFailedFunc& signal);
+
+ /**
+ * This method adds an object specified by the caller.
+ *
+ * @param obj A pointer to the object to add.
+ */
+ void AddObject(GeoMapObject* obj, bool transferOwnership);
+
+ /**
+ * This method removes an object specified by the caller. The objects
+ * are also deleted if we have ownership (see AddObject)
+ *
+ * @param obj A pointer to the object to remove.
+ * @return Boolean value indicating if the removal of the object was successful
+ */
+ bool RemoveObject(GeoMapObject* obj);
+
+ /**
+ * This method removes all objects specified by the caller. The objects
+ * are also deleted if we have ownership (see AddObject)
+ *
+ * @param obj A pointer to the object to remove.
+ * @return Boolean value indicating if the removal of the object was successful
+ */
+ bool RemoveAllObjects();
+
+ /**
+ * This method retrieves an object at the screen position specified by the
+ * caller.
+ *
+ * @param point A constant reference to an object specifying the screen
+ * coordinates of a location from which to retrieve an object.
+ */
+ GeoMapObject* GetObjectAtScreenPosition(const Tizen::Maps::Point& point);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoObjectProvider);
+
+ class GeoObjectProviderImpl;
+ std::auto_ptr<GeoObjectProviderImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOOBJECTPROVIDER_H
diff --git a/inc/engine/maps/GeoProjection.h b/inc/engine/maps/GeoProjection.h
new file mode 100755
index 0000000..b7dbb5b
--- /dev/null
+++ b/inc/engine/maps/GeoProjection.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROJECTION_H
+#define GEOPROJECTION_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/DoubleMatrix4.h"
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#else
+#include <FGraphics.h>
+#include <FBaseDoubleMatrix4.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint;
+class DoublePoint3;
+class GeoCoordinates;
+class GeoProjectionNode;
+
+class GeoProjection
+{
+public:
+ GeoProjection();
+ virtual ~GeoProjection();
+
+ virtual Tizen::Maps::Point geoToPixel(const GeoCoordinates& geo) const = 0;
+ virtual GeoCoordinates pixelToGeo(const Tizen::Maps::Point& pixel) const = 0;
+
+ virtual std::vector<GeoProjectionNode*> projectRoot();
+ virtual GeoProjectionNode* projectQuad(GeoProjectionNode* parent, int quad);
+
+ virtual void setTileSize(const Tizen::Maps::Dimension& size);
+ Tizen::Maps::Dimension tileSize() const;
+
+ virtual void setScreenSize(const Tizen::Maps::Dimension& size);
+ Tizen::Maps::Dimension screenSize() const;
+
+ virtual void setLevel(double value);
+ double level() const;
+
+ virtual void setMaximumLevel(double value);
+ double maximumLevel() const;
+
+ virtual void setMinimumLevel(double value);
+ double minimumLevel() const;
+
+ virtual void setHeading(double value);
+ double heading() const;
+
+ virtual void setGeoCenter(const GeoCoordinates& value);
+ GeoCoordinates geoCenter() const;
+
+ virtual bool setGeoCenterInPx(const Tizen::Maps::Point& value);
+ Tizen::Maps::Point screenCenter() const;
+
+ DoublePoint projectPoint(const DoublePoint& point) const;
+
+protected:
+ virtual void filter(GeoProjectionNode& transform,const std::vector<DoublePoint3>& points) = 0;
+ virtual DoublePoint3 projectPoint(double x, double y, double z=0) const = 0;
+
+ Tizen::Maps::DoubleMatrix4& GetMatrix();
+ const Tizen::Maps::DoubleMatrix4& GetMatrix() const;
+ Tizen::Maps::DoubleMatrix4& GetInverse();
+ const Tizen::Maps::DoubleMatrix4& GetInverse() const;
+
+ Tizen::Maps::Dimension& GetTileSize();
+ Tizen::Maps::Dimension& GetScreenSize();
+ GeoCoordinates& GetGeoCenter();
+ double& GetLevel();
+ double& GetHeading();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProjection);
+ friend class TestGeoProjection;
+
+ class GeoProjectionImpl;
+ GeoProjectionImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOPROJECTION_P_H
diff --git a/inc/engine/maps/GeoProjectionNode.h b/inc/engine/maps/GeoProjectionNode.h
new file mode 100755
index 0000000..74e9c02
--- /dev/null
+++ b/inc/engine/maps/GeoProjectionNode.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROJECTIONNODE_P_H
+#define GEOPROJECTIONNODE_P_H
+
+#include <vector>
+#include <tr1/memory>
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#include <FMediaImage.h>
+#endif
+
+#include "internal/DoublePoint.h"
+#include "internal/DoublePoint3.h"
+#ifdef TIZEN_MIGRATION
+// chanywa #include "base/BaseByteBuffer.h"
+#endif
+
+#include "maps/GeoTile.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoProjectionNode
+{
+public:
+ GeoProjectionNode();
+ GeoProjectionNode(const DrawableBitmapPtr& image);
+ ~GeoProjectionNode();
+
+ std::vector<DoublePoint3> m_points;
+ std::vector<DoublePoint3> m_subPoints;
+
+ DrawableBitmapPtr m_image;
+ DrawableBitmapPtr m_layer;
+ double m_r;
+ double m_x;
+ double m_y;
+ bool m_clipped;
+ bool m_culled;
+ bool m_split;
+ bool m_requestImage;
+ bool m_peekImage;
+ bool m_postdrawing;
+ bool m_drawing;
+ bool m_predrawing;
+ int m_splitCount;
+ int m_tx;
+ int m_ty;
+ int m_stx;
+ int m_sty;
+ int m_rtx;
+ int m_rty;
+ int m_rlevel;
+ int m_level;
+ float m_opacity;
+
+ enum{ NUM_OF_CHILDREN = 4 };
+ GeoProjectionNode* m_children[NUM_OF_CHILDREN];
+
+ void setImage(const DrawableBitmapPtr& image);
+ void applyImage(const DrawableBitmapPtr& image,const float opacity);
+
+ bool requestImage(){ return m_requestImage; }
+ bool peekImage(){ return m_peekImage; }
+ bool split(){ return m_split; }
+ bool postdrawing(){ return m_postdrawing && m_image != 0; }
+ bool drawing(){ return m_drawing && m_image != 0; }
+ bool predrawing(){ return m_predrawing && m_image != 0; }
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProjectionNode);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // QGEOPROJECTED_P_H
diff --git a/inc/engine/maps/GeoProvider.h b/inc/engine/maps/GeoProvider.h
new file mode 100755
index 0000000..938593e
--- /dev/null
+++ b/inc/engine/maps/GeoProvider.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROVIDER_P_H_
+#define GEOPROVIDER_P_H_
+
+#include <tr1/functional>
+
+#include "common/HereMaps_global.h"
+#include "common/RestItemHandle.h"
+#include "maps/GeoTile.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileKey;
+class ErrorBase;
+class DrawableBitmap;
+
+/**
+ * This class is the base class for provider classes in the Maps API. An example
+ * of a derived class is <code>GeoObjectProvider</code>.
+ *
+ * \ingroup maps
+ */
+class GeoProvider
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoProvider() {}
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoProvider() {}
+
+ /**
+ * This method loads the map tile specified by the caller. The method must
+ * be implemented by the derived classes.
+ *
+ * @param tileKey A constant reference to an object that specifies a tile
+ * key.
+ *
+ * @return A value representing the identifier of the tile request.
+ */
+ virtual RestItemHandle::RequestId LoadTile(const TileKey& tileKey) = 0;
+
+ /**
+ * This method aborts loading of the map tile specified by the caller. The
+ * method must be implemented by the derived classes.
+ *
+ * @param tile The tile whose loading is to be aborted.
+ */
+ virtual void AbortTile(const TilePtr& tile) = 0;
+
+ /**
+ * This typedef defines a function as a type. The function can be called
+ * when the map tile has been loaded. A function of this type accepts a
+ * reference to a <code>TileKey</code> object, a pointer to the tile
+ * bitmap and a reference to an instance of <code>GeoProvider</code>.
+ */
+ typedef std::tr1::function<void (const TileKey&, DrawableBitmapPtr, GeoProvider&)> TileLoadedFunc;
+
+ /**
+ * This method registers a function to be invoked when the tile has loaded.
+ *
+ * @param signal A constant reference to a function to be invoked when the
+ * tile has loaded; the function accepts a reference to a
+ * <code>TileKey</code> object and a pointer to the tile bitmap.
+ */
+ virtual void TileLoaded(const TileLoadedFunc& signal) = 0;
+
+ /**
+ * This typedef defines a function as a type. The function can be called
+ * when an attempt to load a map tile has failed. A function of this type
+ * accepts a reference to a <code>TileKey</code> object and a reference to
+ * an object containing information about the error that occurred (an
+ * instance of <code>ErrorBase</code>).
+ */
+ typedef std::tr1::function<void (const TileKey&, const ErrorBase&)> TileFailedFunc;
+
+ /**
+ * This method sets function to be invoked when an attempt to load a tile
+ * has failed.
+ *
+ * @param signal A constant reference to a function to be invoked when the
+ * tile load has failed; the callback function accepts a reference to
+ * a <code>TileKey</code> object and a reference to an object
+ * encapsulating information about the error that occurred (an
+ * instance of <code>ErrorBase</code>).
+ */
+ virtual void TileFailed(const TileFailedFunc& signal) = 0;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProvider);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOPROVIDER_P_H_ */
diff --git a/inc/engine/maps/GeoProviderManager.h b/inc/engine/maps/GeoProviderManager.h
new file mode 100755
index 0000000..316f485
--- /dev/null
+++ b/inc/engine/maps/GeoProviderManager.h
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROVIDERMANAGER_P_H_
+#define GEOPROVIDERMANAGER_P_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+#include "maps/GeoTile.h"
+#include "maps/GeoProvider.h"
+
+#ifdef TIZEN_MIGRATION
+#include "base/Timer.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTiledMap;
+class QueryListener;
+
+/**
+ * This class encapsulates management of all the providers of tiles and map
+ * objects. It registers providers and requests tiles and objects on their
+ * behalf, eventually compositing each tile in the map to ensure the tiles
+ * contain not only the map tile bitmaps, but also any markers, polylines and
+ * polygons that must be drawn on top of the bitmaps.
+ *
+ * The virtual methods defined on this class require implementation by derived
+ * classes.
+ *
+ * \ingroup maps
+ */
+class GeoProviderManager : public Tizen::Maps::ITimerEventListener
+{
+public:
+ /**
+ * This method retrieves an object representing the key for a tile on the
+ * basis of the zoom level and coordinates of the tile in the tile grid at
+ * that zoom level.
+ *
+ * @param level A value indicating the zoom level.
+ *
+ * @param x A value representing the x-coordinate in the tile grid.
+ *
+ * @param y A value representing the y-coordinate in the tile grid.
+ *
+ * @return An object representing the tile key.
+ */
+ TileKey GetKey(int level, int x, int y);
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoProviderManager();
+
+ /**
+ * This method is a constructor.
+ *
+ * @param rMap A reference to the tile map whose tiles are processed by the
+ * given manager object.
+ */
+ GeoProviderManager(GeoTiledMap& rMap);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoProviderManager();
+
+ /**
+ * This method is invoked when the timer expires.
+ *
+ * @param timer A reference to the timer object.
+ */
+ virtual void OnTimerExpired(Tizen::Maps::Timer& timer);
+
+ /**
+ * This method checks if a previously requested tile is available.
+ *
+ * @param level A value indicating the zoom level.
+ *
+ * @param x A value representing the x-coordinate in the tile grid.
+ *
+ * @param y A value representing the y-coordinate in the tile grid.
+ *
+ * @return A pointer to the tile object (which is <code>NULL</code> if the
+ * tile is not available).
+ */
+ TilePtr PeekTile(int level, int x, int y);
+
+ /**
+ * This method checks if a previously requested tile is available.
+ *
+ * @param key An object representing the key that identifies the tile to check.
+ *
+ * @return A pointer to the tile object (which is <code>NULL</code> if the
+ * tile is not available).
+ */
+ TilePtr PeekTile(const TileKey& key);
+
+ /**
+ * This method requests a tile.
+ *
+ * @param level A value indicating the zoom level.
+ *
+ * @param x A value representing the x-coordinate in the tile grid.
+ *
+ * @param y A value representing the y-coordinate in the tile grid.
+ *
+ * @return A pointer to the tile object (which is <code>NULL</code> if the
+ * tile is not available).
+ */
+ TilePtr RequestTile(int level, int x, int y);
+
+ /**
+ * This method removes the tile specified by the caller from the cache.
+ *
+ * @param tile A constant reference to the tile object to remove from the cache.
+ */
+ void RemoveCachedTile(const TilePtr& tile);
+
+ /**
+ * This method clears the map tile cache.
+ */
+ void ClearCache();
+
+ /**
+ * This method clears any map objects from the cache.
+ *
+ * @param bClearAndRequest A Boolean indicating if the map objects should be
+ * rerequested when they have been cleared (<code>true</code>,
+ * default) or not <code>fault</code>.
+ */
+ void ClearCachedMapObjectsOnly(bool bClearAndRequest=true);
+
+ /**
+ * This method retrieves a count of cached map tiles.
+ *
+ * @return A value indicating the number of cached map tiles.
+ */
+ size_t GetNumCachedTiles() const;
+
+ /**
+ * This method adds a provider to those managed by the given manager instance.
+ *
+ * @param provider A pointer to a provider object to add.
+ */
+ void AddProvider(GeoProvider* provider);
+
+ /**
+ * This method removes the provider identified by the caller to those
+ * managed by the given manager instance.
+ *
+ * @param provider A pointer to a provider object to remove.
+ */
+ bool RemoveProvider(GeoProvider* pProvider);
+
+ /**
+ * This method retrieves a provider matching the index supplied by the caller.
+ *
+ * @param idx A value of the index from which to retrieve the provider.
+ *
+ * @return A pointer to the provider object or <code>NULL</code> if the
+ * supplied index is invalid.
+ */
+ GeoProvider* GetProvider(size_t idx) const;
+
+ /**
+ * This method obtains the count of providers managed by the given
+ * instance of <code>GeoProviderManager</code>.
+ *
+ * @return A value representing the count of providers.
+ */
+ size_t GetNumProviders() const;
+
+ /**
+ * This method is invoked when a tile has been loaded. It adds the
+ * tile to the list of loaded files, removes it from the list of loading
+ * tiles and the cache, and ensures it is displayed.
+ *
+ * @param rKey A constant reference to a key object that identifies the
+ * loaded tile.
+ *
+ * @param image A pointer to the tile image object.
+ *
+ * @param rProvider The provider for which the tile has been acquired.
+ */
+ void HandleTileLoaded(const TileKey& rKey, DrawableBitmapPtr image, GeoProvider& rProvider);
+
+ /**
+ * This method is invoked when a tile has been loaded. It adds the
+ * tile to the list of loaded files, removes it from the list of loading
+ * tiles and the cache, and ensures it is displayed.
+ *
+ * @param rKey A constant reference to a key object that identifies the
+ * tile.
+ *
+ * @param rError A constant reference to an object containing information
+ * about the error that occurred.
+ */
+ void HandleTileFailed(const TileKey& rKey, const ErrorBase& rError);
+
+ /**
+ * This method starts the process of loading the next requested file.
+ */
+ void StartNextTileLoad();
+
+ /**
+ * This method sets a value indicating the maximum number of pending
+ * requests.
+ *
+ * @param uLimit A value indicating the maximum number of pending requests.
+ */
+ void SetPendingRequestsLimit(size_t uLimit);
+
+ /**
+ * This method retrieves a value indicating the maximum number of pending
+ * requests.
+ *
+ * @return A value indicating the maximum number of pending requests.
+ */
+ size_t GetPendingRequestsLimit() const;
+
+ /**
+ * This method retrieves a value indicating the count of pending
+ * requests.
+ *
+ * @return A value indicating how many requests are pending.
+ */
+ size_t GetNumPendingRequests() const;
+
+ /**
+ * This method sets a value indicating the maximum number of tiles that can
+ * be cached.
+ *
+ * @param uLimit A value indicating the maximum number of cached tiles.
+ */
+ void SetCachedTilesLimit(size_t uLimit);
+
+ /**
+ * This method retrieves a value indicating the maximum number of tiles that
+ * can be cached.
+ *
+ * @return A value indicating the maximum number of cached tiles.
+ */
+ size_t GetCachedTilesLimit() const;
+
+private:
+ void LoadTile(const TilePtr tile, unsigned int uProviderLevel);
+ void AbortTile(const TilePtr tile);
+ void LogTile(const String& text,const TilePtr& tile);
+ void LogTile(const String& text,int level,int x,int y);
+
+ void BeginMarking();
+ void EndMarking();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProviderManager);
+ friend class GeoTiledMap;
+ friend class TestGeoProviderManager;
+ class GeoProviderManagerImpl;
+ GeoProviderManagerImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoTile.h b/inc/engine/maps/GeoTile.h
new file mode 100755
index 0000000..8b325b2
--- /dev/null
+++ b/inc/engine/maps/GeoTile.h
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILE_H
+#define GEOTILE_H
+
+#include <tr1/memory>
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#include <FGraphicsOpengl2.h>
+#endif
+
+#include "common/RestItemHandle.h"
+#include "maps/DrawableBitmap.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoProviderManager;
+
+#if 0 //note: this class has been moved to a separate file
+/**
+ * This class encapsulates a bitmap that can be drawn in a graphics context (on
+ * the map, whether the bitmap can represent a tile).
+ *
+ * A map tile supports two layers, the map tile layer and a map objects layer,
+ * (which overlays the map tile layer). The latter may be
+ * <code>NULL</code> if no objects have been added to the map.
+ *
+ * \ingroup maps
+ */
+class DrawableBitmap
+{
+public:
+ /**
+ * This typedef defines a render handle as a type.
+ */
+ typedef UInt RenderHandle;
+
+
+ /**
+ * This method is a constructor. It initiates a new instance using the
+ * bitmap pointer supplied by the caller.
+ *
+ * @param bitmap A pointer to a bitmap object.
+ */
+ DrawableBitmap(std::auto_ptr<Tizen::Graphics::Bitmap>& bitmap)
+ : m_bitmap(bitmap)
+ , m_renderHandle(0)
+ {
+ }
+
+ /**
+ * This method is the destructor. It destroys the given instance and rests
+ * the render handle.
+ */
+ ~DrawableBitmap()
+ {
+ ResetRenderHandle();
+ }
+
+ /**
+ * This method resets the render handle for the given bitmap instance.
+ */
+ void ResetRenderHandle()
+ {
+ if (m_renderHandle)
+ {
+ Tizen::Graphics::Opengl::glDeleteTextures(1, &m_renderHandle);
+ }
+ m_renderHandle = 0;
+ }
+
+ /**
+ * This method obtains a pointer to the bitmap.
+ *
+ * @return A pointer to the bitmap.
+ */
+ Tizen::Graphics::Bitmap* GetBitmap() const
+ {
+ return m_bitmap.get();
+ }
+
+ /**
+ * This method sets the render handle for the given bitmap instance to the
+ * value provided by the caller.
+ *
+ * @param aRenderHandle A new value for the render handle.
+ */
+ void SetRenderHandle(RenderHandle aRenderHandle)
+ {
+ m_renderHandle = aRenderHandle;
+ }
+
+ /**
+ * This method retrieves the current render handle.
+ *
+ * @return A unsigned integer representing the render handle.
+ */
+ RenderHandle GetRenderHandle() const
+ {
+ return m_renderHandle;
+ }
+
+private:
+ std::auto_ptr<Tizen::Graphics::Bitmap> m_bitmap;
+ RenderHandle m_renderHandle;
+};
+
+//-----------------------------------------------------------------------------
+
+typedef std::tr1::shared_ptr<DrawableBitmap> DrawableBitmapPtr;
+
+#endif
+
+class TileKey;
+
+
+/**
+ * This class encapsulates a map tile. A map tile is a square bitmap that is
+ * fetched from a grid representing the normalized Mercator projection. The
+ * position of the tile in this grid depends on the map zoom level and is
+ * defined by the x and y coordinates. At the lowest zoom level, there is only
+ * one tile. At the next higher zoom level, the grid is 2 x 2. With each zoom
+ * level above that, the x-size and the y-size of the grid increase by a power
+ * of two.
+ *
+ * \ingroup maps
+ */
+class GeoTile
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for event types.
+ */
+ enum EventType
+ {
+ ET_OnTileFetcherReply = 0, ///< Indicates an event fired when a reply to
+ /// a tile fetch request arrives.
+ ET_OnFailure ///< Indicates an event fired on failure.
+ };
+
+
+ /**
+ * This property holds a value representing the tile size.
+ */
+ static int size;
+
+ /**
+ * This method is a contructor. It initializes a new instance of the class
+ * using the manager reference and the tile key provided by the caller.
+ *
+ * @param rKey A constant reference to a key object that identifies the tile.
+ */
+ GeoTile(const TileKey& rKey);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoTile();
+
+ /**
+ * This method retrieves the tile key.
+ *
+ * @return A constant reference to the tile key object for the given tile.
+ */
+ const TileKey& GetKey() const;
+
+ /**
+ * This method sets a flag to indicate whether the given map tile has been
+ * requested for display.
+ *
+ * @param b A Boolean indcating if the given map tile has been requested
+ *( <code>true</code>) or not (<code>false</code>).
+ */
+ void SetMarked(bool b);
+
+ /**
+ * This method checks whether the given map tile has been
+ * requested for display.
+ *
+ * @return A Boolean indcating if the given map tile has been requested
+ *( <code>true</code>) or not (<code>false</code>).
+ */
+ bool IsMarked() const;
+
+ /**
+ * This method retrieves a point to the tile image.
+ *
+ * @return A pointer to the tile image.
+ */
+ DrawableBitmapPtr GetImage() const;
+
+ /**
+ * This method sets the tile image.
+ *
+ * @param image A pointer to the tile image.
+ */
+ void SetImage(DrawableBitmapPtr image);
+
+ /**
+ * This method retrieves an object that represents a pending tile request to
+ * the REST server.
+ *
+ * @return A value representing the identifier of the issued request.
+ */
+ const RestItemHandle::RequestId GetPendingRequest() const;
+
+ /**
+ * This method marks a tile request to the REST server as pending.
+ *
+ * @aRequestId An identifier representing a tile request.
+ */
+ void SetPendingRequest(RestItemHandle::RequestId aRequestId);
+
+ /**
+ * This method sets/creates the map object layer.
+ *
+ * A tile supports two layers, the map tile layer on which the tile is
+ * drawn, and a layer superimposed on top of the map tile layer, which
+ * contains the map objects that may have been added/created. If no objects
+ * have been added/created, the map object layer is <code>NULL</code>.
+ *
+ * @param layer A pointer to an instance of <code>DrawableBitmap</code> that
+ * constitutes the object layer.
+ */
+ void SetMapObjectLayer(DrawableBitmapPtr layer);
+
+ /**
+ * This method retrieves a pointer to the map object layer.
+ *
+ * A tile supports two layers, the map tile layer on which the tile is
+ * drawn, and a layer superimposed on top of the map tile layer, which
+ * contains the map objects that may have been added/created. If no objects
+ * have been added/created, the map object layer is <code>NULL</code>.
+ *
+ * @return A pointer to an instance of <code>DrawableBitmap</code> that
+ * constitutes the object layer.
+ */
+ DrawableBitmapPtr GetMapObjectLayer() const;
+
+ /**
+ * This method removes the map object layer.
+ *
+ * A tile supports two layers, the map tile layer on which the tile is
+ * drawn, and a layer superimposed on top of the map tile layer, which
+ * contains the map objects that may have been added/created. If no objects
+ * have been added/created, the map object layer is <code>NULL</code>.
+ */
+ void RemoveMapObjectLayer();
+
+ /**
+ * This methods aborts loading of the given tile.
+ */
+ void AbortLoading();
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoTile);
+
+ class GeoTileImpl;
+ GeoTileImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<GeoTile> TilePtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoTileProvider.h b/inc/engine/maps/GeoTileProvider.h
new file mode 100755
index 0000000..b3531fe
--- /dev/null
+++ b/inc/engine/maps/GeoTileProvider.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILEPROVIDER_H
+#define GEOTILEPROVIDER_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProvider.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DrawableBitmap;
+class TileKey;
+
+/**
+ * This class encapsulates a map tile provider which is responsible
+ * for loading map tiles.
+ *
+ * \ingroup maps
+ */
+class GeoTileProvider : public GeoProvider
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ GeoTileProvider();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoTileProvider();
+
+ /**
+ * This method loads the map tile specified by the caller.
+ *
+ * @param tileKey A constant reference to an object that specifies a tile
+ * key.
+ *
+ * @return A value representing the identifier of request to load the tile.
+ */
+ RestItemHandle::RequestId LoadTile(const TileKey& tileKey);
+
+ /**
+ * This method aborts loading of the map tile specified by the caller.
+ *
+ * @param tile A constant reference to an object representing the tile whose
+ * loading is to be aborted.
+ */
+ void AbortTile(const TilePtr& tile);
+
+ /**
+ * This method registers a callback function to be invoked when the tile has loaded.
+ *
+ * @param signal A constant reference to a function to be invoked when the
+ * tile has loaded; the function accepts a reference to a
+ * <code>TileKey</code> object and a pointer to the tile bitmap (see
+ * also \ref GeoProvider).
+ */
+ void TileLoaded(const TileLoadedFunc &signal);
+
+ /**
+ * This method registers a callback function to be invoked when an attempt
+ * to load a map tile has failed.
+ *
+ * @param signal A constant reference to a function to be invoked when an
+ * attempt to load a tile has failed; the function accepts a
+ * reference to a <code>TileKey</code> object and a reference to an
+ * object containing information about the error that occurred (an
+ * instance of <code>ErrorBase</code>).
+ */
+ void TileFailed(const TileFailedFunc& signal);
+
+private:
+ class GeoTileProviderImpl;
+ std::auto_ptr<GeoTileProviderImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOTILEPROVIDER_H
diff --git a/inc/engine/maps/GeoTiledMap.h b/inc/engine/maps/GeoTiledMap.h
new file mode 100755
index 0000000..304ad22
--- /dev/null
+++ b/inc/engine/maps/GeoTiledMap.h
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILEDMAP_H
+#define GEOTILEDMAP_H
+
+#include <vector>
+#include <tr1/functional>
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FUi.h>
+#include <FGraphics.h>
+#include <FGrpColor.h>
+#endif
+
+#include "maps/DrawableBitmap.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#include "graphic/Color.h"
+#include <Evas_GL.h>
+
+using namespace Tizen::Maps;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTile;
+class ErrorBase;
+class GeoMapObject;
+class GeoCoordinates;
+class TileFetcherReply;
+class GeoProjectionNode;
+class GeoMapObjectMarker;
+class GeoProviderManager;
+
+
+/**
+ * This class encapsulates a tiled map. The map is composed of square bitmap
+ * tiles retrieved from a grid that represents the normalized Mercator
+ * projection (see also <code>GeoTile</code>). The class supports a number of
+ * map types (for example normal, terrain, satellite, etc.) and provides methods
+ * to control the map size, orientation (heading), zoom level, and managing
+ * objects such as markers, polylines and polygons that can be superimposed on
+ * the map.
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoTiledMap
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for supported map types.
+ */
+ enum MapType
+ {
+ MT_Normal_Day = 0, ///< Indicates a normal (street/physical
+ /// day map.
+ MT_Satellite_Day, ///< Indicates a satellite day map.
+ MT_Terrain_Day, ///< Indicates a terrain day map.
+ MT_Hybrid_Day, ///< Indicates a hybrid day map
+ /// (satellite, with roads and labels).
+ MT_Last_Entry_Undefined ///< Indicates that the map type is not
+ /// defined.
+ };
+
+ /**
+ * This enumeration defines identifiers for logo color.
+ */
+ enum LogoColor
+ {
+ LC_Blue = 0, ///< Indicates that the color is blue.
+ LC_White ///< Indicates that the color is white.
+ };
+
+ /**
+ * This method is the default constructor.
+ */
+ GeoTiledMap();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~GeoTiledMap();
+
+ /**
+ * This method sets the size of the map.
+ *
+ * @param size A constant reference to an object specifying the size of the
+ * map in pixels (width and height).
+ */
+ void SetMapSize(const Tizen::Maps::Dimension& size);
+
+ /**
+ * This method retrieves the map size.
+ *
+ * @return A constant reference to an object containing the width and height
+ * of the map in pixels.
+ */
+ const Tizen::Maps::Dimension& GetMapSize() const;
+
+ /**
+ * This method sets the map zoom level.
+ *
+ * @param zoomLevel A value indicating the new zoom level.
+ */
+ void SetZoomLevel(double zoomLevel);
+
+ /**
+ * This method retrieves the map zoom level.
+ *
+ * @return A value indicating the new zoom level.
+ */
+ double GetZoomLevel() const;
+
+ /**
+ * This method retrieves the minimum map zoom level.
+ *
+ * @return A value indicating the minimum map zoom level.
+ */
+ double GetMinimumZoomLevel() const;
+
+ /**
+ * This method retrieves the maximum map zoom level.
+ *
+ * @return A value indicating the maximum map zoom level.
+ */
+ double GetMaximumZoomLevel() const;
+
+ /**
+ * This method pans the map the caller-specified number of pixels
+ * horizontally and vertically.
+ *
+ * @param dx A value indicating the number of pixels to move the map along
+ * the horizontal axis.
+ *
+ * @param dy A value indicating the number of pixels to move the map along
+ * the vertical axis.
+ */
+ void Pan(int dx, int dy);
+
+ /**
+ * This method sets the coordinates of the map center.
+ *
+ * @param center A constant reference to an object containing the new
+ * geographic coordinates of the map center.
+ */
+ void SetCenter(const GeoCoordinates& center);
+
+ /**
+ * This method retrieves the coordinates of the map center.
+ *
+ * @return A constant reference to an object containing the
+ * geographic coordinates of the map center.
+ */
+ GeoCoordinates GetCenter() const;
+
+ /**
+ * This method renders the given object invalid by resetting the drawable
+ * object representing the map and resetting and reinitializing the tile
+ * cache.
+ */
+ void Invalidate();
+
+ /**
+ * This method invalidates (discards) all the map objects, including
+ * markers.
+ */
+ void InvalidateMapObjects();
+
+ /**
+ * This method invalidates (clears) the cache.
+ */
+ void ClearCache();
+
+ /**
+ * This method clears all the map objects associated with the given tiled
+ * map object.
+ */
+ void ClearMapObjects();
+
+ /**
+ * This method converts the geographic location specified by the caller to
+ * screen coordinates, taking into consideration the current zoom level and
+ * the view area.
+ *
+ * @param coordinate A constant reference to an object containing the
+ * coordinates to convert.
+ *
+ * @return An object containing the x and y coordinates defining the screen
+ * location.
+ */
+ Tizen::Maps::Point CoordinateToScreenPosition(const GeoCoordinates& coordinate) const;
+
+ /**
+ * This method converts the screen position specified by the caller to
+ * geographic coordinates. The method is called, for example, when a marker
+ * is being added to the map.
+ *
+ * @param screenPosition An object containing the x and y coordinates
+ * defining the screen location to convert.
+ *
+ * @return An object containing the geographic coordinates of corresponding
+ * to the received screen position.
+ */
+ GeoCoordinates ScreenPositionToCoordinate(const Tizen::Maps::Point& screenPosition) const;
+
+ //map objects support
+ /**
+ * This method adds an object to the map. The object is a marker, a polygon
+ * or polyline, or a group of objects.
+ *
+ * @param obj A pointer to an object to add to the map. If the object does
+ * not exist (is <code>NULL</code>), the method has no effect.
+ *
+ * @param bTransferOwnership A Boolean value indicating if the ownership of
+ * the map object given in the first parameter should be transferred
+ * to this map instance (<code>true</code>, default) or not
+ * (<code>false</code>). The default behavior transfers the
+ * ownership, which means that the map object becomes responsible for
+ * deleting the markers.
+ */
+ void AddObject(GeoMapObject* obj, bool bTransferOwnership=true);
+
+ /**
+ * This method removes the object specified by the caller from the map.
+ *
+ * @param obj A pointer to the object to remove from the map. If the object
+ * does not exist (is <code>NULL</code>), the method has no effect.
+ *
+ * @return Boolean value indicating if the removal of the object was
+ * successful (<code>true</code>) or not (<code>false</code>).
+ */
+ bool RemoveObject(GeoMapObject* obj);
+
+ /**
+ * This method obtains a pointer to the map object located at the screen
+ * position indicated by the caller.
+ *
+ * @param point A constant reference to an object containing the pixel
+ * coordinates of the screen position from which to get the map object.
+ *
+ * @return A pointer to the map object at the specified screen location,
+ * otherwise <code>NULL</code> if no map object is found.
+ */
+ GeoMapObject* GetObjectAtScreenPosition(const Tizen::Maps::Point& point) const;
+
+ /**
+ * This method obtains a count of marker objects in the given tiled map.
+ *
+ * @return A value that indicates the number of marker objects.
+ */
+ size_t GetNumMarkerObjects() const;
+
+ /**
+ * This method retrieves a pointer to a marker object at the index specified
+ * by the caller.
+ *
+ * @param idx A value specifying the index of the marker object to
+ * retrieve.
+ *
+ * @return A pointer to the marker object at the specified index or
+ * <code>NULL</code> if the index is invalid.
+ */
+ GeoMapObjectMarker* GetMarkerObject(size_t idx) const;
+
+ //draws the map into the current OpenGl context
+ /**
+ * This method draws (renders and displays) a map image of the size
+ * specified by the caller. The displayed map includes the required map
+ * tiles as well as any objects such as markers, polygons and polylines.
+ *
+ * @param uWidth A value specifying the width of the map image.
+ *
+ * @param uHeight A value specifying the height of the map image.
+ *
+ * @return A Boolean, <code>true</code> if the map has been successfully
+ * pained, otherwise <code>false</code>.
+ */
+ bool PaintMap(unsigned int uWidth, unsigned int uHeight);
+
+ /**
+ * This typedef defines a function object as a type. The function object can
+ * be called when the map has been updated. A function object of this type
+ * returns <code>void</code> and receives no arguments.
+ */
+#ifdef TIZEN_MIGRATION
+ typedef std::tr1::function<void (void *)> UpdateMapSignalFunctor;
+#else
+ typedef std::tr1::function<void ()> UpdateMapSignalFunctor;
+#endif
+
+ /**
+ * This method sets a callback to be invoked when the map has
+ * been updated.
+ *
+ * @param slot A function object to be called when the map has
+ * been updated.
+ */
+#ifdef TIZEN_MIGRATION
+ void SetUpdateMapSignal(UpdateMapSignalFunctor slot, void *data);
+#else
+ void SetUpdateMapSignal(UpdateMapSignalFunctor slot);
+#endif
+
+ /**
+ * This method sets the map type.
+ *
+ * @param aMapType A value indicating the new map type.
+ */
+ void SetMapType(MapType aMapType);
+
+ /**
+ * This method retrieves the map type.
+ *
+ * @return A value indicating the current map type.
+ */
+ MapType GetMapType() const;
+
+ /*
+ * Available language options are:
+ * L"ara", L"chi", L"cht", L"dut", L"eng", L"ger", L"gle", L"fre", L"ita", L"spa", L"rus", L"pol", L"gre", L"wel"
+ */
+ /**
+ * This method sets the language of the map.
+ *
+ * @param aMapLanguage A constant reference to a string containing a
+ * language code. The value of the string must be one of "ara"
+ * (Arabic), "chi" (Chinese), "cht" (Chinese-Taiwan), "dut" (Dutch),
+ * "eng" (English), "ger" (German), "gle" (Irish), "fre" (French),
+ * "ita" (Italian), "spa" (Spanish), "rus" (Russian), "pol" (Polish),
+ * "gre" (Greek), "wel" (Welsh)
+ */
+ void SetMapLanguage(const String& aMapLanguage);
+
+ /**
+ * This method retrieves the current language of the map.
+ *
+ * @return A constant reference to a string containing the language code,
+ * which is one of "ara" (Arabic), "chi" (Chinese), "cht"
+ * (Chinese-Taiwan), "dut" (Dutch), "eng" (English), "ger" (German),
+ * "gle" (Irish), "fre" (French), "ita" (Italian), "spa" (Spanish),
+ * "rus" (Russian), "pol" (Polish), "gre" (Greek), "wel" (Welsh)
+ */
+ const String& GetMapLanguage() const;
+
+ /**
+ * This method sets the size of the tiles used for rendering the map.
+ *
+ * @param uTileSizeInPX Specifies the width and the height of the tiles. Note that
+ * only 128 and 256 are supported as valid values.
+ */
+ void SetTileSize(unsigned int uTileSizeInPx);
+
+ /**
+ * This method retrieves the size of the tiles, used for rendering the map.
+ *
+ * @return An unsigned integer indicating the size of the map tiles.
+ */
+ unsigned int GetTileSize() const;
+
+ /**
+ * This method changes the background color of the map.
+ * The background color is updated after refreshing the map.
+ *
+ * @param color A constant reference to an object representing the new map
+ * background color.
+ */
+ void SetBackgroundColor(const Tizen::Maps::Color& color);
+
+#ifdef TIZEN_CUSTOMIZATION
+ /**
+ * This method retrieves the root tile, used for rendering the map.
+ *
+ * @return An pointer indicating the bitmap of the root tile.
+ */
+ DrawableBitmapPtr GetRootPixmap();
+
+ /**
+ * This method sets a pointer of a structure of the Evas GL API object that
+ * contains the GL APIs to be used in Evas GL.
+ *
+ * @param __glapi A pointer to a structure of the Evas GL API object.
+ */
+ void SetEvasGlApi(Evas_GL_API *__glapi);
+#endif
+
+private:
+ bool HandleTileReady(int level, int x, int y, unsigned int uLevelProvider);
+ bool DrawLogo(UInt uWidth, UInt uHeight, UInt aMapX = 0, UInt aMapY = 0);
+
+ void UpdateMapSignal();
+ void UpdateProjectionNodes();
+ float CreateProjectionTree(std::vector<GeoProjectionNode*>& result, GeoProjectionNode* node);
+ void InitializeCache();
+ void SortMarkers();
+ int GetDisplayDPI() const;
+ void ClearMarkers();
+ void SetRootPixmap(DrawableBitmapPtr rootPixmap);
+
+private:
+ friend class GeoMapObject;
+ friend class GeoMapObjectMarker;
+ friend class GeoProviderManager;
+ friend class TestGeoTiledMap;
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoTiledMap);
+
+ class GeoTiledMapImpl;
+ std::auto_ptr<GeoTiledMapImpl> m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOTILEDMAPDATA_H
diff --git a/inc/engine/maps/GlTexture.h b/inc/engine/maps/GlTexture.h
new file mode 100755
index 0000000..1552142
--- /dev/null
+++ b/inc/engine/maps/GlTexture.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GLTEXTURE_H
+#define GLTEXTURE_H
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Bitmap.h"
+#else
+#include <FGraphics.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a GL texture that is a container for map tile bitmaps.
+ *
+ * \ingroup maps
+ */
+class GlTexture
+{
+public:
+
+ /**
+ * This method is a constructor that initializes a new texture instance with
+ * the bitmap object provided by the caller.
+ *
+ * @param rBitmap A constant reference to a bitmap object.
+ */
+ GlTexture(const Tizen::Maps::Bitmap& rBitmap);
+
+ /**
+ * This method is the destructor.
+ */
+ ~GlTexture();
+
+ /**
+ * This method retrieves the texture id.
+ *
+ * @return A value representing the texture id.
+ */
+ unsigned int GetTextureId() const;
+
+ /**
+ * This method sets the texture id.
+ *
+ * @param uId A value representing the texture id.
+ */
+ void SetTextureId(unsigned int uId);
+
+ /**
+ * This method checks if the called instance wraps a valid GL texture
+ *
+ */
+ bool IsValid() const;
+
+ /**
+ * This method checks if the passed texture handle is a valid GL texture
+ *
+ */
+ static bool IsValid(unsigned int uId);
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GlTexture);
+
+ class GlTextureImpl;
+ GlTextureImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/routes/GeoRoute.h b/inc/engine/routes/GeoRoute.h
new file mode 100755
index 0000000..26266cf
--- /dev/null
+++ b/inc/engine/routes/GeoRoute.h
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTE_H
+#define GEOROUTE_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "routes/GeoRouteQuery.h"
+#include "routes/RouteSegment.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class RouteSegment;
+class GeoBoundingBox;
+
+class GeoRoute;
+
+/**
+ * This typedef defines a list (vector) of instances of <code>GeoRoute</code> as
+ * a type.
+ *
+ * \ingroup routes
+ */
+typedef std::vector<GeoRoute> GeoRouteList;
+
+/**
+ * This class encapsulates a route. Instances of the class are data objects. The
+ * information they contain can be used to draw routes on the map.
+ *
+ * A route object contains member variables that represent:
+ * <ul>
+ *
+ * <li> route segments - sections of the route encapsulated as instances of
+ * <code>RouteSegment</code></li>
+ *
+ * <li> maneuvers - instances of <code>Maneuver</code></li> that contain
+ * navigation instructions for the person following the route, indicating
+ * how to continue from one section of the route to the next</li>
+ *
+ * <li> route geometry - a list of instances of <code>GeoCoordinates</code></li>
+ * that contains the point objects with the coordinates of the geographical
+ * locations through which the route passes</li>
+ *
+ * <li> duration - the length of time required to travel the route from start
+ * to finish</li>
+ *
+ * </ul>
+ *
+ * Note that the above list is indicative, rather than comprehensive.
+ */
+class EXPORT_API GeoRoute
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ GeoRoute();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs An object whose contents are to be copied to the instance
+ * being created.
+ */
+ GeoRoute(const GeoRoute& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoRoute();
+
+ /**
+ * This method sets the id of the route object.
+ *
+ * @param rId A constant reference to a string containing the unique id of
+ * the route object.
+ */
+ void SetRouteId(const String& rId);
+
+ /**
+ * This method retrieves the id of the route object.
+ *
+ * @return A string containing the unique id of
+ * the route object.
+ */
+ String GetRouteId() const;
+
+ /**
+ * This method sets class property holding the request used to obtain the
+ * route data.
+ *
+ * @param rRequest A constant reference to an object that encapsulates the
+ * query used to obtain the route data.
+ */
+ void SetRequest(const GeoRouteQuery& rRequest);
+
+ /**
+ * This method retrieves the value class property holding the request used
+ * to obtain the route data.
+ *
+ * @return An object that encapsulates the query used to obtain the route
+ * data.
+ */
+ GeoRouteQuery GetRequest() const;
+
+ /**
+ * This method sets a property that holds the bounding box enclosing
+ * the route. The bounding box is defined by the geographic coordinates of
+ * its top-left and bottom-right corners.
+ *
+ * @param rBounds A constant reference to an object containing the bounding
+ * box.
+ */
+ void SetBounds(const GeoBoundingBox& rBounds);
+
+ /**
+ * This method retrieves the value of a class property that holds the
+ * bounding box enclosing the route. The bounding box is defined by the
+ * geographic coordinates of its top-left and bottom-right corners.
+ *
+ * @return An object containing the bounding box.
+ */
+ GeoBoundingBox GetBounds() const;
+
+ /**
+ * This method sets a class property that holds the list of segments of the
+ * route.
+ *
+ * @param vRouteSegmentList A constant reference to an object that defines
+ * the first segment of the route.
+ */
+ void SetRouteSegmentList(const RouteSegmentList& vRouteSegmentList);
+
+ /**
+ * This method retrieves the value of a class property that holds the list of
+ * segments of the route.
+ *
+ * @return An object that defines the list of segments of the route.
+ */
+ RouteSegmentList GetRouteSegmentList() const;
+
+ /**
+ * This method sets a class property that holds the time required to travel
+ * the length of the route.
+ *
+ * @param aSecs An integer value specifying the time required to travel the
+ * length of the route in seconds.
+ */
+ void SetTravelTime(int aSecs);
+
+ /**
+ * This method retrieves the value of a class property that holds the time
+ * required to travel the length of the route.
+ *
+ * @return An integer value specifying the time required to travel the
+ * length of the route in seconds.
+ */
+ int GetTravelTime() const;
+
+ /**
+ * This method sets a class property that holds the length of the route --
+ * the total distance to travel between the start and end points of the
+ * route.
+ *
+ * @param aDistance A value specifying the length of the route in meters.
+ */
+ void SetDistance(double aDistance);
+
+ /**
+ * This method retrieves the value of a class property that holds the length
+ * of the route -- the total distance to travel between the start and end
+ * points of the route.
+ *
+ * @return A value specifying the length of the route in meters.
+ */
+ double GetDistance() const;
+
+ /**
+ * This method sets a class property indicating the travel mode for which
+ * the route was calculated.
+ *
+ * @param aTravelMode A value indicating the mode of travel for the route.
+ */
+ void SetTravelMode(GeoRouteQuery::TravelMode aTravelMode);
+
+ /**
+ * This method retrieves the value of a class property indicating the travel
+ * mode for which the route was calculated.
+ *
+ * @return A value indicating the mode of travel for the route.
+ */
+ GeoRouteQuery::TravelMode GetTravelMode() const;
+
+ /**
+ * This method sets a class property that defines the geometry of the route
+ * (it holds the coordinates of the points through which the route passes,
+ * the vertices of the route).
+ *
+ * @param rPath A constant reference to an object containing the geographic
+ * coordinates of the points through which the route passes (the route
+ * vertices).
+ */
+ void SetPath(const GeoCoordinateList& rPath);
+
+ /**
+ * This method retrieves the value of a class property that defines the
+ * geometry of the route (it holds the coordinates of the points through
+ * which the route passes, the vertices of the route).
+ *
+ * @return An object containing the geographic coordinates of the points
+ * through which the route passes (the route vertices).
+ */
+ GeoCoordinateList GetPath() const;
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose properties are to be
+ * copied to the given instance of the class.
+ *
+ * @return A reference to the given instance of the class after its member
+ * elements have been updated.
+ */
+ GeoRoute& operator = (const GeoRoute& rRhs);
+
+private:
+ class GeoRouteImpl;
+ GeoRouteImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTE_H */
diff --git a/inc/engine/routes/GeoRouteQuery.h b/inc/engine/routes/GeoRouteQuery.h
new file mode 100755
index 0000000..f3af232
--- /dev/null
+++ b/inc/engine/routes/GeoRouteQuery.h
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEQUERY_H
+#define GEOROUTEQUERY_H
+
+#include <map>
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteReply;
+class QueryListener;
+class GeoRouteQueryListener;
+
+/**
+ * This class encapsulates a query that requests a route calculation. The
+ * required calculation is specified in terms of route features, including the
+ * start and end points, waypoints (the locations through which the route must
+ * pass), areas to include and to avoid, mode of travel, route features with
+ * weighting, required optimization, etc.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteQuery : public BaseQuery
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for the supported modes of travel.
+ */
+ enum TravelMode {
+ TM_CarTravel = 0x0001, ///< Indicates that the route is to be
+ /// traveled by car.
+ TM_PedestrianTravel = 0x0002, ///< Indicates that the route is for a pedestrian.
+ TM_PublicTransitTravel = 0x0008, ///< Indicates that the route is to be
+ /// traveled using public transport.
+ };
+
+ /**
+ * This enumeration defines identifiers for the supported route feature
+ * types, feature types that can be favored or excluded by the route
+ * calculation.
+ */
+ enum FeatureType {
+ FT_NoFeature = 0x00000000, ///< Indicates no route features (are selected).
+ FT_TollFeature = 0x00000001, ///< Indicates toll roads (toll gates/booths).
+ FT_MotorwayFeature = 0x00000002, ///< Indicates motorway(s).
+ FT_BoatFerryFeature = 0x00000004, ///< Indicates a boat ferry.
+ FT_RailFerryFeature = 0x00000008, ///< Indicates rail (train) ferry.
+ FT_PublicTransitFeature = 0x00000010, ///< Indicates public transport.
+ FT_TunnelFeature = 0x00000020, ///< Indicates tunnel.
+ FT_DirtRoadFeature = 0x00000040, ///< Indicates dirt road.
+ FT_ParksFeature = 0x00000080, ///< Indicates park.
+ FT_HOVLane = 0x00000100, ///< Indicates a high-occupancy vehicle lane.
+ FT_Stairs = 0x00000200 ///< Indicates stairs.
+ };
+
+ /**
+ * This enumeration defines identifiers for the supported route feature weighting.
+ */
+ enum FeatureWeight {
+ FW_NormalFeatureWeight = 0x00000000, ///< Indicates normal weighting.
+ FW_PreferFeatureWeight = 0x00000001, ///< Indicates that a feature is preferred.
+ FW_AvoidFeatureWeight = 0x00000002, ///< Indicates that a feature is to be avoided.
+ FW_SoftExcludeFeatureWeight = 0x00000004, ///< Indicates that soft-exclude applies to the feature.
+ FW_StrictExcludeFeatureWeight = 0x00000008 ///< Indicates that the feature is to be strictly excluded.
+ };
+
+ /**
+ * This typedef defines a map of route feature types and weighting as a type.
+ */
+ typedef std::map< GeoRouteQuery::FeatureType, GeoRouteQuery::FeatureWeight > FeaturesMap;
+
+ /**
+ * This enumeration defines identifiers for the supported route optimizations.
+ */
+ enum RouteOptimization {
+ RO_ShortestRoute = 0x0001, ///< Indicates the shortest route.
+ RO_FastestRoute = 0x0002, ///< Indicates the fastest route.
+ };
+
+ /**
+ * This enumeration defines identifiers for route segment detail specifiers.
+ */
+ enum SegmentDetail {
+ SD_NoSegmentData = 0x0000, ///< Indicates that no route segment data are to be included.
+ SD_BasicSegmentData = 0x0001 ///< Indicates that basic route segment data are to be included.
+ };
+
+ /**
+ * This enumeration defines identifiers for route maneuver specifiers.
+ */
+ enum ManeuverDetail {
+ MD_NoManeuvers = 0x0000, ///< Indicates that manuevers are to be included int he route.
+ MD_BasicManeuvers = 0x0001 ///< Indicates that basic maneuvers are to be included in the route calculation.
+ };
+
+#ifdef TIZEN_CUSTOMIZATION
+ /**
+ * This enumeration defines identifiers for route MetricSystem specifiers.
+ */
+ enum MetricSystem {
+ DIST_imperial = 0x0000, ///< Indicates that MetricSystem is miles
+ DIST_metric = 0x0001 ///< Indicates that MetricSystem is m & km
+ };
+#endif
+
+ /**
+ * This method is a constructor that initializes a new instance of the
+ * class, using the list of waypoints supplied by the caller.
+ *
+ * @param rWaypoints A constant reference to a vector of instances of
+ * <code>GeoCoordinates</code> that define the route waypoints.
+ */
+ GeoRouteQuery(const GeoCoordinateList &rWaypoints = GeoCoordinateList());
+
+ /**
+ * This method is a constructor that initializes a new instance of the
+ * class, using the objects representing the route origin and destination
+ * supplied by the caller.
+ *
+ * @param rOrigin A constant reference to an object that defines the point
+ * of origin for the route.
+ *
+ * @param rDestination A constant reference to an object that defines the
+ * destination for the route.
+ */
+ GeoRouteQuery(const GeoCoordinates &rOrigin, const GeoCoordinates &rDestination);
+
+ /**
+ * This method is a copy constructor that initializes a new instance of the
+ * class by copying the values of the properties of the object supplied by
+ * the caller.
+ *
+ * @param rRhs A constant reference to an object whose property values are
+ * to be used to initialize a new instance of the class.
+ */
+ GeoRouteQuery(const GeoRouteQuery &rRhs);
+
+ /**
+ * This method is the destructor for objects of this class.
+ */
+ ~GeoRouteQuery();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose property values are
+ * to be copied to the given instance.
+ */
+ GeoRouteQuery& operator = (const GeoRouteQuery &rRhs);
+
+ /**
+ * This method sets route waypoints, using the list of objects supplied by
+ * the caller.
+ *
+ * @param rWaypoints A constant reference to a vector of instances of
+ * <code>GeoCoordinates</code> that define the route waypoints.
+ */
+ void SetWaypoints(const GeoCoordinateList &rWaypoints);
+
+ /**
+ * This method retrieves the route waypoints.
+ *
+ * @return A vector of instances of <code>GeoCoordinates</code> that define
+ * the route waypoints.
+ */
+ GeoCoordinateList GetWaypoints() const;
+
+ /**
+ * This method sets areas through which the route must not pass, using a
+ * list of bounding box objects supplied by the caller.
+ *
+ * @param rAreas A constant reference to a list of bounding box objects that
+ * define the areas the route must avoid.
+ */
+ void SetExcludeAreas(const GeoBoundingBoxList &rAreas);
+
+ /**
+ * This method retrieves a list of bounding boxes that defines areas through
+ * which the route must not pass.
+ *
+ * @return A list of bounding box objects that define the areas the route
+ * must avoid.
+ */
+ GeoBoundingBoxList GetExcludeAreas() const;
+
+ // defaults to TravelByCar
+ /**
+ * This method sets the travel mode to be used in the route query.
+ *
+ * @param aTravelModes A value indicating the travel mode to use in the
+ * query.
+ */
+ void SetTravelModes(TravelMode aTravelModes);
+
+ /**
+ * This method retrieves the travel mode used in the route query.
+ *
+ * @return A value indicating the travel mode used in the
+ * query.
+ */
+ TravelMode GetTravelModes() const;
+
+ /**
+ * This method associates weighting with a feature to be used in the route
+ * query.
+ *
+ * @param aFeatureType A value indicating the feature type to which the
+ * weighting is to apply.
+ *
+ * @param aFeatureWeight A value indicating the weighting to apply.
+ */
+ void SetFeatureWeight(FeatureType aFeatureType, FeatureWeight aFeatureWeight);
+
+ /**
+ * This method retrieves the weighting for the feature type specified by the
+ * caller.
+ *
+ * @param aFeatureType A value indicating the feature type for which to
+ * retrieve weighting.
+ *
+ * @return A value indicating the weighting associated with the named route
+ * feature.
+ */
+ FeatureWeight GetFeatureWeight(FeatureType aFeatureType) const;
+
+ /**
+ * This method retrieves a map of route feature types specified for the
+ * given query.
+ *
+ * @return An object containing a map of route feature types specified for
+ * the given query.
+ */
+ FeaturesMap GetFeatureTypes() const;
+
+ // defaults to OptimizeFastes)
+ /**
+ * This method sets the route optimization option for the given query.
+ *
+ * @param aOptimization A value indicating the route optimization option to
+ * set for the given query.
+ */
+ void SetRouteOptimization(RouteOptimization aOptimization);
+
+ /**
+ * This method retrieves the route optimization selector set for the given
+ * query.
+ *
+ * @return A value indicating the route optimization selector set for the
+ * given query.
+ */
+ RouteOptimization GetRouteOptimization() const;
+
+ // defaults to BasicSegmentData
+ /**
+ * This method sets the segment detail selector for the given query.
+ *
+ * @param aSegmentDetail A value indicating the segment detail selector for
+ * the given query.
+ */
+ void SetSegmentDetail(SegmentDetail aSegmentDetail);
+
+ /**
+ * This method retrieves the segment detail selector for the given query.
+ *
+ * @return A value indicating the segment detail selector set for the given
+ * query.
+ */
+ SegmentDetail GetSegmentDetail() const;
+
+ // defaults to BasicManeuvers
+ /**
+ * This method sets the maneuver detail selector for the given
+ * query.
+ *
+ * @param aManeuverDetail A value indicating the maneuver detail selector for
+ * the given query.
+ */
+ void SetManeuverDetail(ManeuverDetail aMneuverDetail);
+
+ /**
+ * This method retrieves the maneuver detail selector set for the given
+ * query.
+ *
+ * @return A value indicating the maneuver detail selector for
+ * the given query.
+ */
+ ManeuverDetail GetManeuverDetail() const;
+
+#ifdef TIZEN_CUSTOMIZATION
+ /**
+ * This method sets the MetricSystem selector for the given
+ * query.
+ *
+ * @param aMetricSystem A value indicating the MetricSystemselector for
+ * the given query.
+ */
+ void SetMetricSystem(GeoRouteQuery::MetricSystem aMetricSystem);
+
+ /**
+ * This method retrieves the MetricSystem selector set for the given query.
+ *
+ * @return A value indicating the MetricSystem selector for
+ * the given query.
+ */
+ GeoRouteQuery::MetricSystem GetMetricSystem(void);
+
+ /**
+ * This method sets the bounding area for the given query.
+ *
+ * @param aMetricSystem A value indicating the bounding area for
+ * the given query.
+ */
+ void SetViewBounds(GeoBoundingBox aViewBounds);
+
+ /**
+ * This method retrieves the bounding area set for the given query.
+ *
+ * @return A value indicating the bounding area for
+ * the given query.
+ */
+ GeoBoundingBox GetViewBounds(void);
+#endif
+
+ /**
+ * This method attempts to establish a connection with the server and then,
+ * if the connection has been established, it builds and submits a query.
+ *
+ * @rListener rListener A reference to an object that is to be notified when
+ * the reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user data to be passed back within the
+ * corresponding reply object.
+ *
+ * @return A vaur representing the identifier of issued request.
+ */
+ RestItemHandle::RequestId Execute(GeoRouteQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * geo route queries.
+ *
+ * @return A string containing the base URI.
+ */
+ static String GetBaseUri();
+
+ /**
+ * This static method returns the base URI to be used for all subsequent
+ * geo route queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ static void SetBaseUri(const String& sUri);
+
+private:
+ bool CreateBaseUrl(const String& sService, String& sDst) const;
+
+ String CreateUri() const;
+
+private:
+ class GeoRouteQueryImpl;
+ GeoRouteQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTEQUERY_H */
diff --git a/inc/engine/routes/GeoRouteQueryListener.h b/inc/engine/routes/GeoRouteQueryListener.h
new file mode 100755
index 0000000..a3540f3
--- /dev/null
+++ b/inc/engine/routes/GeoRouteQueryListener.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEQUERYLISTENER_H
+#define GEOROUTEQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+#include "routes/GeoRouteReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteQueryListener : public QueryListener
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ GeoRouteQueryListener();
+
+ /**
+ * This method is the destructor.
+ */
+ ~GeoRouteQueryListener();
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * route request.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnRouteReply(const GeoRouteReply& rReply) = 0;
+
+ #ifdef TIZEN_MIGRATION
+ /**
+ * This method is a callback invoked when geocoding request is failed.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnRouteFailure(const GeoRouteReply& rReply) = 0;
+ #endif
+
+private:
+
+ void OnReplySuccess(BaseReply& rReply);
+
+ #ifdef TIZEN_MIGRATION
+ void OnFailure(const BaseReply& rReply);
+ #endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/routes/GeoRouteReply.h b/inc/engine/routes/GeoRouteReply.h
new file mode 100755
index 0000000..50bcf9e
--- /dev/null
+++ b/inc/engine/routes/GeoRouteReply.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEREPLY_H
+#define GEOROUTEREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "routes/GeoRoute.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteQuery;
+
+/**
+ * This class encapsulates a response to a route calculation request query.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteReply : public BaseReply
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ GeoRouteReply();
+
+ /**
+ * This is the (virtual) destructor.
+ */
+ virtual ~GeoRouteReply();
+
+ /**
+ * This method retrieves the original route query request.
+ *
+ * @return An object that encapsulates the original route query request.
+ */
+ GeoRouteQuery GetRequest() const;
+
+ /**
+ * This method retrieves a list of routes calculated in response to the
+ * request (see <code>GetRequest</code>).
+ *
+ * @return A reference a an object containing the calculated routes.
+ */
+ GeoRouteList& GetRoutes() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoRouteReply);
+ friend class TestGeoRouteReply;
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+ void SetRequest(const GeoRouteQuery& aGeoRouteQuery);
+ void SetRoutes(const GeoRouteList& rRoutes);
+
+private:
+ class GeoRouteReplyImpl;
+ GeoRouteReplyImpl* m_pImpl;
+
+ friend class GeoRouteReplyImpl;
+ friend class GeoRouteQuery;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTEREPLY_H */
diff --git a/inc/engine/routes/GeoRouterReplyParser.h b/inc/engine/routes/GeoRouterReplyParser.h
new file mode 100755
index 0000000..b07b99c
--- /dev/null
+++ b/inc/engine/routes/GeoRouterReplyParser.h
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTERREPLYPARSER_H
+#define GEOROUTERREPLYPARSER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+#include "routes/RouteSegment.h"
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+class ParserError;
+class GeoRoute;
+
+
+/**
+ * This class encapsulates a parser of replies to routing requests. It provides
+ * methods dedicated to parsing specific nodes of the reply data and populating
+ * a destination object supplied by the caller.
+ *
+ * \ingroup routes
+ */
+class GeoRouterReplyParser
+{
+public:
+
+ /**
+ * This method retrieves the route details held in the XML node supplied by
+ * the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseRouteEntry(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a route summary entry held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseSummary(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a route travel mode held in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseMode(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves the route shape definition from the XML node
+ * supplied by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseShape(xmlNodePtr pNode, GeoCoordinateList& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a route bounding box from the XML node
+ * supplied by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseBoundingBox(xmlNodePtr pNode, GeoBoundingBox& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a route waypoint defined in the XML node supplied
+ * by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseCoordinate(xmlNodePtr pNode, GeoCoordinates& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves a route leg defined in the XML node supplied by the
+ * caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseLeg(xmlNodePtr pNode, RouteSegment& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+ /**
+ * This method retrieves the details of a maneuver defined in the XML node
+ * supplied by the caller.
+ *
+ * @param pNode A pointer to the XML node to parse.
+ *
+ * @param rDst A reference to an object which is to receive the results.
+ *
+ * @param pCtx A pointer to the XPath context.
+ *
+ * @param pError A pointer to an object that is populated
+ * with error information should parsing fail.
+ *
+ * @return <code>true</code> on success, otherwise <code>false</code> (in
+ * which case the last argument to the method can be used to retrieve
+ * the error information.
+ */
+ static bool ParseManeuver(xmlNodePtr pNode, Maneuver& rDst, GeoCoordinateList& vSegmentPath, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+private:
+ static bool ExtractContent(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+ static xmlNodePtr FindChildNode(xmlNodePtr pNode, const char* pUTF8Literal);
+
+ static void AppendOrSet(ParserError*& pError, ParserError* pLoc);
+
+ HERE_MAPS_NO_COPY_NO_ASSIGN(GeoRouterReplyParser);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOROUTERREPLYPARSER_H
diff --git a/inc/engine/routes/Maneuver.h b/inc/engine/routes/Maneuver.h
new file mode 100755
index 0000000..d4e2bee
--- /dev/null
+++ b/inc/engine/routes/Maneuver.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MANEUVER_H
+#define MANEUVER_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Maneuver;
+typedef std::vector<Maneuver> ManeuverList;
+
+
+/**
+ * This class represents a route maneuver. A route maneuver contains information
+ * that allows for navigation instructions to be generated, which explain how
+ * the person following a route is to proceed from one segment of the route to
+ * another. A <code>Maneuver</code> instance contains instruction text for the
+ * person following the route, the geographic coordinates of the waypoint to
+ * which it applies, an indication of the direction of travel, as well
+ * as time and distance to the next instruction.
+ *
+ * Maneuvers are tightly coupled to the <code>Route</code> instance for which
+ * they are generated.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API Maneuver
+{
+
+public:
+ /**
+ * This enumeration defines identifiers for route maneuver directions.
+ */
+ enum InstructionDirection {
+ ID_NoDirection, ///< Indicates that no directional instruction
+ /// is set/specified; this is the default
+ /// direction set by the default constructor.
+ ID_DirectionForward, ///< Indicates instruction to travel forward.
+ ID_DirectionBearRight, ///< Indicates instruction to bear right.
+ ID_DirectionLightRight, ///< Indicates instruction to turn slightly to
+ /// the right.
+ ID_DirectionRight, ///< Indicates instruction to turn right.
+ ID_DirectionHardRight, ///< Indicates instruction to turn hard to the
+ /// right.
+ ID_DirectionUTurnRight, ///< Indicates instruction to make a right
+ /// u-turn.
+ ID_DirectionUTurnLeft, ///< Indicates instruction to make a left
+ /// u-turn.
+ ID_DirectionHardLeft, ///< Indicates instruction to turn hard to the
+ /// left.
+ ID_DirectionLeft, ///< Indicates instruction to turn left.
+ ID_DirectionLightLeft, ///< Indicates instruction to turn slightly to
+ /// the left.
+ ID_DirectionBearLeft ///< Indicates instruction to bear left.
+ };
+
+ /**
+ * This method is the default constructor. It creates an invalid instance,
+ * with direction set to ID_NoDirection.
+ */
+ Maneuver();
+
+ /**
+ * This method is the copy constructor.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * copied to the new instance of the class.
+ */
+ Maneuver(const Maneuver& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~Maneuver();
+
+ /**
+ * This method is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose contents are to be
+ * copied to the given instance of the class.
+ *
+ * @return A reference to the given instance after the assignment.
+ */
+ Maneuver& operator = (const Maneuver& rRhs);
+
+ /**
+ * This method checks if the given maneuver object is valid. The object is
+ * valid if at least its position property holds valid coordinates and
+ * direction is set to a value other than <code>ID_NoDirection</code>.
+ *
+ * @return <code>true</code> if the given object is valid, otherwise
+ * <code>false</code>.
+ */
+ bool IsValid() const;
+
+ /**
+ * This method sets the position (location) of the maneuver.
+ *
+ * @param rPosition A constant reference to an object containing the
+ * geographic coordinates of the location at which the maneuver is to
+ * be executed.
+ */
+ void SetPosition(const GeoCoordinates& rPosition);
+
+ /**
+ * This method retrieves the position (location) of the maneuver.
+ *
+ * @return An object containing the geographic coordinates of the location
+ * at which the maneuver is to be executed.
+ */
+ GeoCoordinates GetPosition() const;
+
+ /**
+ * This method sets the maneuver instruction text.
+ *
+ * @param sInstructionText A constant reference to a string containing the
+ * maneuver instruction text.
+ */
+ void SetInstructionText(const String& sInstructionText);
+
+ /**
+ * This method retrieves the maneuver instruction text.
+ *
+ * @return A constant reference to a string containing the maneuver
+ * instruction text.
+ */
+ String GetInstructionText() const;
+
+ /**
+ * This method sets the maneuver direction.
+ *
+ * @param aDirection A value indicating the maneuver direction.
+ */
+ void SetDirection(InstructionDirection aDirection);
+
+ /**
+ * This method retrieves the maneuver direction.
+ *
+ * @return A value indicating the maneuver direction.
+ */
+ InstructionDirection GetDirection() const;
+
+ /**
+ * This method sets the time to next instruction in the given maneuver.
+ *
+ * @param aSecs A value specifying the time to the next instruction in
+ * seconds.
+ */
+ void SetTimeToNextInstruction(int aSecs);
+
+ /**
+ * This method retrieves the time to next instruction in the given maneuver.
+ *
+ * @return A value specifying the time to the next instruction in seconds.
+ */
+ int GetTimeToNextInstruction() const;
+
+ /**
+ * This method sets the distance to next instruction in the given maneuver.
+ *
+ * @param aDistance A value specifying the distance to the next instruction
+ * in meters.
+ */
+ void SetDistanceToNextInstruction(double aDistance);
+
+ /**
+ * This method retrieves the distance to next instruction in the given
+ * maneuver.
+ *
+ * @return A value specifying the distance to the next instruction
+ * in meters.
+ */
+ double GetDistanceToNextInstruction() const;
+
+private:
+ class ManeuverImpl;
+ ManeuverImpl* m_pImpl;
+
+ friend class ManeuverImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* MANEUVER_H */
diff --git a/inc/engine/routes/RouteSegment.h b/inc/engine/routes/RouteSegment.h
new file mode 100755
index 0000000..6835f07
--- /dev/null
+++ b/inc/engine/routes/RouteSegment.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ROUTESEGMENT_H
+#define ROUTESEGMENT_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "routes/Maneuver.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Maneuver;
+class RouteSegmentImpl;
+
+class RouteSegment;
+
+/**
+ * This typedef defines a vector of instances of <code>RouteSegment</code> as a
+ * type.
+ *
+ * \ingroup routes
+ */
+typedef std::vector<RouteSegment> RouteSegmentList;
+
+
+/**
+ * This class encapsulates a route segment which is a section of a route between
+ * two waypoints. A number of properties define a route segment, including the
+ * time required to travel it, its length, path (geometry), and maneuvers.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API RouteSegment
+{
+
+public:
+ /**
+ * This method is the default constructor. It creates an invalid object,
+ * with both travel time and distance set to zero.
+ */
+ RouteSegment();
+
+ /**
+ * This method is a copy constructor that initializes a new instance of the
+ * class, using the property values from the object supplied by the caller.
+ *
+ * @param rRhs A constant reference to an object whose property values are to
+ * be used to initialize a new instance of <code>RouteSegment</code>.
+ */
+ RouteSegment(const RouteSegment& rRhs);
+
+ /**
+ * This method is the destructor.
+ */
+ ~RouteSegment();
+
+ /**
+ * This is the assignment operator.
+ *
+ * @param rRhs A constant reference to an object whose property values are to
+ * be copied to the given instance of <code>RouteSegment</code>.
+ *
+ * @return A reference to the given instance of the class after the
+ * assignment.
+ */
+ RouteSegment& operator = (const RouteSegment& rRhs);
+
+
+ /**
+ * This method checks if the given instance of the class is valid. A segment
+ * is valid if, at a minimum, its path property is defined.
+ *
+ * @return <code>true</code> if the object is valid, otherwise
+ * <code>false</code>.
+ */
+ bool IsValid() const;
+
+ /**
+ * This method sets the route segment travel time.
+ *
+ * @param aSecs A value indicating the length of time required to travel the
+ * length of the route segment in seconds.
+ */
+ void SetTravelTime(int aSecs);
+
+ /**
+ * This method retrieves the route segment travel time.
+ *
+ * @return A value indicating time required to travel the
+ * length of the route segment in seconds.
+ */
+ int GetTravelTime() const;
+
+ /**
+ * This method sets the route segment length.
+ *
+ * @param aDistance A value indicating the length of the
+ * the route segment in meters.
+ */
+ void SetDistance(double aDistance);
+
+ /**
+ * This method retrieves the length of the route segment.
+ *
+ * @return A value indicating the length of the
+ * the route segment in meters.
+ */
+ double GetDistance() const;
+
+ /**
+ * This method sets the path (geometry) of the route segment.
+ *
+ * @param rPath A constant reference to a vector of instances of
+ * <code>GeoCoordinates</code> which defines the path (geometry) of
+ * the route segment.
+ */
+ void SetPath(const GeoCoordinateList& rPath);
+
+ /**
+ * This method retrieves the path (geometry) of the route segment.
+ *
+ * @return A vector of instances of <code>GeoCoordinates</code> which
+ * defines the path (geometry) of the route segment.
+ */
+ GeoCoordinateList GetPath() const;
+
+ /**
+ * This method adds a maneuver to the given route segment.
+ *
+ * @param rManeuver A constant reference to an object that defines a route
+ * maneuver.
+ */
+ void addManeuver(const Maneuver& rManeuver);
+
+ /**
+ * This method associates a list of maneuvers with the given route segment.
+ *
+ * @param vManeuverList A constant reference to a vector of route maneuver
+ * objects.
+ */
+ void SetManeuverList(const ManeuverList& vManeuverList);
+
+ /**
+ * This method retrieves a list of maneuvers associated with the given route
+ * segment.
+ *
+ * @return A vector of route maneuver objects.
+ */
+ ManeuverList GetManeuverList() const;
+
+private:
+ RouteSegmentImpl* m_pImpl;
+
+ friend class RouteSegmentImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* ROUTESEGMENT_H */
diff --git a/inc/engine/routes/RouterError.h b/inc/engine/routes/RouterError.h
new file mode 100755
index 0000000..7d9b2c0
--- /dev/null
+++ b/inc/engine/routes/RouterError.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ROUTERERROR_H
+#define ROUTERERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+
+/**
+ * This class encapsulates an error condition that may arise when processing a
+ * routing request.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API RouterError : public ErrorBase
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for the recognized error types.
+ */
+ enum ErrorCode
+ {
+ EC_ParseError, ///< Indicates a parsing error.
+ EC_UnsupportedOptionError, ///< Indicates that an attempt to use an
+ /// unsupported option was detected.
+ EC_UnknownError ///< Indicates an unknown error.
+ };
+
+ /**
+ * This method is a constructor that initializes a new instance of the class
+ * using the error code value supplied by the caller.
+ *
+ * @param aErrorCode A value indicating the error type to use when
+ * initializing the new instance of the class.
+ */
+ RouterError(ErrorCode aErrorCode);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~RouterError();
+
+ /**
+ * This method retrieves the error code.
+ *
+ * @return A value indicating the error type.
+ */
+ ErrorCode GetErrorCode() const;
+
+ /**
+ * This method obtains a string representation of the given instance.
+ * The method must be implemented by derived classes.
+ *
+ * @return A string containing the text representation of the given instance
+ * of the class.
+ */
+ virtual String ToString() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(RouterError);
+
+ class RouterErrorImpl;
+ RouterErrorImpl* m_pImpl;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherError.h b/inc/engine/tilefetcher/TileFetcherError.h
new file mode 100755
index 0000000..8a14411
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherError.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERERROR_H
+#define TILEFETCHERERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information related to an error condition that may
+ * arise when requesting map tiles from the server.
+ *
+ * \ingroup tilefetcher
+ */
+class EXPORT_API TileFetcherError : public ErrorBase
+{
+public:
+
+ /**
+ * This enumeration defines identifiers for error conditions related to the
+ * tile fetcher.
+ */
+ enum ErrorEntity
+ {
+ TFE_COULD_NOT_DECODE_SRC_IMAGE, ///< Indicates that the source image
+ /// could not be decoded.
+ TFE_COULD_NOT_RETRIEVE_HASH ///< Indicates that the hash could not
+ /// be retrieved.
+ };
+
+ /**
+ * This method is a constructor.
+ *
+ * @param aItem A value rerpresenting an error condition; a value with which
+ * to initialize the given instance of the class.
+ */
+ TileFetcherError(ErrorEntity aItem);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~TileFetcherError();
+
+ /**
+ * This method produces a string representation of the given instance of
+ * the class. The method must be implemented by derived classes.
+ *
+ * @return A string containing a text representation of the given instance
+ * of the class.
+ */
+ virtual String ToString() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherError);
+
+ class TileFetcherErrorImpl;
+ TileFetcherErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaQuery.h b/inc/engine/tilefetcher/TileFetcherMetaQuery.h
new file mode 100644
index 0000000..2244746
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherMetaQuery.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAQUERY_H
+#define TILEFETCHERMETAQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherMetaQueryListener;
+
+/**
+ * This class encapsulates a query representing a map tile metadata request.
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaQuery : public BaseQuery
+{
+public:
+ /**
+ * This method is the constructor.
+ *
+ * @param sUri A constant reference to a string containing the base URL
+ * which is used in the query.
+ */
+ TileFetcherMetaQuery( const String& sUri );
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~TileFetcherMetaQuery();
+
+ /**
+ * This method attempts to establish a connection with the server and then,
+ * if the connection has been established, it builds and submits a query.
+ *
+ * @param rListener A reference to a an object that is to be notified when
+ * the reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to user passed data that will be received
+ * back through the reply object.
+ *
+ * @return <code>NULL</code> if a connection to the server cannot be
+ * established, a pointer to the request object handle if the query
+ * has been submitted successfully. Note that <code>true</code> does
+ * not indicate that a reply is available.
+ */
+ RequestId Execute(TileFetcherMetaQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This static method obrains the base URI to be used for all subsequent
+ * tile fetcher queries.
+ *
+ * @return A string containing the base URI.
+ */
+ static String GetBaseUri();
+
+ /**
+ * This static method obtains the base URI to be used for all subsequent
+ * tile fetcher queries.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+ static void SetBaseUri(const String& sUri);
+
+private:
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherMetaQuery);
+
+ String m_sBaseUri;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaQueryListener.h b/inc/engine/tilefetcher/TileFetcherMetaQueryListener.h
new file mode 100644
index 0000000..0fb9ff1
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherMetaQueryListener.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAQUERYLISTENER_H
+#define TILEFETCHERMETAQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherMetaReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaQueryListener : public QueryListener
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ TileFetcherMetaQueryListener();
+
+ /**
+ * This method is the destructor.
+ */
+ ~TileFetcherMetaQueryListener();
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * tile fetch meta request.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnTileFetcherMetaReply(const TileFetcherMetaReply& rReply) = 0;
+
+private:
+
+ void OnReplySuccess(BaseReply& rReply);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaReply.h b/inc/engine/tilefetcher/TileFetcherMetaReply.h
new file mode 100644
index 0000000..e357b7f
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherMetaReply.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAREPLY_H
+#define TILEFETCHERMETAREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a reply to a map tile metadata request.
+ *
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaReply : public BaseReply
+{
+public:
+ /**
+ * This method is a constructor that initialize the class instance.
+ */
+ TileFetcherMetaReply();
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~TileFetcherMetaReply();
+
+ /**
+ * This method retrieves the hash key which should be used for map tile
+ * requests.
+ *
+ * @return A string representing the hash key.
+ */
+ String GetHash() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherMetaReply);
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+ class TileFetcherMetaReplyImpl;
+ TileFetcherMetaReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherQuery.h b/inc/engine/tilefetcher/TileFetcherQuery.h
new file mode 100755
index 0000000..9a6adfd
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherQuery.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERQUERY_H
+#define TILEFETCHERQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "common/TileKey.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherQueryListener;
+
+/**
+ * This class encapsulates a query representing a request for a map tile.
+ *
+ * Map tiles form a grid reflecting the normalized Mercator projection, which
+ * represents the surface of the globe as a set of squares. The size of the grid
+ * depends on the map zoom level. At the lowest zoom level, the entire globe is
+ * shown in one square, which means that the tile grid consists of one row and
+ * one column. At the next higher zoom level, the tile grid contains two rows
+ * and two columns per row, at the next, four rows and four columns per row, and
+ * so on -- in other words, the number of rows and columns doubles at each
+ * higher zoom level.
+ *
+ * The map tiles are available in resolutions of 128 x 128 pixels or 256 x 256
+ * pixels, depending on the size of the available memory on the target device.
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherQuery : public BaseQuery
+{
+public:
+ /**
+ * This method is the default constructor.
+ */
+ TileFetcherQuery();
+
+ /**
+ * This method is a constructor that sets the class attributes using the
+ * arguments provided by the caller.
+ *
+ * @param rKey A constant reference to an object that specifies the map tile
+ * row, column and zoom level.
+ *
+ * @param uSize A value indicating the tile size.
+ */
+ TileFetcherQuery(const TileKey& rKey, size_t uSize);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~TileFetcherQuery();
+
+ /**
+ * This method sets the hash key which is used for the query.
+ * If not set or string is empty, "newest" will be used.
+ *
+ * @param hash A string containing the hash key to be used.
+ */
+ void SetHash(String hash);
+
+ /**
+ * This method retrieves an object specifying the map tile row, column and
+ * zoom level.
+ *
+ * @return A constant reference to an object that specifies the map tile
+ * row, column and zoom level.
+ */
+ const TileKey& GetKey() const;
+
+ /**
+ * This method sets an object specifying the map tile row, column and zoom
+ * level.
+ *
+ * @return rKey A constant reference to an object that specifies the map tile
+ * row, column and zoom level.
+ */
+ void SetKey(const TileKey& rKey);
+
+ /**
+ * This method sets the size of the map tile (resolution) in pixels.
+ *
+ * @param uTileSize A value indicating the tile size.
+ */
+ void SetTileSize(size_t uTileSize);
+
+ /**
+ * This method retrieves the size of the map tile (resolution) in pixels.
+ *
+ * @param uTileSize A value indicating the tile size.
+ */
+ size_t GetTileSize() const;
+
+ /**
+ * This method attempts to establish a connection with the server and then,
+ * if the connection has been established, it builds and submits a query.
+ *
+ * @param rListener A reference to a an object that is to be notified when
+ * the reply to the query has arrived from the server.
+ *
+ * @param pUserData A pointer to an object containing user passed, which is
+ * to be echoed back through the reply object.
+ *
+ * @return A value representing the identifier of issued request.
+ */
+ virtual RestItemHandle::RequestId Execute(TileFetcherQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * tile fetcher queries based on the current setting of map type in the
+ * <code>TileKey</code> object.
+ *
+ * @return A string containing the base URI.
+ */
+#ifdef TIZEN_MIGRATION
+ String GetBaseUri();
+#else
+ static String GetBaseUri();
+#endif
+
+ /**
+ * This method returns the base URI to be used for all subsequent
+ * tile fetcher queries based on the current setting of map type in the
+ * <code>TileKey</code> object.
+ *
+ * @param sUri A constant reference to a string containing the base URI.
+ */
+#ifdef TIZEN_MIGRATION
+ void SetBaseUri(const String& sUri);
+#else
+ static void SetBaseUri(const String& sUri);
+#endif
+
+private:
+ /**
+ * This method creates the URI for the request.
+ *
+ * @return URI request string.
+ */
+ String CreateUri() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherQuery);
+
+ class TileFetcherQueryImpl;
+ TileFetcherQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherQueryListener.h b/inc/engine/tilefetcher/TileFetcherQueryListener.h
new file mode 100644
index 0000000..f4675f2
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherQueryListener.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERQUERYLISTENER_H
+#define TILEFETCHERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherQueryListener : public QueryListener
+{
+public:
+
+ /**
+ * This is the default constructor.
+ */
+ TileFetcherQueryListener();
+
+ /**
+ * This method is the destructor.
+ */
+ ~TileFetcherQueryListener();
+
+ /**
+ * This method is a callback invoked when data have arrived in response to a
+ * tile fetch request.
+ *
+ * @param rReply A Constant reference to an object containing the response data.
+ */
+ virtual void OnTileFetcherReply(const TileFetcherReply& rReply) = 0;
+
+private:
+
+ void OnReplySuccess(BaseReply& rReply);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherReply.h b/inc/engine/tilefetcher/TileFetcherReply.h
new file mode 100755
index 0000000..93e5a4b
--- /dev/null
+++ b/inc/engine/tilefetcher/TileFetcherReply.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERREPLY_H
+#define TILEFETCHERREPLY_H
+
+#include <tr1/memory>
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "common/TileKey.h"
+
+#include "maps/GeoTile.h"
+
+#ifndef TIZEN_MIGRATION
+namespace Tizen{ namespace Graphics{ class Bitmap; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a reply to a request for a map tile.
+ *
+ * \ingroup tilefetcher
+ */
+class TileFetcherReply : public BaseReply
+{
+public:
+ /**
+ * This method is a constructor that initialize the class instance, using
+ * an object that specifies the map tile row, column, zoom level, map
+ * language and map type.
+ *
+ * @param rKey A constant reference to a tile key object.
+ */
+ TileFetcherReply(const TileKey& rKey);
+
+ /**
+ * This method is the (virtual) destructor.
+ */
+ virtual ~TileFetcherReply();
+
+ /**
+ * This method retrieves the map tile as a bitmap from the reply to the
+ * query.
+ *
+ * @return A bitmap that contains the map tile.
+ */
+ DrawableBitmapPtr GetTile() const;
+
+ /**
+ * This method retrieves an object specifying the map tile
+ * row, column and zoom level.
+ *
+ * @return A constant reference to an object that contains the map tile row,
+ * column, zoom level, map language and map type.
+ */
+ const TileKey& GetKey() const;
+
+private:
+ HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherReply);
+ friend class TestTileFetcher;
+
+ virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+ class TileFetcherReplyImpl;
+ TileFetcherReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/here_api.h b/inc/here_api.h
new file mode 100644
index 0000000..61694ef
--- /dev/null
+++ b/inc/here_api.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _LOCATION_HERE_API_H_
+#define _LOCATION_HERE_API_H_
+
+#include <maps_plugin.h>
+
+int HerePluginInit(maps_plugin_h *hPlugin);
+
+int HerePluginShutdown(maps_plugin_h hPlugin);
+
+int HerePluginSetProviderKey(const char* szKey);
+
+int HerePluginGetProviderKey(char** szKey);
+
+int HerePluginSetPreference(maps_preference_h hPref);
+
+int HerePluginGetPreference(maps_preference_h *hPref);
+
+int HerePluginGeocode(const char* szAddr,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId);
+
+int HerePluginGeocodeByStructuredAddress(const maps_address_h hAddr,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId);
+
+int HerePluginGeocodeInsideArea(const char* szAddr, maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId);
+
+int HerePluginReverseGeocode(double dLatitude, double dLongitude,
+ maps_item_hashtable_h hPref, maps_service_reverse_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId);
+
+int HerePluginSearchPlace(maps_coordinates_h hPos, int nDistance,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceByArea(maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceByAddress(const char* szAddr, maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceDetails(const char* szUrl,
+ maps_item_hashtable_h hPref, maps_service_search_place_cb pCbFunc,
+ void * pUserData, int *nReqId);
+
+int HerePluginSearchRoute(maps_coordinates_h hOrigin, maps_coordinates_h hDestination,
+ maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+ void *pUserData, int *nReqId);
+
+int HerePluginSearchRouteWaypoints(const maps_coordinates_h* hWaypointList, int nWaypointNum,
+ maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+ void* pUserData, int *nReqId);
+
+int HerePluginCancelRequest(int nReqId);
+
+#endif //_LOCATION_HERE_API_H_ \ No newline at end of file
diff --git a/inc/here_base.h b/inc/here_base.h
new file mode 100644
index 0000000..6d91848
--- /dev/null
+++ b/inc/here_base.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_BASE_H_
+#define _LOCATION_HERE_BASE_H_
+
+//plug-in header
+#include "here_utils.h"
+#include <common/BaseReply.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+class HereBase
+{
+public:
+ /**
+ *This is the default constructor for Geocoder.
+ */
+
+ HereBase();
+
+ /**
+ *This is the default destructor for Geocoder.
+ */
+
+ virtual ~HereBase();
+
+ void TerminateService(void);
+
+ gint GetReqId(void);
+ gint GetRestReqId(void);
+ gint GetErrorCode(const BaseReply& Reply);
+
+protected:
+ gint m_nReqId;
+ gint m_nRestReqId;
+ void* m_pCbFunc;
+ void* m_pUserData;
+ gboolean m_bCanceled;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_BASE_H_
+
diff --git a/inc/here_geocode.h b/inc/here_geocode.h
new file mode 100644
index 0000000..33567de
--- /dev/null
+++ b/inc/here_geocode.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_GEOCODER_H_
+#define _LOCATION_HERE_GEOCODER_H_
+
+//plug-in header
+#include "here_manager.h"
+
+// maps-service header
+#include <maps_address.h>
+#include <maps_coordinates.h>
+#include <maps_area.h>
+
+//map engine header
+#include <geocoder/GeoCoderQuery.h>
+#include <geocoder/GeoCoderQueryListener.h>
+#include <geocoder/GeoCoderReply.h>
+#include <geocoder/Result.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereGeocode
+: public HereBase
+, public GeoCoderQueryListener
+{
+public:
+ /**
+ *This is the default constructor for Geocoder.
+ */
+
+ HereGeocode(void *pCbFunc, void *pUserData, int nReqId);
+
+ /**
+ *This is the default destructor for Geocoder.
+ */
+
+ ~HereGeocode();
+
+ here_error_e PrepareQuery();
+ here_error_e PreparePreference(maps_preference_h hPref);
+
+ here_error_e StartGeocode(const char* szAddr);
+ here_error_e StartGeocodeInsideArea(const char* szAddr, const maps_area_h hArea);
+ here_error_e StartGeocodeByStructuredAddress(const maps_address_h hAddr);
+
+ virtual void OnGeoCoderReply(const GeoCoderReply& Reply);
+ virtual void OnGeoCoderFailure(const GeoCoderReply& Reply);
+
+private:
+ GeoCoderQuery* m_pQuery;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_GEOCODER_H_
diff --git a/inc/here_manager.h b/inc/here_manager.h
new file mode 100644
index 0000000..8984392
--- /dev/null
+++ b/inc/here_manager.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_MANAGER_H_
+#define _LOCATION_HERE_MANAGER_H_
+
+//common header
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
+#include <vector>
+
+//platform header
+#include <net_connection.h>
+#include <app_manager.h>
+
+//plug-in header
+#include "here_base.h"
+#include "here_api.h"
+#include "here_types.h"
+#include "here_utils.h"
+
+//map engine header
+#include <common/ApplicationContext.h>
+#include <common/HereConfig.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+class HereManager;
+
+typedef std::vector<HereBase*> HereSvcList;
+
+class HereManager
+{
+public:
+ /**
+ *This is the default constructor for Geocoder.
+ */
+
+ HereManager();
+
+ /**
+ *This is the default destructor for Geocoder.
+ */
+
+ virtual ~HereManager();
+
+ enum HereSvcType {
+ HERE_SVC_GEOCODE,
+ HERE_SVC_REV_GEOCODE,
+ HERE_SVC_PLACE,
+ HERE_SVC_ROUTE
+ };
+
+ void* CreateInstance(HereSvcType nHereSvc, void* pCbFunc, void* pUserData, int *nReqId);
+ here_error_e CloseInstance(int nReqId);
+ here_error_e CancelInstance(int nReqId);
+ here_error_e SetCredentials(const char* provider_key);
+ here_error_e GetCredentials(char** provider_key);
+ void TerminateAllServices(void);
+
+ here_error_e SetProxyAddress();
+ here_error_e SetPreference(maps_preference_h hPref);
+ here_error_e GetPreference(maps_preference_h *hPref);
+ maps_preference_h GetPreference();
+
+ static bool Create();
+ static HereManager* GetHandler();
+ static void Close();
+
+private:
+ here_error_e SetCredentials();
+ static bool AppInfoMetadataCb(const char *metadata_key, const char *metadata_value, void *user_data);
+ static void NetworkStateChangedIndCb(connection_type_e type, void *user_data);
+ static here_error_e ConvertNetworkErrorCode(const int nErrorCode);
+ connection_h m_hConnection;
+ static int m_nRefCnt;
+ static HereManager *m_pHereManager;
+
+protected:
+ HereSvcList m_HereList;
+ gint m_nNextReqId;
+ maps_preference_h m_hPref;
+ pthread_mutex_t m_mtxHereList;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_MANAGER_H_
diff --git a/inc/here_place.h b/inc/here_place.h
new file mode 100644
index 0000000..2ba5fba
--- /dev/null
+++ b/inc/here_place.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_PLACE_H_
+#define _LOCATION_HERE_PLACE_H_
+
+#include <deque>
+
+//plug-in header
+#include "here_manager.h"
+
+//maps-service header
+#include <maps_place_plugin.h>
+#include <maps_place_rating_plugin.h>
+#include <maps_place_contact_plugin.h>
+#include <maps_place_image_plugin.h>
+#include <maps_place_link_object_plugin.h>
+#include <maps_place_editorial_plugin.h>
+#include <maps_place_review_plugin.h>
+
+//map engine header
+#include <finder/DiscoveryQuery.h>
+#include <finder/PlaceDetailsQuery.h>
+#include <finder/FinderQueryListener.h>
+#include <finder/DiscoveryReply.h>
+#include <finder/PlaceDetailsReply.h>
+#include <finder/PlaceDetails.h>
+#include <finder/CategoryId.h>
+#include <finder/LinkObject.h>
+#include <finder/Ratings.h>
+#include <finder/RelatedItem.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HerePlace
+: public HereBase
+, public FinderQueryListener
+{
+public:
+ typedef std::deque<maps_place_h> PlaceList;
+
+ /**
+ *This is the default constructor for Place.
+ */
+
+ HerePlace(void *pCbFunc, void *pUserData, int nReqId);
+
+ /**
+ *This is the default destructor for Place.
+ */
+
+ ~HerePlace();
+
+ here_error_e PrepareDiscoveryQuery();
+ here_error_e PrepareDiscoveryPreference(maps_preference_h hPref);
+ here_error_e PrepareDiscoveryFilter(maps_place_filter_h hFilter);
+
+ here_error_e StartDiscoveryPlace(maps_coordinates_h hCoord, int nDistance);
+ here_error_e StartDiscoveryPlaceByArea(maps_area_h hArea);
+ here_error_e StartDiscoveryPlaceByAddress(const char *szAddr, maps_area_h hArea);
+
+ here_error_e PreparePlaceDetailsQuery();
+ here_error_e PreparePlaceDetailsPreference(maps_preference_h hPref);
+
+ here_error_e StartPlaceDetails(const char* szPlaceId);
+ here_error_e StartPlaceDetailsInternal(const char* szUrl);
+
+ virtual void OnDiscoverReply(const DiscoveryReply &Reply);
+ virtual void OnDiscoverFailure(const DiscoveryReply& Reply);
+
+ virtual void OnPlaceDetailsReply(const PlaceDetailsReply &Reply);
+ virtual void OnPlaceDetailsFailure(const PlaceDetailsReply& Reply);
+
+private:
+ void ProcessPlaceLocation(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceContact(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceCategory(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceImage(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceDetails(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceReviews(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceRatings(PlaceDetails herePlace, maps_place_h mapsPlace);
+ void ProcessPlaceRated(PlaceDetails herePlace, maps_place_h mapsPlace);
+
+ void __sortList(PlaceList &list);
+ static bool __compareWithTitle(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithId(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithType(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithDistance(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithRating(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithCategory(const maps_place_h &item1, const maps_place_h &item2);
+ static bool __compareWithCategoryCb(int index, int total, maps_place_category_h category,
+ void *user_data);
+
+ DiscoveryQuery* m_pDiscoveryQuery;
+ PlaceDetailsQuery* m_pPlaceDetailsQuery;
+ int m_nReplyCnt;
+ int m_nReplyIdx;
+ char *m_szSortBy;
+
+ PlaceList m_PlaceList;
+
+ static const bool __sending_place_details_query_automatically = TRUE;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_PLACE_H_
diff --git a/inc/here_revgeocode.h b/inc/here_revgeocode.h
new file mode 100644
index 0000000..43507a1
--- /dev/null
+++ b/inc/here_revgeocode.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_REV_GEOCODER_H_
+#define _LOCATION_HERE_REV_GEOCODER_H_
+
+//plug-in header
+#include "here_manager.h"
+
+#include <maps_extra_types.h>
+#include <maps_coordinates.h>
+
+//map engine header
+#include <geocoder/ReverseGeoCoderQuery.h>
+#include <geocoder/GeoCoderQueryListener.h>
+#include <geocoder/GeoCoderReply.h>
+#include <geocoder/Result.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereRevGeocode
+: public HereBase
+, public GeoCoderQueryListener
+{
+public:
+ /**
+ *This is the default constructor for reverse Geocoder.
+ */
+
+ HereRevGeocode(void *pCbFunc, void *pUserData, int nReqId);
+
+ /**
+ *This is the default destructor for reverse Geocoder.
+ */
+
+ ~HereRevGeocode();
+
+
+ here_error_e PrepareQuery();
+ here_error_e PreparePreference(maps_preference_h hPref);
+ here_error_e PreparePosition(double dLat, double dLng);
+
+ here_error_e StartRevGeocode(maps_item_hashtable_h hPref);
+
+ virtual void OnGeoCoderReply(const GeoCoderReply& Reply);
+ virtual void OnGeoCoderFailure(const GeoCoderReply& Reply);
+
+private:
+ ReverseGeoCoderQuery* m_pQuery;
+ GeoCoordinates m_geoCoord;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_REV_GEOCODER_H_
diff --git a/inc/here_route.h b/inc/here_route.h
new file mode 100644
index 0000000..0aab609
--- /dev/null
+++ b/inc/here_route.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_ROUTE_H_
+#define _LOCATION_HERE_ROUTE_H_
+
+//plug-in header
+#include "here_manager.h"
+
+//maps-service header
+#include <maps_route_plugin.h>
+#include <maps_route_segment_plugin.h>
+#include <maps_route_maneuver_plugin.h>
+
+//map engine header
+#include <routes/GeoRouteQuery.h>
+#include <routes/GeoRouteQueryListener.h>
+#include <routes/GeoRouteReply.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereRoute
+: public HereBase
+, public GeoRouteQueryListener
+{
+public:
+ /**
+ *This is the default constructor for Route.
+ */
+
+ HereRoute(void *pCbFunc, void *pUserData, int nReqId);
+
+ /**
+ *This is the default destructor for Route.
+ */
+
+ ~HereRoute();
+
+ here_error_e PrepareQuery();
+ here_error_e PrepareWaypoint(maps_coordinates_h hOrigin, maps_coordinates_h hDestination);
+ here_error_e PrepareWaypoint(const maps_coordinates_h* hWaypointList, int nWaypointNum);
+ here_error_e PreparePreference(maps_preference_h hPref);
+
+ here_error_e StartRoute(void);
+
+ virtual void OnRouteReply(const GeoRouteReply& Reply);
+ virtual void OnRouteFailure(const GeoRouteReply& Reply);
+
+private:
+ maps_error_e ProcessSegments(maps_route_h mapsRoute, const RouteSegmentList& hereSegmList);
+ maps_error_e ProcessManeuver(maps_route_segment_h mapsSegm, const ManeuverList& hereManeList);
+
+ GeoRouteQuery* m_pQuery;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_ROUTE_H_
diff --git a/inc/here_types.h b/inc/here_types.h
new file mode 100644
index 0000000..32899ad
--- /dev/null
+++ b/inc/here_types.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_TYPES_H_
+#define _LOCATION_HERE_TYPES_H_
+
+#include <glib.h>
+
+typedef enum {
+ HERE_ERROR_NONE = 0, /**< Successful */
+ HERE_ERROR_PERMISSION_DENIED, /**< Permission Denied */
+ HERE_ERROR_OUT_OF_MEMORY, /**< Out of memory */
+ HERE_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
+ HERE_ERROR_NOT_SUPPORTED, /**< Not supported */
+ HERE_ERROR_CONNECTION_TIME_OUT, /**< Timeout error, no answer */
+ HERE_ERROR_NETWORK_UNREACHABLE, /**< Network unavailable */
+ HERE_ERROR_INVALID_OPERATION, /**< Opeartion is not valid */
+ HERE_ERROR_KEY_NOT_AVAILABLE, /**< Invalid key */
+ HERE_ERROR_RESOURCE_BUSY, /**< Resource busy */
+ HERE_ERROR_CANCELED, /**< Service canceled */
+ HERE_ERROR_UNKNOWN, /**< Unknown error */
+ HERE_ERROR_SERVICE_NOT_AVAILABLE, /**< Service unavailabe*/
+ HERE_ERROR_NOT_FOUND, /**< Result not found */
+} here_error_e;
+
+#endif //_LOCATION_HERE_TYPES_H_
diff --git a/inc/here_utils.h b/inc/here_utils.h
new file mode 100644
index 0000000..ff47926
--- /dev/null
+++ b/inc/here_utils.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_UTILS_H_
+#define _LOCATION_HERE_UTILS_H_
+
+//common header
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
+#include <vector>
+
+//maps-service header
+#include <maps_extra_types.h>
+#include <maps_plugin_types.h>
+#include <maps_area.h>
+#include <maps_preference.h>
+#include <maps_route_maneuver.h>
+#include <maps_service.h>
+
+//plug-in header
+#include "here_types.h"
+
+//map engine header
+#include <geocoder/GeoCoderQuery.h>
+#include <finder/DiscoveryQuery.h>
+#include <routes/GeoRouteQuery.h>
+#include <routes/Maneuver.h>
+#include <common/GeoCoordinates.h>
+
+#define HERE_PLUGIN_BEGIN_NAMESPACE namespace Here { namespace PlugIn {
+#define HERE_PLUGIN_END_NAMESPACE }}
+#define HERE_PLUGIN_NAMESPACE_PREFIX Here::PlugIn
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "HERE_PLUGIN"
+
+/*
+* Internal Macros
+*/
+#define MAPS_LOGD(fmt,args...) LOGD(fmt, ##args)
+#define MAPS_LOGW(fmt,args...) LOGW(fmt, ##args)
+#define MAPS_LOGI(fmt,args...) LOGI(fmt, ##args)
+#define MAPS_LOGE(fmt,args...) LOGE(fmt, ##args)
+#define MAPS_SECLOG(fmt,args...) SECURE_LOGD(fmt, ##args)
+
+#define MAPS_CHECK_CONDITION(condition, error, msg) \
+ do { \
+ if (condition) { \
+ } else { \
+ MAPS_LOGE("%s(0x%08x)", msg, error); \
+ return error; \
+ } \
+ } while (0)
+
+#define MAPS_NULL_ARG_CHECK_RETURN_FALSE(arg)\
+ do { \
+ if(arg != NULL) { \
+ } else { \
+ MAPS_LOGE("MAPS_ERROR_INVALID_PARAMETER"); \
+ return false; }; \
+ } while (0)
+
+#define MAPS_NULL_ARG_CHECK(arg) \
+ MAPS_CHECK_CONDITION(arg != NULL,MAPS_ERROR_INVALID_PARAMETER,"MAPS_ERROR_INVALID_PARAMETER")
+
+#define MAPS_PRINT_ERROR_CODE_RETURN(code) \
+ do{ \
+ MAPS_LOGE("%s(0x%08x)", #code, code); \
+ return code; \
+ } while (0)
+
+#ifndef TIZEN_MIGRATION
+typedef std::string String;
+typedef std::string Uri;
+typedef std::wstring WString;
+#endif
+
+#define maps_item_list_items(item_list) g_list_length((GList*)(*(unsigned long*)item_list) )
+
+extern "C"
+{
+ int ConvertToMapsError(int nRet);
+ int ConvertToHereError(int nRet);
+ const char* ConverHereErrorToString(int nErr);
+ const char* ConvertMapsErrorToChar(int nErr);
+}
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereUtils
+{
+public:
+ /**
+ *This is the default constructor for Geocoder.
+ */
+
+ HereUtils();
+
+ /**
+ *This is the default destructor for Geocoder.
+ */
+
+ ~HereUtils();
+
+ static GeoRouteQuery::TravelMode Convert(maps_route_transport_mode_e nVal);
+ static maps_route_transport_mode_e Convert(GeoRouteQuery::TravelMode nVal);
+ static GeoRouteQuery::FeatureType Convert(maps_route_feature_e nVal);
+ static GeoRouteQuery::FeatureWeight Convert(maps_route_feature_weight_e nVal);
+ static Maneuver::InstructionDirection Convert(maps_route_turn_type_e nVal);
+ static maps_route_turn_type_e Convert(Maneuver::InstructionDirection nVal);
+ static GeoBoundingBox& Convert(maps_area_h hArea, GeoBoundingBox& Box);
+ static maps_area_h& Convert(GeoBoundingBox Box, maps_area_h& hArea);
+ static void Convert(String strUtf8, WString& strUtf16);
+ static void Convert(WString strUtf16, String& strUtf8);
+ static GeoBoundingBox& Convert(const char *src, GeoBoundingBox &box);
+ static maps_error_e ConvertHttpCodeToMapsError(int nVal);
+
+ static bool IsValid(GeoCoordinates geoCoord);
+ static bool IsValid(maps_coordinates_s geoCoord);
+ static bool IsValidCoord(double dLat, double dLng);
+ static bool IsValid(maps_area_s hArea);
+
+private:
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_UTILS_H_
diff --git a/aarch64/libheremaps-engine.so b/lib/aarch64/libheremaps-engine.so
index f1cdfcf..f1cdfcf 120000
--- a/aarch64/libheremaps-engine.so
+++ b/lib/aarch64/libheremaps-engine.so
diff --git a/lib/aarch64/libheremaps-engine.so.1 b/lib/aarch64/libheremaps-engine.so.1
new file mode 120000
index 0000000..9345673
--- /dev/null
+++ b/lib/aarch64/libheremaps-engine.so.1
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7 \ No newline at end of file
diff --git a/lib/aarch64/libheremaps-engine.so.1.0.6_7 b/lib/aarch64/libheremaps-engine.so.1.0.6_7
new file mode 100755
index 0000000..56cc739
--- /dev/null
+++ b/lib/aarch64/libheremaps-engine.so.1.0.6_7
Binary files differ
diff --git a/arm/libheremaps-engine.so b/lib/arm/libheremaps-engine.so
index f1cdfcf..f1cdfcf 120000
--- a/arm/libheremaps-engine.so
+++ b/lib/arm/libheremaps-engine.so
diff --git a/lib/arm/libheremaps-engine.so.1 b/lib/arm/libheremaps-engine.so.1
new file mode 120000
index 0000000..9345673
--- /dev/null
+++ b/lib/arm/libheremaps-engine.so.1
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7 \ No newline at end of file
diff --git a/lib/arm/libheremaps-engine.so.1.0.6_7 b/lib/arm/libheremaps-engine.so.1.0.6_7
new file mode 100755
index 0000000..3602a23
--- /dev/null
+++ b/lib/arm/libheremaps-engine.so.1.0.6_7
Binary files differ
diff --git a/i586/libheremaps-engine.so b/lib/i586/libheremaps-engine.so
index f1cdfcf..f1cdfcf 120000
--- a/i586/libheremaps-engine.so
+++ b/lib/i586/libheremaps-engine.so
diff --git a/lib/i586/libheremaps-engine.so.1 b/lib/i586/libheremaps-engine.so.1
new file mode 120000
index 0000000..9345673
--- /dev/null
+++ b/lib/i586/libheremaps-engine.so.1
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7 \ No newline at end of file
diff --git a/lib/i586/libheremaps-engine.so.1.0.6_7 b/lib/i586/libheremaps-engine.so.1.0.6_7
new file mode 100755
index 0000000..7973594
--- /dev/null
+++ b/lib/i586/libheremaps-engine.so.1.0.6_7
Binary files differ
diff --git a/x86_64/libheremaps-engine.so b/lib/x86_64/libheremaps-engine.so
index f1cdfcf..f1cdfcf 120000
--- a/x86_64/libheremaps-engine.so
+++ b/lib/x86_64/libheremaps-engine.so
diff --git a/lib/x86_64/libheremaps-engine.so.1 b/lib/x86_64/libheremaps-engine.so.1
new file mode 120000
index 0000000..9345673
--- /dev/null
+++ b/lib/x86_64/libheremaps-engine.so.1
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7 \ No newline at end of file
diff --git a/lib/x86_64/libheremaps-engine.so.1.0.6_7 b/lib/x86_64/libheremaps-engine.so.1.0.6_7
new file mode 100755
index 0000000..cd43eb7
--- /dev/null
+++ b/lib/x86_64/libheremaps-engine.so.1.0.6_7
Binary files differ
diff --git a/maps-plugin-here.changes b/maps-plugin-here.changes
new file mode 100644
index 0000000..1087dc3
--- /dev/null
+++ b/maps-plugin-here.changes
@@ -0,0 +1,29 @@
+[Version] maps-plugin-here_0.1.5
+[Date] 06 Oct 2015
+[Title] Fixed to return more proper error codes
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version] maps-plugin-here_0.1.4
+[Date] 24 Sep 2015
+[Title] Fixed to use reference count of handler
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version] maps-plugin-here_0.1.3
+[Date] 21 Sep 2015
+[Title] Get here_key from metadata of application manifest
+[Developer] Young-Ae Kang <youngae.kang@samsung.com>
+
+[Version] maps-plugin-here_0.1.2
+[Date] 18 Oct 2015
+[Title] Fixed route query bugs
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version] maps-plugin-here_0.1.1
+[Date] 09 Jun 2015
+[Title] Fixed memory leaks
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version] maps-plugin-here_0.1.0
+[Date] 01 July 2015
+[Title] Initialize version
+[Developer] Seechan Kim <cbible.kim@samsung.com>
diff --git a/maps-plugin-here.pc.in b/maps-plugin-here.pc.in
new file mode 100644
index 0000000..599cd78
--- /dev/null
+++ b/maps-plugin-here.pc.in
@@ -0,0 +1,14 @@
+#Package Information for pkg-config
+
+prefix=@PREFIX@
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=@PC_INCLUDE@
+
+Name: @PC_NAME@
+Description: @PC_DESCRIPTION@
+Version: @VERSION@
+Requires: @PC_REQUIRED@
+Libs: -L${libdir} @PC_LDFLAGS@
+Cflags: -I${includedir}
+
diff --git a/packaging/maps-plugin-here.spec b/packaging/maps-plugin-here.spec
index fcdce18..5a94839 100644
--- a/packaging/maps-plugin-here.spec
+++ b/packaging/maps-plugin-here.spec
@@ -25,6 +25,9 @@ BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(cairo)
BuildRequires: pkgconfig(evas)
BuildRequires: boost-devel
+#
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
%ifarch %arm
%define ARCH arm
@@ -49,8 +52,15 @@ This packages provides Plugin APIs capsulating HERE Maps Engine Library for Maps
%setup -q
%build
-cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCH=%{ARCH}
-#make %{?_smp_mflags}
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE -g"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE -g"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+
+MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DMAJORVER=${MAJORVER} -DFULLVER=%{version} -DLIBDIR=%{_libdir} -DARCH=%{ARCH}
+make %{?jobs:-j%jobs}
%install
rm -rf %{buildroot}
@@ -58,14 +68,17 @@ rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/share/license
cp LICENSE %{buildroot}/usr/share/license/%{name}
+cp -a lib/%{ARCH}/libheremaps-engine.so* %{buildroot}%{_prefix}/lib/
+
+%post
+/sbin/ldconfig
-mkdir -p %{buildroot}%{_prefix}/lib/maps/plugins/
-cp -a %{ARCH}/libmaps-plugin-here.so* %{buildroot}%{_prefix}/lib/maps/plugins/
-cp -a %{ARCH}/libheremaps-engine.so* %{buildroot}%{_prefix}/lib/
+%postun
+/sbin/ldconfig
%files
%manifest maps-plugin-here.manifest
%defattr(-,root,root,-)
-%{_prefix}/lib/maps/plugins/libmaps-plugin-here.so*
+%{_libdir}/maps/plugins/libmaps-plugin-here.so*
%{_prefix}/lib/libheremaps-engine.so*
/usr/share/license/maps-plugin-here
diff --git a/src/here_api.cpp b/src/here_api.cpp
new file mode 100644
index 0000000..f6cf4d2
--- /dev/null
+++ b/src/here_api.cpp
@@ -0,0 +1,538 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_api.h"
+#include "here_types.h"
+#include "here_geocode.h"
+#include "here_revgeocode.h"
+#include "here_place.h"
+#include "here_route.h"
+#include <common/HereConfig.h>
+
+
+using namespace HERE_PLUGIN_NAMESPACE_PREFIX;
+
+int HerePluginInit(maps_plugin_h *hPlugin)
+{
+ if (!hPlugin)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ HereManager::Create();
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ HereManager::GetHandler()->SetProxyAddress();
+
+ return HERE_ERROR_NONE;
+}
+
+int HerePluginShutdown(maps_plugin_h hPlugin)
+{
+ if (!hPlugin)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (HereManager::GetHandler())
+ HereManager::GetHandler()->Close();
+
+ return HERE_ERROR_NONE;
+}
+
+int HerePluginSetProviderKey(const char* szKey)
+{
+ if (!szKey)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ here_error_e error = HereManager::GetHandler()->SetCredentials(szKey);
+
+ return error;
+}
+
+int HerePluginGetProviderKey(char** szKey)
+{
+ if (!szKey)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ here_error_e error = HereManager::GetHandler()->GetCredentials(szKey);
+
+ return error;
+}
+
+int HerePluginSetPreference(maps_preference_h hPref)
+{
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ here_error_e error = HereManager::GetHandler()->SetPreference(hPref);
+
+ return error;
+}
+
+int HerePluginGetPreference(maps_preference_h *hPref)
+{
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ here_error_e error = HereManager::GetHandler()->GetPreference(hPref);
+
+ return error;
+}
+
+int HerePluginGeocode(const char* szAddr,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!szAddr || (szAddr && *szAddr == '\0') || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereGeocode *pGeocode =
+ (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pGeocode)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pGeocode->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pGeocode->PreparePreference(hPref);
+
+ error = pGeocode->StartGeocode(szAddr);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pGeocode->TerminateService();
+
+ return error;
+}
+
+int HerePluginGeocodeByStructuredAddress(const maps_address_h hAddr,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!hAddr || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereGeocode *pGeocode =
+ (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pGeocode)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pGeocode->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pGeocode->PreparePreference(hPref);
+
+ error = pGeocode->StartGeocodeByStructuredAddress(hAddr);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pGeocode->TerminateService();
+
+ return error;
+}
+
+int HerePluginGeocodeInsideArea(const char* szAddr, maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!szAddr || (szAddr && *szAddr == '\0') || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereGeocode *pGeocode =
+ (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pGeocode)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pGeocode->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pGeocode->PreparePreference(hPref);
+
+ error = pGeocode->StartGeocodeInsideArea(szAddr, hArea);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pGeocode->TerminateService();
+
+ return error;
+}
+
+int HerePluginReverseGeocode(double dLatitude, double dLongitude,
+ maps_item_hashtable_h hPref, maps_service_reverse_geocode_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!HereUtils::IsValidCoord(dLatitude, dLongitude))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereRevGeocode *pRevGeocode =
+ (HereRevGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_REV_GEOCODE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pRevGeocode)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_UNKNOWN;
+
+ do {
+ error = pRevGeocode->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRevGeocode->PreparePreference(hPref);
+
+ error = pRevGeocode->PreparePosition(dLatitude, dLongitude);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRevGeocode->StartRevGeocode(hPref);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pRevGeocode->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchPlace(maps_coordinates_h hPos, int nDistance,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!hPos || !HereUtils::IsValid(*(maps_coordinates_s*)hPos) || nDistance <= 0)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!hFilter || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HerePlace *pPlace =
+ (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pPlace)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pPlace->PrepareDiscoveryQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->PrepareDiscoveryPreference(hPref);
+
+ error = pPlace->PrepareDiscoveryFilter(hFilter);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->StartDiscoveryPlace(hPos, nDistance);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pPlace->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchPlaceByArea(maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!hFilter || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HerePlace *pPlace =
+ (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pPlace)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pPlace->PrepareDiscoveryQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->PrepareDiscoveryPreference(hPref);
+
+ error = pPlace->PrepareDiscoveryFilter(hFilter);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->StartDiscoveryPlaceByArea(hArea);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pPlace->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchPlaceByAddress(const char* szAddr, maps_area_h hArea,
+ maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+ void * pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!szAddr || (szAddr && *szAddr == '\0') || !hFilter || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HerePlace *pPlace =
+ (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pPlace)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pPlace->PrepareDiscoveryQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->PrepareDiscoveryPreference(hPref);
+
+ error = pPlace->PrepareDiscoveryFilter(hFilter);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->StartDiscoveryPlaceByAddress(szAddr, hArea);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pPlace->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchPlaceDetails(const char* szUrl,
+ maps_item_hashtable_h hPref, maps_service_search_place_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!szUrl || (szUrl && *szUrl == '\0') || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HerePlace *pPlace =
+ (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pPlace)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pPlace->PreparePlaceDetailsQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pPlace->PreparePlaceDetailsPreference(hPref);
+
+ error = pPlace->StartPlaceDetails(szUrl);
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pPlace->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchRoute(maps_coordinates_h hOrigin, maps_coordinates_h hDestination,
+ maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+ void *pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!hOrigin || !hDestination || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereUtils::IsValid(*(maps_coordinates_s*)hOrigin) ||
+ !HereUtils::IsValid(*(maps_coordinates_s*)hDestination))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereRoute *pRoute =
+ (HereRoute*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_ROUTE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pRoute)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pRoute->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRoute->PreparePreference(hPref);
+
+ error = pRoute->PrepareWaypoint(hOrigin, hDestination);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRoute->StartRoute();
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pRoute->TerminateService();
+
+ return error;
+}
+
+int HerePluginSearchRouteWaypoints(const maps_coordinates_h* hWaypointList, int nWaypointNum,
+ maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+ void* pUserData, int *nReqId)
+{
+ /* checking parmaters */
+ if (!hWaypointList || nWaypointNum < 2 || !pCbFunc || !nReqId)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ for (int i=0; i<nWaypointNum; i++)
+ {
+ if (!HereUtils::IsValid(*(maps_coordinates_s*)hWaypointList[i]))
+ return HERE_ERROR_INVALID_PARAMETER;
+ }
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ /* creating instance */
+ HereRoute *pRoute =
+ (HereRoute*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_ROUTE,
+ (void*)pCbFunc, pUserData, nReqId));
+
+ if(!pRoute)
+ return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+ /* sending request */
+ here_error_e error = HERE_ERROR_NONE;
+
+ do {
+ error = pRoute->PrepareQuery();
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRoute->PrepareWaypoint(hWaypointList, nWaypointNum);
+ if (error != HERE_ERROR_NONE) break;
+
+ error = pRoute->PreparePreference(hPref);
+
+ error = pRoute->StartRoute();
+ } while(0);
+
+ /* finishing task */
+ if(error != HERE_ERROR_NONE)
+ pRoute->TerminateService();
+
+ return error;
+}
+
+int HerePluginCancelRequest(int nReqId)
+{
+ if (nReqId <= 0)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!HereManager::GetHandler())
+ return HERE_ERROR_INVALID_OPERATION;
+
+ return (HereManager::GetHandler()->CancelInstance(nReqId));
+}
diff --git a/src/here_base.cpp b/src/here_base.cpp
new file mode 100644
index 0000000..c3589f3
--- /dev/null
+++ b/src/here_base.cpp
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_base.h"
+#include "here_manager.h"
+#include <common/CommunicationError.h>
+#include <common/ParserError.h>
+#include <finder/FinderError.h>
+#include <routes/RouterError.h>
+#include <tilefetcher/TileFetcherError.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereBase::HereBase()
+{
+ m_nRestReqId = 0;
+ m_bCanceled = 0;
+ m_nReqId = 0;
+}
+
+HereBase::~HereBase()
+{
+ if (HereManager::GetHandler())
+ HereManager::GetHandler()->CloseInstance(m_nReqId);
+}
+
+void HereBase::TerminateService(void)
+{
+ if(m_nRestReqId)
+ {
+ m_bCanceled = 1;
+ return;
+ }
+ delete this;
+}
+
+gint HereBase::GetReqId(void)
+{
+ return m_nReqId;
+}
+
+gint HereBase::GetRestReqId(void)
+{
+ return m_nRestReqId;
+}
+
+gint HereBase::GetErrorCode(const BaseReply& Reply)
+{
+ ErrorBase *pError = (ErrorBase*)Reply.GetError();
+ maps_error_e error = MAPS_ERROR_UNKNOWN;
+ CommunicationError *commErr;
+ FinderError *finderErr;
+ String errMsg = "";
+
+
+ if (pError)
+ {
+ ErrorBase::ErrorCategory category = pError->GetErrorCategory();
+
+ switch(category)
+ {
+ case ErrorBase::ErrorCategory::EC_CommunicationsError:
+ commErr = (CommunicationError*)pError;
+ errMsg = commErr->ToString();
+
+ if (commErr->GetErrorCode() == CommunicationError::ErrorCode::CE_NetworkError)
+ error = MAPS_ERROR_NETWORK_UNREACHABLE;
+ else if (commErr->GetErrorCode() == CommunicationError::ErrorCode::CE_RestEngineError)
+ error = MAPS_ERROR_INVALID_OPERATION;
+ else
+ error = HereUtils::ConvertHttpCodeToMapsError(commErr->GetHttpStatusCode());
+ break;
+
+ case ErrorBase::ErrorCategory::EC_ParserError:
+ errMsg = ((ParserError*)pError)->ToString();
+ error = MAPS_ERROR_INVALID_OPERATION;
+ break;
+
+ case ErrorBase::ErrorCategory::EC_RouterError:
+ errMsg = ((RouterError*)pError)->ToString();
+ error = MAPS_ERROR_INVALID_OPERATION;
+ break;
+
+ case ErrorBase::ErrorCategory::EC_TileMapError:
+ errMsg = ((TileFetcherError*)pError)->ToString();
+ error = MAPS_ERROR_INVALID_OPERATION;
+ break;
+
+ case ErrorBase::ErrorCategory::EC_FinderError:
+ finderErr = (FinderError*)pError;
+ //errMsg = finderErr->ToString();
+
+ if (finderErr->GetErrorType() == FinderError::ErrorType::ET_InvalidQueryArguments)
+ error = MAPS_ERROR_INVALID_PARAMETER;
+ else if (finderErr->GetErrorType() == FinderError::ErrorType::ET_InvalidCredentials)
+ error = MAPS_ERROR_KEY_NOT_AVAILABLE;
+ else
+ error = MAPS_ERROR_INVALID_OPERATION;
+ break;
+ default:
+ error = MAPS_ERROR_INVALID_OPERATION;
+ break;
+ }
+ }
+
+ if (error != MAPS_ERROR_NONE) {
+ if (errMsg.size() > 0) errMsg += ". ";
+ MAPS_LOGE("ERROR: %s%s (%s, %ld)", errMsg.data(),
+ ConverHereErrorToString(ConvertToHereError(error)),
+ ConvertMapsErrorToChar(error), error);
+ }
+
+ return error;
+}
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/src/here_geocode.cpp b/src/here_geocode.cpp
new file mode 100644
index 0000000..f7464d7
--- /dev/null
+++ b/src/here_geocode.cpp
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_geocode.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereGeocode::HereGeocode(void *pCbFunc, void *pUserData, int nReqId)
+{
+ m_pQuery = NULL;
+
+ m_pCbFunc = pCbFunc;
+ m_pUserData = pUserData;
+ m_nReqId = nReqId;
+}
+
+HereGeocode::~HereGeocode()
+{
+ if (m_pQuery)
+ {
+ delete m_pQuery;
+ m_pQuery = NULL;
+ }
+}
+
+here_error_e HereGeocode::PrepareQuery()
+{
+ if (m_pQuery)
+ return HERE_ERROR_PERMISSION_DENIED;
+
+ m_pQuery = new GeoCoderQuery();
+
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+ else
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereGeocode::PreparePreference(maps_preference_h hPref)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ int ret;
+ char *szLanguage = NULL;
+ ret = maps_preference_get_language(hPref, &szLanguage);
+ if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+ {
+ m_pQuery->AppendPreferredLanguage(szLanguage);
+ g_free(szLanguage);
+ }
+
+ int nMaxResults;
+ ret = maps_preference_get_max_results(hPref, &nMaxResults);
+ if (ret == MAPS_ERROR_NONE)
+ {
+ m_pQuery->SetMaxResults((size_t)nMaxResults);
+ }
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereGeocode::StartGeocode(const char* szAddr)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!szAddr || (szAddr && strlen(szAddr) <= 0))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ String sSearch(szAddr);
+ m_pQuery->SetSearchtext(sSearch);
+
+
+ m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HereGeocode::StartGeocodeInsideArea(const char* szAddr, const maps_area_h hArea)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!szAddr || (szAddr && strlen(szAddr) <= 0) || !hArea)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ String sSearch(szAddr);
+ m_pQuery->SetSearchtext(sSearch);
+
+ maps_area_s *pArea = (maps_area_s *)hArea;
+ if (pArea->type == MAPS_AREA_RECTANGLE)
+ {
+ double dLatTL = pArea->rect.top_left.latitude;
+ double dLngTL = pArea->rect.top_left.longitude;
+ GeoCoordinates geoCoordTL(dLatTL, dLngTL);
+
+ double dLatBR = pArea->rect.bottom_right.latitude;
+ double dLngBR = pArea->rect.bottom_right.longitude;
+ GeoCoordinates geoCoordBR(dLatBR, dLngBR);
+
+ GeoBoundingBox BoundingBox(geoCoordTL, geoCoordBR);
+
+ m_pQuery->SetBoundingBox(BoundingBox);
+ }
+ else if (pArea->type == MAPS_AREA_CIRCLE)
+ {
+ MAPS_LOGD("HERE Maps is not supported circle type in GeocoderQuery");
+ return HERE_ERROR_NOT_SUPPORTED;
+ }
+ else {
+ return HERE_ERROR_INVALID_PARAMETER;
+ }
+
+
+ m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HereGeocode::StartGeocodeByStructuredAddress(const maps_address_h hAddr)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hAddr)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ Address rAddress;
+
+ int ret;
+ char *szCountry = NULL;
+ ret = maps_address_get_country(hAddr, &szCountry);
+ if (ret == MAPS_ERROR_NONE && szCountry && *szCountry)
+ rAddress.SetCountry(String(szCountry));
+ g_free(szCountry);
+
+ char *szCountryCode = NULL;
+ ret = maps_address_get_country_code(hAddr, &szCountryCode);
+ if (ret == MAPS_ERROR_NONE && szCountryCode && *szCountryCode)
+ rAddress.SetCountryCode(String(szCountryCode));
+ g_free(szCountryCode);
+
+ char *szCounty = NULL;
+ ret = maps_address_get_county(hAddr, &szCounty);
+ if (ret == MAPS_ERROR_NONE && szCounty && *szCounty)
+ rAddress.SetCounty(String(szCounty));
+ g_free(szCounty);
+
+ char *szState = NULL;
+ ret = maps_address_get_state(hAddr, &szState);
+ if (ret == MAPS_ERROR_NONE && szState && *szState)
+ rAddress.SetState(String(szState));
+ g_free(szState);
+
+ char *szCity = NULL;
+ ret = maps_address_get_city(hAddr, &szCity);
+ if (ret == MAPS_ERROR_NONE && szCity && *szCity)
+ rAddress.SetCity(String(szCity));
+ g_free(szCity);
+
+ char *szDistrict = NULL;
+ ret = maps_address_get_district(hAddr, &szDistrict);
+ if (ret == MAPS_ERROR_NONE && szDistrict && *szDistrict)
+ rAddress.SetDistrict(String(szDistrict));
+ g_free(szDistrict);
+
+ char *szStreet = NULL;
+ ret = maps_address_get_street(hAddr, &szStreet);
+ if (ret == MAPS_ERROR_NONE && szStreet && *szStreet)
+ rAddress.SetStreet(String(szStreet));
+ g_free(szStreet);
+
+ char *szBuildingNumber = NULL;
+ ret = maps_address_get_building_number(hAddr, &szBuildingNumber);
+ if (ret == MAPS_ERROR_NONE && szBuildingNumber && *szBuildingNumber)
+ rAddress.SetHouseNumber(String(szBuildingNumber));
+ g_free(szBuildingNumber);
+
+ char *szPostalCode = NULL;
+ ret = maps_address_get_postal_code(hAddr, &szPostalCode);
+ if (ret == MAPS_ERROR_NONE && szPostalCode && *szPostalCode)
+ rAddress.SetPostalCode(String(szPostalCode));
+ g_free(szPostalCode);
+
+ //not defined in maps-service
+ //rAddress.SetLabel(String(sLabel));
+ //rAddress.SetFloor(String(sFloor));
+ //rAddress.SetSuite(String(sSuite));
+
+ m_pQuery->SetAddress(rAddress);
+
+
+
+ m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereGeocode::OnGeoCoderReply(const GeoCoderReply& Reply)
+{
+ if (m_bCanceled) // ignore call back if it was cancelled.
+ {
+ delete this;
+ return;
+ }
+
+ Result* pResult;
+ size_t nResults = Reply.GetNumResults();
+ GeoCoordinates hereCoord;
+ maps_coordinates_h mapsCoord;
+
+ if (nResults == 0)
+ {
+ ((maps_service_geocode_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+ 0, 1, NULL, m_pUserData);
+ delete this;
+ return;
+ }
+
+ for (size_t i = 0 ; i < nResults; i++)
+ {
+ pResult = (Result*)Reply.GetResult(i);
+
+ if (pResult)
+ {
+ hereCoord = (pResult->GetLocation()).GetDisplayPosition();
+ }
+ else
+ {
+ hereCoord.SetLatitude(0.0);
+ hereCoord.SetLongitude(0.0);
+ }
+
+ maps_error_e error = (maps_error_e)maps_coordinates_create(
+ hereCoord.GetLatitude(), hereCoord.GetLongitude(), &mapsCoord);
+
+ if (m_bCanceled)
+ {
+ if (mapsCoord) maps_coordinates_destroy(mapsCoord);
+ break;
+ }
+ else
+ {
+ if (((maps_service_geocode_cb)m_pCbFunc)(error, m_nReqId, i,
+ nResults, mapsCoord, m_pUserData) == FALSE)
+ {
+ delete this;
+ return;
+ }
+ }
+ }
+
+ delete this;
+}
+
+void HereGeocode::OnGeoCoderFailure(const GeoCoderReply& Reply)
+{
+ if (!m_bCanceled)
+ ((maps_service_geocode_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_manager.cpp b/src/here_manager.cpp
new file mode 100644
index 0000000..2f08b7e
--- /dev/null
+++ b/src/here_manager.cpp
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <libxml/xpath.h>
+
+#include "here_manager.h"
+#include "here_base.h"
+#include "here_geocode.h"
+#include "here_revgeocode.h"
+#include "here_place.h"
+#include "here_route.h"
+#include "here_utils.h"
+#include <common/HereConfig.h>
+
+using namespace HERE_PLUGIN_NAMESPACE_PREFIX;
+using namespace TIZEN_MAPS_NAMESPACE_PREFIX;
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereManager *HereManager::m_pHereManager = NULL;
+int HereManager::m_nRefCnt = 0;
+pthread_mutex_t g_mtxRef;
+
+HereManager::HereManager()
+: m_nNextReqId(1),
+ m_hPref(NULL)
+{
+ xmlInitParser();
+ m_hConnection = NULL;
+ pthread_mutex_init(&m_mtxHereList, NULL);
+ pthread_mutex_init(&g_mtxRef, NULL);
+}
+
+HereManager::~HereManager()
+{
+ if (m_hConnection)
+ {
+ connection_unset_type_changed_cb(m_hConnection);
+ connection_destroy(m_hConnection);
+ m_hConnection = NULL;
+ }
+
+ pthread_mutex_destroy(&m_mtxHereList);
+ pthread_mutex_destroy(&g_mtxRef);
+ xmlCleanupParser();
+}
+
+bool HereManager::Create()
+{
+ bool result = false;
+
+ if (!m_pHereManager)
+ {
+ m_pHereManager = new HereManager();
+ }
+
+ pthread_mutex_lock(&g_mtxRef);
+ if (m_pHereManager)
+ {
+ m_nRefCnt++;
+ result = true;
+ MAPS_LOGD("Created a HereManager instance (%d).", m_nRefCnt);
+ }
+ pthread_mutex_unlock(&g_mtxRef);
+
+ m_pHereManager->SetCredentials();
+ return result;
+}
+
+void HereManager::Close()
+{
+ pthread_mutex_lock(&g_mtxRef);
+ if (--m_nRefCnt == 0 && m_pHereManager)
+ {
+ m_pHereManager->TerminateAllServices();
+ HereConfig::Shutdown();
+
+ delete m_pHereManager;
+ m_pHereManager = NULL;
+ }
+ MAPS_LOGD("Closed a HereManager instance (%d).", m_nRefCnt);
+ pthread_mutex_unlock(&g_mtxRef);
+}
+
+HereManager* HereManager::GetHandler()
+{
+ return m_pHereManager;
+}
+
+void* HereManager::CreateInstance(HereSvcType nHereSvc, void* pCbFunc,
+ void* pUserData, int *nReqId)
+{
+ HereBase *pHere = NULL;
+
+ *nReqId = m_nNextReqId++;
+
+ switch(nHereSvc)
+ {
+ case HERE_SVC_GEOCODE:
+ pHere = (HereBase*)new HereGeocode(pCbFunc, pUserData, *nReqId);
+ break;
+
+ case HERE_SVC_REV_GEOCODE:
+ pHere = (HereBase*)new HereRevGeocode(pCbFunc, pUserData, *nReqId);
+ break;
+
+ case HERE_SVC_PLACE:
+ pHere = (HereBase*)new HerePlace(pCbFunc, pUserData, *nReqId);
+ break;
+
+ case HERE_SVC_ROUTE:
+ pHere = (HereBase*)new HereRoute(pCbFunc, pUserData, *nReqId);
+ break;
+
+ default:
+ return NULL;
+ }
+
+ pthread_mutex_lock(&m_mtxHereList);
+ m_HereList.push_back(pHere);
+ pthread_mutex_unlock(&m_mtxHereList);
+
+ return pHere;
+}
+
+here_error_e HereManager::CloseInstance(int nReqId)
+{
+ HereSvcList::iterator it;
+
+ pthread_mutex_lock(&m_mtxHereList);
+ for (it = m_HereList.begin(); it != m_HereList.end(); it++)
+ {
+ if ((*it)->GetReqId() == nReqId)
+ {
+ m_HereList.erase(it);
+ break;
+ }
+ }
+ pthread_mutex_unlock(&m_mtxHereList);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::CancelInstance(int nReqId)
+{
+ HereSvcList::iterator it;
+
+ pthread_mutex_lock(&m_mtxHereList);
+ for (it = m_HereList.begin(); it != m_HereList.end(); it++)
+ {
+ if ((*it)->GetReqId() == nReqId)
+ {
+ m_HereList.erase(it);
+ RestItemHandle::Cancel((*it)->GetRestReqId());
+ (*it)->TerminateService();
+ pthread_mutex_unlock(&m_mtxHereList);
+ return HERE_ERROR_NONE;
+ }
+ }
+ pthread_mutex_unlock(&m_mtxHereList);
+
+ return HERE_ERROR_NOT_FOUND;
+}
+
+bool HereManager::AppInfoMetadataCb(const char *metadata_key, const char *metadata_value, void *user_data)
+{
+ if (!metadata_key || !metadata_value)
+ return false;
+
+ if (!strncmp(metadata_key, "http://tizen.org/metadata/here_key", 35) && strlen(metadata_value) > 0 )
+ {
+ if (m_pHereManager->SetCredentials(metadata_value) == HERE_ERROR_NONE)
+ {
+ MAPS_LOGD("Succeeded getting credential from metadata");
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+here_error_e HereManager::SetCredentials(void)
+{
+ int nRet = 0;
+ app_info_h hAppInfo;
+ pid_t nProcessId = -1;
+ char *strAppId = NULL;
+
+ nProcessId = getpid();
+ nRet = app_manager_get_app_id(nProcessId, &strAppId);
+ if (nRet != APP_MANAGER_ERROR_NONE)
+ {
+ MAPS_LOGI("Get app_id [%ld]. nRet[%d]", nProcessId, nRet);
+ return HERE_ERROR_NONE;
+ }
+
+ nRet = app_info_create(strAppId, &hAppInfo);
+ if (nRet != APP_MANAGER_ERROR_NONE)
+ {
+ MAPS_LOGI("Get appinfo of [%s]. nRet[%d]", strAppId, nRet);
+ if (strAppId) free(strAppId);
+ return HERE_ERROR_NONE;
+ }
+
+ if (strAppId) free(strAppId);
+
+ nRet = app_info_foreach_metadata(hAppInfo, AppInfoMetadataCb, NULL);
+ if (nRet != APP_MANAGER_ERROR_NONE)
+ {
+ MAPS_LOGI("Get metadata. nRet[%d]", nRet);
+ }
+
+ nRet = app_info_destroy(hAppInfo);
+ if (nRet != APP_MANAGER_ERROR_NONE)
+ {
+ MAPS_LOGI("Destroy app_info. nRet[%d]", nRet);
+ }
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::SetCredentials(const char *szKey)
+{
+ if (!szKey)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ String strKey(szKey);
+ String strAppId, strAppCode;
+ size_t nCodeStart;
+
+ nCodeStart = strKey.find("/");
+
+ if(nCodeStart == 0 || nCodeStart >= (strKey.length()-1))
+ {
+ MAPS_LOGE("[error] Key type fault : Key type should be as like XXXXX/YYYYY");
+ return HERE_ERROR_INVALID_PARAMETER;
+ }
+
+ strAppId = strKey.substr(0, nCodeStart);
+ strAppCode = strKey.substr(nCodeStart+1, std::string::npos);
+
+ if(!ApplicationContext::GetInstance().Initialize(strAppCode, strAppId))
+ return HERE_ERROR_INVALID_OPERATION;
+
+ //MAPS_LOGD("[success] credential setted to 'XXXXX/XXXXX'");
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::GetCredentials(char **szKey)
+{
+ if (!szKey)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!ApplicationContext::GetInstance().IsInitialized())
+ return HERE_ERROR_NOT_FOUND;
+
+ String strCredentials = ApplicationContext::GetInstance().GetAppId() + "/" +
+ ApplicationContext::GetInstance().GetAppCode();
+
+ *szKey = g_strndup(strCredentials.c_str(), strCredentials.length());
+
+ if (*szKey == NULL)
+ return HERE_ERROR_INVALID_OPERATION;
+
+ //MAPS_LOGD("current credential : %s", *szKey);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::SetPreference(maps_preference_h hPref)
+{
+ int error = HERE_ERROR_NONE;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (m_hPref)
+ {
+ if (maps_preference_destroy(m_hPref) != MAPS_ERROR_NONE)
+ return HERE_ERROR_INVALID_OPERATION;
+ }
+
+ do {
+ error = maps_preference_clone(hPref, &m_hPref);
+ if (error != MAPS_ERROR_NONE) break;
+
+ char *szLanguage = NULL;
+ error = maps_preference_get_language(hPref, &szLanguage);
+ if (error == MAPS_ERROR_NONE && szLanguage && strlen(szLanguage) > 0)
+ ApplicationContext::GetInstance().SetPreferredLanguage(String(szLanguage));
+ } while(0);
+
+ return (here_error_e)ConvertToHereError(error);
+}
+
+here_error_e HereManager::GetPreference(maps_preference_h *hPref)
+{
+ int ret = HERE_ERROR_NONE;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ if (!m_hPref)
+ return HERE_ERROR_NOT_FOUND;
+
+ ret = maps_preference_clone(m_hPref, hPref);
+
+ return (here_error_e)ConvertToHereError(ret);
+}
+
+maps_preference_h HereManager::GetPreference()
+{
+ return m_hPref;
+}
+
+void HereManager::TerminateAllServices(void)
+{
+ HereSvcList::iterator it;
+
+ while (1)
+ {
+ pthread_mutex_lock(&m_mtxHereList);
+ if (m_HereList.empty())
+ {
+ pthread_mutex_unlock(&m_mtxHereList);
+ break;
+ }
+ it = m_HereList.begin();
+ pthread_mutex_unlock(&m_mtxHereList);
+
+ try {
+ if (*it) (*it)->TerminateService();
+ m_HereList.erase(it);
+ }
+ catch (std::exception &e) {
+ }
+ };
+
+ if (m_hPref)
+ {
+ maps_preference_destroy(m_hPref);
+ m_hPref = NULL;
+ }
+}
+
+here_error_e HereManager::ConvertNetworkErrorCode(const int nErrorCode)
+{
+ here_error_e err = HERE_ERROR_NONE;
+
+ switch (nErrorCode)
+ {
+ case CONNECTION_ERROR_NONE:
+ //MAPS_LOGD("No error");
+ err = HERE_ERROR_NONE;
+ break;
+ case CONNECTION_ERROR_INVALID_PARAMETER:
+ MAPS_LOGD("Invalid parameter");
+ err = HERE_ERROR_INVALID_PARAMETER;
+ break;
+ case CONNECTION_ERROR_OUT_OF_MEMORY:
+ MAPS_LOGD("Out of memory error");
+ err = HERE_ERROR_OUT_OF_MEMORY;
+ break;
+ case CONNECTION_ERROR_INVALID_OPERATION:
+ MAPS_LOGD("Invalid Operation");
+ err = HERE_ERROR_INVALID_OPERATION;
+ break;
+ case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ MAPS_LOGD("Address family not supported");
+ err = HERE_ERROR_NOT_SUPPORTED;
+ break;
+ case CONNECTION_ERROR_PERMISSION_DENIED:
+ MAPS_LOGD("Permission denied");
+ err = HERE_ERROR_PERMISSION_DENIED;
+ break;
+ case CONNECTION_ERROR_OPERATION_FAILED:
+ MAPS_LOGD("Operation failed");
+ err = HERE_ERROR_INVALID_OPERATION;
+ break;
+ case CONNECTION_ERROR_ITERATOR_END:
+ MAPS_LOGD("End of iteration");
+ break;
+ case CONNECTION_ERROR_NO_CONNECTION:
+ MAPS_LOGD("There is no connection");
+ err = HERE_ERROR_NETWORK_UNREACHABLE;
+ break;
+ case CONNECTION_ERROR_NOW_IN_PROGRESS:
+ MAPS_LOGD("Now in progress");
+ err = HERE_ERROR_RESOURCE_BUSY;
+ break;
+ case CONNECTION_ERROR_ALREADY_EXISTS:
+ MAPS_LOGD("Already exists");
+ break;
+ case CONNECTION_ERROR_OPERATION_ABORTED:
+ MAPS_LOGD("Operation is aborted");
+ err = HERE_ERROR_CANCELED;
+ break;
+ case CONNECTION_ERROR_DHCP_FAILED:
+ MAPS_LOGD("DHCP failed");
+ break;
+ case CONNECTION_ERROR_INVALID_KEY:
+ MAPS_LOGD("Invalid key");
+ err = HERE_ERROR_KEY_NOT_AVAILABLE;
+ break;
+ case CONNECTION_ERROR_NO_REPLY:
+ MAPS_LOGD("No Reply");
+ err = HERE_ERROR_RESOURCE_BUSY;
+ break;
+ case CONNECTION_ERROR_NOT_SUPPORTED:
+ MAPS_LOGD("Not Supported");
+ err = HERE_ERROR_NOT_SUPPORTED;
+ break;
+ default:
+ MAPS_LOGD("Unknown");
+ break;
+ }
+ //MAPS_LOGD("nErrorCode = 0x%08X", nErrorCode);
+
+ return err;
+}
+
+here_error_e HereManager::SetProxyAddress()
+{
+ int errorCode = CONNECTION_ERROR_NONE;
+
+ char *proxy_address = NULL;
+
+ if (!m_hConnection)
+ {
+ errorCode = connection_create(&m_hConnection);
+ if (errorCode == CONNECTION_ERROR_NONE)
+ {
+ errorCode = connection_set_type_changed_cb(m_hConnection, NetworkStateChangedIndCb, this);
+
+ }
+ }
+ if (errorCode != CONNECTION_ERROR_NONE)
+ return ConvertNetworkErrorCode(errorCode);
+
+ errorCode = connection_get_proxy(m_hConnection, CONNECTION_ADDRESS_FAMILY_IPV4, &proxy_address);
+ if (errorCode == CONNECTION_ERROR_NONE)
+ {
+ MAPS_LOGD("Proxy = %s", (proxy_address ? proxy_address : "(null)"));
+ Tizen::Maps::HereConfig::SetProxyAddress(proxy_address);
+ }
+ g_free(proxy_address);
+
+ return ConvertNetworkErrorCode(errorCode);
+}
+
+void HereManager::NetworkStateChangedIndCb(connection_type_e type, void *user_data)
+{
+ MAPS_LOGD("Network state is changed. type=%d", type);
+
+ if (!user_data) return;
+
+ HereManager *pManager = (HereManager*)user_data;
+
+ if ((type != CONNECTION_TYPE_DISCONNECTED) && (type != CONNECTION_TYPE_BT))
+ pManager->SetProxyAddress();
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_place.cpp b/src/here_place.cpp
new file mode 100644
index 0000000..297a811
--- /dev/null
+++ b/src/here_place.cpp
@@ -0,0 +1,1316 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_place.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HerePlace::HerePlace(void *pCbFunc, void *pUserData, int nReqId)
+{
+ m_pDiscoveryQuery = NULL;
+ m_pPlaceDetailsQuery = NULL;
+
+ m_pCbFunc = pCbFunc;
+ m_pUserData = pUserData;
+ m_nReqId = nReqId;
+
+ m_nReplyCnt = 0;
+ m_nReplyIdx = 0;
+ m_szSortBy = NULL;
+}
+
+HerePlace::~HerePlace()
+{
+ if (m_pDiscoveryQuery)
+ {
+ delete m_pDiscoveryQuery;
+ m_pDiscoveryQuery = NULL;
+ }
+
+ if (m_pPlaceDetailsQuery)
+ {
+ delete m_pPlaceDetailsQuery;
+ m_pPlaceDetailsQuery = NULL;
+ }
+
+ while(!m_PlaceList.empty())
+ {
+ maps_place_destroy(m_PlaceList.front());
+ m_PlaceList.pop_front();
+ }
+}
+
+here_error_e HerePlace::PrepareDiscoveryQuery()
+{
+ if (m_pDiscoveryQuery)
+ return HERE_ERROR_PERMISSION_DENIED;
+
+ m_pDiscoveryQuery = new DiscoveryQuery();
+
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+ else
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PrepareDiscoveryPreference(maps_preference_h hPref)
+{
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ int ret;
+ char *szLanguage = NULL;
+ ret = maps_preference_get_language(hPref, &szLanguage);
+ if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+ m_pDiscoveryQuery->SetLanguage(szLanguage);
+ g_free(szLanguage);
+
+ int nMaxResults;
+ ret = maps_preference_get_max_results(hPref, &nMaxResults);
+ if (ret == MAPS_ERROR_NONE)
+ m_pDiscoveryQuery->SetMaxResults((size_t)nMaxResults);
+
+ char *szSortBy;
+ ret = maps_preference_get(hPref, MAPS_PLACE_FILTER_SORT_BY, &szSortBy);
+ if (ret == MAPS_ERROR_NONE)
+ m_szSortBy = szSortBy;
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PrepareDiscoveryFilter(maps_place_filter_h hFilter)
+{
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hFilter)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ int ret;
+ maps_place_category_h mapsCate = NULL;
+ if (maps_place_filter_get_category(hFilter, &mapsCate) == MAPS_ERROR_NONE)
+ {
+ CategoryList hereCateList;
+ Category hereCate;
+ char *szId = NULL, *szName = NULL, *szUrl = NULL;
+
+ ret = maps_place_category_get_name(mapsCate, &szName);
+ if (ret == MAPS_ERROR_NONE && szName && *szName)
+ hereCate.SetTitle(szName);
+ g_free(szName);
+
+ ret = maps_place_category_get_url(mapsCate, &szUrl);
+ if (ret == MAPS_ERROR_NONE && szUrl && *szUrl)
+ hereCate.SetHref(szUrl);
+ g_free(szUrl);
+
+ ret = maps_place_category_get_id(mapsCate, &szId);
+ if (ret == MAPS_ERROR_NONE && szId && *szId)
+ {
+ hereCate.SetCategoryId(CategoryId(szId));
+ hereCateList.push_back(hereCate);
+ m_pDiscoveryQuery->SetCategoriesFilter(hereCateList);
+ }
+ g_free(szId);
+
+ maps_place_category_destroy(mapsCate);
+ }
+
+ char *szName = NULL;
+ ret = maps_place_filter_get_place_name(hFilter, &szName);
+ if (ret == MAPS_ERROR_NONE && szName && *szName)
+ m_pDiscoveryQuery->SetSearchText(szName);
+ g_free(szName);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::StartDiscoveryPlace(maps_coordinates_h hCoord, int nDistance)
+{
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hCoord)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ if (m_pDiscoveryQuery->GetSearchText().empty())
+ {
+ m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_EXPLORE);
+
+ double dLat, dLon;
+ maps_coordinates_get_latitude(hCoord, &dLat);
+ maps_coordinates_get_longitude(hCoord, &dLon);
+ GeoCoordinates geoCoord(dLat, dLon);
+
+ if (nDistance > 0)
+ {
+ GeoBoundingCircle geoCircle(geoCoord, nDistance);
+ m_pDiscoveryQuery->SetArea(geoCircle);
+ }
+ else if (nDistance == 0)
+ {
+ m_pDiscoveryQuery->SetProximity(geoCoord);
+ }
+ else
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+ }
+ else
+ {
+ here_error_e error;
+ maps_area_h hArea = NULL;
+ maps_area_create_circle(hCoord, nDistance, &hArea);
+ error = StartDiscoveryPlaceByAddress(m_pDiscoveryQuery->GetSearchText().data(), hArea);
+ maps_area_destroy(hArea);
+ return error;
+ }
+}
+
+here_error_e HerePlace::StartDiscoveryPlaceByArea(maps_area_h hArea)
+{
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hArea)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ if (m_pDiscoveryQuery->GetSearchText().empty())
+ {
+ m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_EXPLORE);
+
+ maps_area_s *pArea = (maps_area_s*)hArea;
+ if (pArea->type == MAPS_AREA_RECTANGLE)
+ {
+ GeoBoundingBox box(pArea->rect.top_left.longitude, pArea->rect.bottom_right.longitude,
+ pArea->rect.bottom_right.latitude, pArea->rect.top_left.latitude);
+ m_pDiscoveryQuery->SetArea(box);
+ }
+ else if (pArea->type == MAPS_AREA_CIRCLE)
+ {
+ GeoCoordinates coord(pArea->circle.center.latitude, pArea->circle.center.longitude);
+ GeoBoundingCircle circle(coord, pArea->circle.radius);
+ m_pDiscoveryQuery->SetArea(circle);
+ }
+ else
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+ }
+ else
+ {
+ return StartDiscoveryPlaceByAddress(m_pDiscoveryQuery->GetSearchText().data(), hArea);
+ }
+}
+
+here_error_e HerePlace::StartDiscoveryPlaceByAddress(const char *szAddr, maps_area_h hArea)
+{
+ if (!m_pDiscoveryQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!szAddr || (szAddr && strlen(szAddr) <= 0) || !hArea)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_SEARCH);
+
+ String szSearchText = szAddr;
+ if (m_pDiscoveryQuery->GetSearchText().size() > 0 &&
+ szSearchText != m_pDiscoveryQuery->GetSearchText())
+ {
+ szSearchText += " " + m_pDiscoveryQuery->GetSearchText();
+ }
+ m_pDiscoveryQuery->SetSearchText(szSearchText);
+
+ maps_area_s *pArea = (maps_area_s*)hArea;
+ if (pArea->type == MAPS_AREA_RECTANGLE)
+ {
+ double dLat1 = pArea->rect.top_left.latitude;
+ double dLng1 = pArea->rect.top_left.longitude;
+ double dLat2 = pArea->rect.bottom_right.latitude;
+ double dLng2 = pArea->rect.bottom_right.longitude;
+ double dLat = (dLat1 + dLat2) / 2;
+ double dLng = (dLng1 + dLng2) / 2;
+
+ GeoCoordinates geoCoord(dLat, dLng);
+ m_pDiscoveryQuery->SetProximity(geoCoord);
+ }
+ else if(pArea->type == MAPS_AREA_CIRCLE)
+ {
+ double dLat = pArea->circle.center.latitude;
+ double dLng = pArea->circle.center.longitude;
+ GeoCoordinates geoCoord(dLat, dLng);
+ m_pDiscoveryQuery->SetProximity(geoCoord);
+ }
+
+
+ m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HerePlace::PreparePlaceDetailsQuery()
+{
+ if (m_pPlaceDetailsQuery)
+ return HERE_ERROR_PERMISSION_DENIED;
+
+ m_pPlaceDetailsQuery = new PlaceDetailsQuery();
+
+ if (!m_pPlaceDetailsQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+ else
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PreparePlaceDetailsPreference(maps_preference_h hPref)
+{
+ if (!m_pPlaceDetailsQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ int ret;
+ char *szLanguage = NULL;
+ ret = maps_preference_get_language(hPref, &szLanguage);
+ if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+ m_pPlaceDetailsQuery->SetLanguage(szLanguage);
+ g_free(szLanguage);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::StartPlaceDetails(const char *szPlaceId)
+{
+ if (!m_pPlaceDetailsQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!szPlaceId || (szPlaceId && strlen(szPlaceId) <= 0))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ m_pPlaceDetailsQuery->SetPlaceId(szPlaceId);
+
+
+ m_nRestReqId = m_pPlaceDetailsQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HerePlace::StartPlaceDetailsInternal(const char *szUrl)
+{
+ if (!szUrl || (szUrl && strlen(szUrl) <= 0))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ std::unique_ptr<PlaceDetailsQuery> pPlaceDetailsQuery (new (std::nothrow)PlaceDetailsQuery());
+
+
+ bool bExcuted = (int)(pPlaceDetailsQuery->Execute(*this, NULL, szUrl) > 0);
+
+ return (bExcuted ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HerePlace::OnDiscoverReply (const DiscoveryReply &Reply)
+{
+ if (m_bCanceled) /* ignore call back if it was cancelled. */
+ {
+ delete this;
+ return;
+ }
+
+ maps_place_h mapsPlace;
+ PlaceItemList herePlaceList = Reply.GetPlaceItems();
+ PlaceItemList::iterator herePlaceIt;
+ SearchItemList hereSearchList = Reply.GetSearchItems();
+ SearchItemList::iterator hereSearchIt;
+ LinkObject hereLinkObj;
+ GeoCoordinates hereCoord;
+ maps_coordinates_h mapsCoord;
+ Category hereCate;
+ maps_place_category_h mapsCate;
+ maps_place_rating_h mapsRating;
+ int error = MAPS_ERROR_UNKNOWN, sub_error;
+ bool is_valid, isPending;
+
+
+ m_nReplyIdx = 0;
+ m_nReplyCnt = herePlaceList.size() + hereSearchList.size();
+
+ if (m_nReplyCnt == 0)
+ {
+ ((maps_service_search_place_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+ 0, 1, NULL, m_pUserData);
+ delete this;
+ return;
+ }
+
+ for (herePlaceIt = herePlaceList.begin();
+ herePlaceIt != herePlaceList.end() && !m_bCanceled;
+ herePlaceIt++)
+ {
+ isPending = false;
+
+ if ((error = maps_place_create(&mapsPlace)) == MAPS_ERROR_NONE)
+ {
+ /* title, uri, id */
+ hereLinkObj = herePlaceIt->GetLinkObject();
+
+ if (!hereLinkObj.GetTitle().empty())
+ maps_place_set_name(mapsPlace, (char*)hereLinkObj.GetTitle().c_str());
+
+ if (!hereLinkObj.GetHref().empty())
+ maps_place_set_uri(mapsPlace, (char*)hereLinkObj.GetHref().c_str());
+
+ if (!hereLinkObj.GetId().empty())
+ maps_place_set_id(mapsPlace, (char*)hereLinkObj.GetId().c_str());
+
+ /* icon */
+ /* type */
+
+ /* position */
+ hereCoord = herePlaceIt->GetPosition();
+ if (maps_coordinates_create(hereCoord.GetLatitude(), hereCoord.GetLongitude(),
+ &mapsCoord) == MAPS_ERROR_NONE)
+ {
+ maps_place_set_location(mapsPlace, mapsCoord);
+ maps_coordinates_destroy(mapsCoord);
+ }
+
+ /* rating (optional) */
+ if (maps_place_rating_create(&mapsRating) == MAPS_ERROR_NONE)
+ {
+ maps_place_rating_set_average(mapsRating, herePlaceIt->GetAverageRating());
+ maps_place_set_rating(mapsPlace, mapsRating);
+ maps_place_rating_destroy(mapsRating);
+ }
+
+ /* category (optional) */
+ hereCate = herePlaceIt->GetCategory();
+
+ maps_item_list_h mapsCateList;
+ if (maps_item_list_create(&mapsCateList) == MAPS_ERROR_NONE)
+ {
+ if (maps_place_category_create(&mapsCate) == MAPS_ERROR_NONE)
+ {
+ is_valid = false;
+
+ if (!hereCate.GetCategoryId().ToString().empty())
+ {
+ sub_error = maps_place_category_set_id(mapsCate,
+ (char*)hereCate.GetCategoryId().ToString().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCate.GetTitle().empty())
+ {
+ sub_error = maps_place_category_set_name(mapsCate,
+ (char*)hereCate.GetTitle().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCate.GetHref().empty())
+ {
+ sub_error = maps_place_category_set_url(mapsCate,
+ (char*)hereCate.GetHref().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsCateList, mapsCate, maps_place_category_clone);
+ maps_place_set_categories(mapsPlace, mapsCateList);
+ maps_item_list_remove_all(mapsCateList, maps_place_category_destroy);
+ }
+ maps_place_category_destroy(mapsCate);
+ }
+ maps_item_list_destroy(mapsCateList);
+ }
+
+ /* distance */
+ maps_place_set_distance(mapsPlace, (int)herePlaceIt->GetDistance());
+
+ /* sponser */
+ /* herePlaceList.GetIsSponsored() */
+
+ /* vicinity */
+
+ /* If needed PlaceDetails information, postpone to send a reply */
+ if(__sending_place_details_query_automatically)
+ {
+ hereLinkObj = herePlaceIt->GetLinkObject();
+ if (!hereLinkObj.GetHref().empty() && !hereLinkObj.GetId().empty())
+ {
+ m_PlaceList.push_back(mapsPlace);
+ isPending = true;
+ StartPlaceDetailsInternal(hereLinkObj.GetHref().c_str());
+ MAPS_LOGD("Add maps_place_h to the pending list. id=%s", hereLinkObj.GetId().data());
+ }
+ }
+ }
+
+ if (!isPending) {
+ m_nReplyIdx++;
+ m_PlaceList.push_back(mapsPlace);
+ }
+ }
+
+ for (hereSearchIt = hereSearchList.begin();
+ hereSearchIt != hereSearchList.end() && !m_bCanceled;
+ hereSearchIt++)
+ {
+ error = maps_place_create(&mapsPlace);
+
+ if(error == MAPS_ERROR_NONE)
+ {
+ is_valid = false;
+
+ // title, uri, szId
+ hereLinkObj = hereSearchIt->GetLinkObject();
+
+ if (!hereLinkObj.GetTitle().empty())
+ {
+ sub_error = maps_place_set_name(mapsPlace,
+ (char*)hereLinkObj.GetTitle().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereLinkObj.GetHref().empty())
+ {
+ sub_error = maps_place_set_uri(mapsPlace,
+ (char*)hereLinkObj.GetHref().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereLinkObj.GetId().empty())
+ {
+ sub_error = maps_place_set_id(mapsPlace,
+ (char*)hereLinkObj.GetId().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+ /* icon */
+ /* type */
+
+ if (!is_valid)
+ error = MAPS_ERROR_NOT_FOUND;
+ }
+
+ m_PlaceList.push_back(mapsPlace);
+ m_nReplyIdx++;
+ }
+
+
+ if (m_nReplyIdx == m_nReplyCnt)
+ {
+ m_nReplyIdx = 0;
+ __sortList(m_PlaceList);
+
+ while (m_nReplyIdx < m_nReplyCnt && !m_bCanceled && !m_PlaceList.empty())
+ {
+ mapsPlace = m_PlaceList.front();
+ m_PlaceList.pop_front();
+
+ /* callback function */
+ if (((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)error, m_nReqId,
+ m_nReplyIdx++, m_nReplyCnt, mapsPlace, m_pUserData) == FALSE)
+ {
+ break;
+ }
+ }
+ delete this;
+ }
+}
+
+void HerePlace::OnDiscoverFailure(const DiscoveryReply& Reply)
+{
+ if (!m_bCanceled)
+ ((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+}
+
+void HerePlace::OnPlaceDetailsReply (const PlaceDetailsReply &Reply)
+{
+ if (m_bCanceled) /* ignore call back if it was cancelled. */
+ {
+ delete this;
+ return;
+ }
+
+ if (m_nReplyCnt == 0)
+ m_nReplyCnt = 1;
+
+ PlaceDetails herePlace = Reply.GetPlaceDetails();
+ maps_place_h mapsPlace = NULL;
+ int error = MAPS_ERROR_NONE, sub_error;
+ bool is_valid, isPending = false;
+ char *placeId;
+ int placeIdLen;
+
+ /* Finding maps_place_h which is already pending since DiscoverReply */
+ PlaceList::iterator it;
+ for (it = m_PlaceList.begin(); it != m_PlaceList.end(); it++)
+ {
+ if (maps_place_get_id(*it, &placeId) == MAPS_ERROR_NONE)
+ {
+ placeIdLen = strlen(placeId);
+ if(!herePlace.GetPlaceId().compare(0, placeIdLen, placeId))
+ {
+ mapsPlace = *it;
+ isPending = true;
+ MAPS_LOGD("Found maps_place_h in the pending list. id=%s", placeId);
+ g_free(placeId);
+ break;
+ }
+ }
+ g_free(placeId);
+ }
+
+ /* If not found, create new handle */
+ if (!mapsPlace)
+ error = maps_place_create(&mapsPlace);
+
+ if (error == MAPS_ERROR_NONE)
+ {
+ is_valid = false;
+
+ /* name */
+ if (!herePlace.GetName().empty())
+ {
+ sub_error = maps_place_set_name(mapsPlace, (char*)herePlace.GetName().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ /* id */
+ if (!herePlace.GetPlaceId().empty())
+ {
+ sub_error = maps_place_set_id(mapsPlace, (char*)herePlace.GetPlaceId().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ /* view */
+ if (!herePlace.GetView().empty())
+ {
+ sub_error = maps_place_set_uri(mapsPlace, (char*)herePlace.GetView().c_str());
+ is_valid |= (sub_error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ /* icon */
+ /* maps not supported // herePlace.GetIconPath(); */
+
+ /* location */
+ ProcessPlaceLocation(herePlace, mapsPlace);
+
+ ProcessPlaceContact(herePlace, mapsPlace);
+
+ ProcessPlaceCategory(herePlace, mapsPlace);
+
+ /* tags */
+ /* maps & here not supported */
+
+ ProcessPlaceImage(herePlace, mapsPlace);
+
+ ProcessPlaceDetails(herePlace, mapsPlace);
+
+ ProcessPlaceReviews(herePlace, mapsPlace);
+
+ ProcessPlaceRatings(herePlace, mapsPlace);
+
+ ProcessPlaceRated(herePlace, mapsPlace);
+ }
+ else
+ {
+ error = MAPS_ERROR_NOT_FOUND;
+ }
+ }
+
+ if (!isPending)
+ m_PlaceList.push_back(mapsPlace);
+
+ m_nReplyIdx++;
+
+
+ if (m_nReplyIdx == m_nReplyCnt)
+ {
+ m_nReplyIdx = 0;
+ __sortList(m_PlaceList);
+
+ while (m_nReplyIdx < m_nReplyCnt && !m_bCanceled && !m_PlaceList.empty())
+ {
+ mapsPlace = m_PlaceList.front();
+ m_PlaceList.pop_front();
+
+ /* callback function */
+ if (((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)error, m_nReqId,
+ m_nReplyIdx++, m_nReplyCnt, mapsPlace, m_pUserData) == FALSE)
+ {
+ break;
+ }
+ }
+ delete this;
+ }
+}
+
+void HerePlace::OnPlaceDetailsFailure(const PlaceDetailsReply& Reply)
+{
+ if (!m_bCanceled)
+ ((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+}
+
+void HerePlace::ProcessPlaceLocation(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ GeoLocation hereLocation = herePlace.GetLocation();
+
+ /* position */
+ GeoCoordinates hereCoord = hereLocation.GetDisplayPosition();
+ maps_coordinates_h mapsCoord;
+
+ if (maps_coordinates_create(hereCoord.GetLatitude(),
+ hereCoord.GetLongitude(), &mapsCoord) == MAPS_ERROR_NONE)
+ {
+ maps_place_set_location(mapsPlace, mapsCoord);
+ maps_coordinates_destroy(mapsCoord);
+ }
+
+ /* address */
+ Address hereAddr = hereLocation.GetAddress();
+ maps_address_h mapsAddr;
+ int error;
+ bool is_valid;
+
+ if (maps_address_create(&mapsAddr) == MAPS_ERROR_NONE)
+ {
+ is_valid = false;
+
+ if (!hereAddr.GetHouseNumber().empty())
+ {
+ error = maps_address_set_building_number(mapsAddr,
+ hereAddr.GetHouseNumber().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetStreet().empty())
+ {
+ error = maps_address_set_street(mapsAddr, hereAddr.GetStreet().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetDistrict().empty())
+ {
+ error = maps_address_set_district(mapsAddr, hereAddr.GetDistrict().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetCity().empty())
+ {
+ error = maps_address_set_city(mapsAddr, hereAddr.GetCity().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetState().empty())
+ {
+ error = maps_address_set_state(mapsAddr, hereAddr.GetState().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetCountry().empty())
+ {
+ error = maps_address_set_country(mapsAddr, hereAddr.GetCountry().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetCountryCode().empty())
+ {
+ error = maps_address_set_country_code(mapsAddr, hereAddr.GetCountryCode().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetCounty().empty())
+ {
+ error = maps_address_set_county(mapsAddr, hereAddr.GetCounty().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetPostalCode().empty())
+ {
+ error = maps_address_set_postal_code(mapsAddr, hereAddr.GetPostalCode().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereAddr.GetLabel().empty())
+ {
+ error = maps_address_set_freetext(mapsAddr, hereAddr.GetLabel().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ maps_place_set_address(mapsPlace, mapsAddr);
+ }
+ maps_address_destroy(mapsAddr);
+ }
+}
+
+
+void HerePlace::ProcessPlaceContact(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ /* contact */
+ ContactDetailsList hereContList = herePlace.GetContactDetails();
+ ContactDetailsList::iterator hereCont;
+ maps_item_list_h mapsContList;
+ maps_place_contact_h mapsCont;
+ int error;
+ bool is_valid;
+
+ if (hereContList.empty()) return;
+
+ if (maps_item_list_create(&mapsContList) != MAPS_ERROR_NONE) return;
+
+ for (hereCont = hereContList.begin(); hereCont != hereContList.end(); hereCont++)
+ {
+ if (maps_place_contact_create(&mapsCont) != MAPS_ERROR_NONE) continue;
+
+ is_valid = false;
+
+ if (!hereCont->GetLabel().empty())
+ {
+ error = maps_place_contact_set_label(mapsCont,
+ (char*)hereCont->GetLabel().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCont->GetValue().empty())
+ {
+ error = maps_place_contact_set_value(mapsCont,
+ (char*)hereCont->GetValue().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCont->GetContactType().empty())
+ {
+ error = maps_place_contact_set_type(mapsCont,
+ (char*)hereCont->GetContactType().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsContList, mapsCont,
+ maps_place_contact_clone);
+ }
+ maps_place_contact_destroy(mapsCont);
+ }
+
+ if (maps_item_list_items(mapsContList))
+ {
+ maps_place_set_contacts(mapsPlace, mapsContList);
+ maps_item_list_remove_all(mapsContList, maps_place_contact_destroy);
+ }
+ maps_item_list_destroy(mapsContList);
+}
+
+void HerePlace::ProcessPlaceCategory(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ CategoryList hereCateList = herePlace.GetCategories();
+ CategoryList::iterator hereCate;
+ maps_item_list_h mapsCateList;
+ maps_place_category_h mapsCate;
+ int error;
+ bool is_valid = false;
+
+ if (hereCateList.empty()) return;
+
+ if (maps_item_list_create(&mapsCateList) != MAPS_ERROR_NONE) return;
+
+ // maps-service supports only one category
+ hereCate = hereCateList.begin();
+ if (maps_place_category_create(&mapsCate) == MAPS_ERROR_NONE)
+ {
+ if (!hereCate->GetCategoryId().ToString().empty())
+ {
+ error = maps_place_category_set_id(mapsCate,
+ hereCate->GetCategoryId().ToString().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCate->GetTitle().empty())
+ {
+ error = maps_place_category_set_name(mapsCate,
+ hereCate->GetTitle().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereCate->GetHref().empty())
+ {
+ error = maps_place_category_set_url(mapsCate,
+ hereCate->GetHref().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsCateList, mapsCate, maps_place_category_clone);
+ }
+ maps_place_category_destroy(mapsCate);
+ }
+
+ if (maps_item_list_items(mapsCateList))
+ {
+ maps_place_set_categories(mapsPlace, mapsCateList);
+ maps_item_list_remove_all(mapsCateList, maps_place_category_destroy);
+ }
+ maps_item_list_destroy(mapsCateList);
+}
+
+void HerePlace::ProcessPlaceImage(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ ImageContentList hereImageList = herePlace.GetImageContent();
+ ImageContentList::iterator hereImage;
+ maps_item_list_h mapsImageList;
+ maps_place_image_h mapsImage;
+ maps_place_link_object_h mapsImageUser;
+ LinkObject hereImageUser;
+ int error;
+ bool is_valid, is_valid2;
+
+ if (hereImageList.empty()) return;
+
+ if (maps_item_list_create(&mapsImageList) != MAPS_ERROR_NONE) return;
+
+ for (hereImage = hereImageList.begin(); hereImage != hereImageList.end(); hereImage++)
+ {
+ if (maps_place_image_create(&mapsImage) != MAPS_ERROR_NONE) continue;
+
+ is_valid = false;
+
+ /* here not supported
+ // maps_place_image_set_height(maps_place_image_h mapsPlace, const int height); */
+
+ /* here not supported
+ // maps_place_image_set_media(maps_place_image_h mapsPlace, maps_place_media_h media); */
+
+ if (!hereImage->GetSource().empty())
+ {
+ error = maps_place_image_set_url(mapsImage, (char*)hereImage->GetSource().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereImage->GetImageId().empty())
+ {
+ error = maps_place_image_set_id(mapsImage, (char*)hereImage->GetImageId().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ hereImageUser = hereImage->GetUser();
+ if (maps_place_link_object_create(&mapsImageUser) == MAPS_ERROR_NONE)
+ {
+ is_valid2 = false;
+
+ if (!hereImageUser.GetId().empty())
+ {
+ error = maps_place_link_object_set_id(mapsImageUser,
+ (char*)hereImageUser.GetId().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereImageUser.GetTitle().empty())
+ {
+ error = maps_place_link_object_set_name(mapsImageUser,
+ (char*)hereImageUser.GetTitle().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereImageUser.GetHref().empty())
+ {
+ error = maps_place_link_object_set_string(mapsImageUser,
+ (char*)hereImageUser.GetHref().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereImageUser.GetType().empty())
+ {
+ error = maps_place_link_object_set_type(mapsImageUser,
+ (char*)hereImageUser.GetType().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid2)
+ {
+ maps_place_image_set_user_link(mapsImage, mapsImageUser);
+ is_valid |= is_valid2;
+ }
+ maps_place_link_object_destroy(mapsImageUser);
+ }
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsImageList, mapsImage, maps_place_image_clone);
+ }
+ maps_place_image_destroy(mapsImage);
+ }
+
+ if (maps_item_list_items(mapsImageList))
+ {
+ maps_place_set_images(mapsPlace, mapsImageList);
+ maps_item_list_remove_all(mapsImageList, maps_place_image_destroy);
+ }
+ maps_item_list_destroy(mapsImageList);
+}
+
+void HerePlace::ProcessPlaceDetails(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ EditorialContentList hereEditList = herePlace.GetEditorialContent();
+ EditorialContentList::iterator hereEdit;
+ maps_item_list_h mapsEditList;
+ maps_place_editorial_h mapsEdit;
+ int error;
+ bool is_valid;
+
+ if (hereEditList.empty()) return;
+
+ if (maps_item_list_create(&mapsEditList) != MAPS_ERROR_NONE) return;
+
+ for (hereEdit = hereEditList.begin(); hereEdit != hereEditList.end(); hereEdit++)
+ {
+ if (maps_place_editorial_create(&mapsEdit) != MAPS_ERROR_NONE) continue;
+
+ is_valid = false;
+
+ if (!hereEdit->GetDescription().empty())
+ {
+ error = maps_place_editorial_set_description(mapsEdit,
+ (char*)hereEdit->GetDescription().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereEdit->GetLanguage().empty())
+ {
+ error = maps_place_editorial_set_language(mapsEdit,
+ (char*)hereEdit->GetLanguage().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ /* maps_place_editorial_set_media(mapsEdit, maps_place_media_h media); */
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsEditList, mapsEdit, maps_place_editorial_clone);
+ }
+ maps_place_editorial_destroy(mapsEdit);
+ }
+
+ if (maps_item_list_items(mapsEditList))
+ {
+ maps_place_set_editorials(mapsPlace, mapsEditList);
+ maps_item_list_remove_all(mapsEditList, maps_place_editorial_destroy);
+ }
+ maps_item_list_destroy(mapsEditList);
+}
+
+void HerePlace::ProcessPlaceReviews(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ ReviewContentList hereReviewList = herePlace.GetReviewContent();
+ ReviewContentList::iterator hereReview;
+ maps_place_review_h mapsReview;
+ maps_item_list_h mapsReviewList;
+ LinkObject hereReviewUser;
+ maps_place_link_object_h mapsReviewUser;
+ int error;
+ bool is_valid, is_valid2;
+
+ if (hereReviewList.empty()) return;
+
+ if (maps_item_list_create(&mapsReviewList) != MAPS_ERROR_NONE) return;
+
+ for (hereReview = hereReviewList.begin(); hereReview != hereReviewList.end(); hereReview++)
+ {
+ if (maps_place_review_create(&mapsReview) != MAPS_ERROR_NONE) continue;
+
+ is_valid = false;
+
+ if (!hereReview->GetDateTime().empty())
+ {
+ error = maps_place_review_set_date(mapsReview,
+ (char*)hereReview->GetDateTime().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereReview->GetDescription().empty())
+ {
+ error = maps_place_review_set_description(mapsReview,
+ (char*)hereReview->GetDescription().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereReview->GetLanguage().empty())
+ {
+ error = maps_place_review_set_language(mapsReview,
+ (char*)hereReview->GetLanguage().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ /* maps_place_review_set_media(mapsReview, maps_place_media_h media) */
+
+ maps_place_review_set_rating(mapsReview, hereReview->GetRating());
+
+ if (!hereReview->GetTitle().empty())
+ {
+ error = maps_place_review_set_title(mapsReview,
+ (char*)hereReview->GetTitle().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ hereReviewUser = hereReview->GetUser();
+ if (maps_place_link_object_create(&mapsReviewUser) == MAPS_ERROR_NONE)
+ {
+ is_valid2 = false;
+
+ if (!hereReviewUser.GetId().empty())
+ {
+ error = maps_place_link_object_set_id(mapsReviewUser,
+ (char*)hereReviewUser.GetId().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereReviewUser.GetTitle().empty())
+ {
+ error = maps_place_link_object_set_name(mapsReviewUser,
+ (char*)hereReviewUser.GetTitle().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereReviewUser.GetHref().empty())
+ {
+ error = maps_place_link_object_set_string(mapsReviewUser,
+ (char*)hereReviewUser.GetHref().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereReviewUser.GetType().empty())
+ {
+ error = maps_place_link_object_set_type(mapsReviewUser,
+ (char*)hereReviewUser.GetType().c_str());
+ is_valid2 |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid2)
+ {
+ maps_place_review_set_user_link(mapsReview, mapsReviewUser);
+ is_valid |= is_valid2;
+ }
+ maps_place_link_object_destroy(mapsReviewUser);
+ }
+
+ if (is_valid)
+ {
+ maps_item_list_append(mapsReviewList, mapsReview, maps_place_review_clone);
+ }
+ maps_place_review_destroy(mapsReview);
+ }
+
+ if (maps_item_list_items(mapsReviewList))
+ {
+ maps_place_set_reviews(mapsPlace, mapsReviewList);
+ maps_item_list_remove_all(mapsReviewList, maps_place_review_destroy);
+ }
+ maps_item_list_destroy(mapsReviewList);
+}
+
+void HerePlace::ProcessPlaceRatings(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ Ratings hereRating = herePlace.GetRatings();
+ maps_place_rating_h mapsRating;
+
+ if (maps_place_rating_create(&mapsRating) != MAPS_ERROR_NONE) return;
+
+ maps_place_rating_set_average(mapsRating, hereRating.GetAverage());
+ maps_place_rating_set_count(mapsRating, hereRating.GetCount());
+ maps_place_set_rating(mapsPlace, mapsRating);
+ maps_place_rating_destroy(mapsRating);
+}
+
+void HerePlace::ProcessPlaceRated(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+ RelatedItem hereRelated = herePlace.GetRelatedItem();
+ maps_place_link_object_h mapsRelated;
+ int error;
+ bool is_valid = false;
+
+ if (maps_place_link_object_create(&mapsRelated) != MAPS_ERROR_NONE) return;
+
+ //need to check if GetId() exist
+ //maps_place_link_object_set_id(mapsRelated, hereRelated.GetId());
+
+ if (!hereRelated.GetTitle().empty())
+ {
+ error = maps_place_link_object_set_name(mapsRelated,
+ (char*)hereRelated.GetTitle().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereRelated.GetHref().empty())
+ {
+ error = maps_place_link_object_set_string(mapsRelated,
+ (char*)hereRelated.GetHref().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (!hereRelated.GetType().empty())
+ {
+ error = maps_place_link_object_set_type(mapsRelated,
+ (char*)hereRelated.GetType().c_str());
+ is_valid |= (error == MAPS_ERROR_NONE);
+ }
+
+ if (is_valid)
+ {
+ maps_place_set_related_link(mapsPlace, mapsRelated);
+ }
+ maps_place_link_object_destroy(mapsRelated);
+}
+
+bool HerePlace::__compareWithTitle(const maps_place_h &item1, const maps_place_h &item2)
+{
+ bool result = false;
+ char *str1 = NULL, *str2 = NULL;
+
+ if (maps_place_get_name(item1, &str1) == MAPS_ERROR_NONE &&
+ maps_place_get_name(item2, &str2) == MAPS_ERROR_NONE)
+ {
+ result = (strcmp(str1, str2) < 0);
+ }
+ g_free(str1);
+ g_free(str2);
+ return result;
+}
+
+bool HerePlace::__compareWithId(const maps_place_h &item1, const maps_place_h &item2)
+{
+ bool result = false;
+ char *str1 = NULL, *str2 = NULL;
+
+ if (maps_place_get_id(item1, &str1) == MAPS_ERROR_NONE &&
+ maps_place_get_id(item2, &str2) == MAPS_ERROR_NONE)
+ {
+ result = (strcmp(str1, str2) < 0);
+ }
+ g_free(str1);
+ g_free(str2);
+ return result;
+}
+
+bool HerePlace::__compareWithDistance(const maps_place_h &item1, const maps_place_h &item2)
+{
+ bool result = false;
+ int num1 = 0, num2 = 0;
+
+ if (maps_place_get_distance(item1, &num1) == MAPS_ERROR_NONE &&
+ maps_place_get_distance(item2, &num2) == MAPS_ERROR_NONE)
+ {
+ result = (num1 < num2);
+ }
+ return result;
+}
+
+bool HerePlace::__compareWithRating(const maps_place_h &item1, const maps_place_h &item2)
+{
+ bool result = false;
+ maps_place_rating_h rat1 = NULL, rat2 = NULL;
+ double num1 = 0, num2 = 0;
+
+ if (maps_place_get_rating(item1, &rat1) == MAPS_ERROR_NONE &&
+ maps_place_get_rating(item2, &rat2) == MAPS_ERROR_NONE)
+ {
+ if (maps_place_rating_get_average(rat1, &num1) == MAPS_ERROR_NONE &&
+ maps_place_rating_get_average(rat2, &num2) == MAPS_ERROR_NONE)
+ {
+ result = (num1 > num2);
+ }
+ }
+ maps_place_rating_destroy(rat1);
+ maps_place_rating_destroy(rat2);
+ return result;
+}
+
+bool HerePlace::__compareWithCategoryCb(int index, int total,
+ maps_place_category_h category,
+ void *user_data)
+{
+ user_data = category;
+ return false;
+}
+
+bool HerePlace::__compareWithCategory(const maps_place_h &item1, const maps_place_h &item2)
+{
+ bool result = false;
+ maps_place_category_h cat1 = NULL, cat2 = NULL;
+ char *str1 = NULL, *str2 = NULL;
+
+ maps_place_foreach_category(item1, __compareWithCategoryCb, &cat1);
+ maps_place_foreach_category(item2, __compareWithCategoryCb, &cat2);
+
+ if (maps_place_category_get_id(item1, &str1) == MAPS_ERROR_NONE &&
+ maps_place_category_get_id(item2, &str2) == MAPS_ERROR_NONE)
+ {
+ result = (strcmp(str1, str2) < 0);
+ }
+ maps_place_category_destroy(item1);
+ maps_place_category_destroy(item2);
+ g_free(str1);
+ g_free(str2);
+ return result;
+}
+
+void HerePlace::__sortList(PlaceList &list)
+{
+ if (!m_szSortBy) return;
+
+ if (!strcmp(m_szSortBy, "name") || !strcmp(m_szSortBy, "title"))
+ {
+ std::sort(list.begin(), list.end(), __compareWithTitle);
+ }
+ else if (!strcmp(m_szSortBy, "id"))
+ {
+ std::sort(list.begin(), list.end(), __compareWithId);
+ }
+ else if (!strcmp(m_szSortBy, "distance"))
+ {
+ std::sort(list.begin(), list.end(), __compareWithDistance);
+ }
+ else if (!strcmp(m_szSortBy, "rate") || !strcmp(m_szSortBy, "rating"))
+ {
+ std::sort(list.begin(), list.end(), __compareWithRating);
+ }
+ else if (!strcmp(m_szSortBy, "category"))
+ {
+ std::sort(list.begin(), list.end(), __compareWithCategory);
+ }
+}
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/src/here_plugin.cpp b/src/here_plugin.cpp
new file mode 100644
index 0000000..43e3c77
--- /dev/null
+++ b/src/here_plugin.cpp
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <maps_plugin.h>
+#include "here_api.h"
+#include "here_types.h"
+#include "here_utils.h"
+
+extern "C"
+{
+
+EXPORT_API int maps_plugin_init(maps_plugin_h *plugin)
+{
+ if (!plugin)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginInit(plugin);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_shutdown(maps_plugin_h plugin)
+{
+ if (!plugin)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginShutdown(plugin);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_info(maps_plugin_info_h* info)
+{
+ if (!info)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ maps_plugin_info_create(info);
+ maps_plugin_info_set_provider_name(*info, "HERE");
+
+ return MAPS_ERROR_NONE;
+}
+
+EXPORT_API int maps_plugin_set_provider_key(const char* provider_key)
+{
+ if (!provider_key)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSetProviderKey(provider_key);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_provider_key(char** provider_key)
+{
+ if (!provider_key)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginGetProviderKey(provider_key);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_set_preference(maps_preference_h preference)
+{
+ if (!preference)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSetPreference(preference);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_preference(maps_preference_h* preference)
+{
+ if (!preference)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginGetPreference(preference);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_is_service_supported(maps_service_e service, bool *supported)
+{
+ if (!supported)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ switch(service)
+ {
+ case MAPS_SERVICE_GEOCODE:
+ case MAPS_SERVICE_GEOCODE_INSIDE_AREA:
+ case MAPS_SERVICE_GEOCODE_BY_STRUCTURED_ADDRESS:
+ case MAPS_SERVICE_REVERSE_GEOCODE:
+ case MAPS_SERVICE_SEARCH_PLACE:
+ case MAPS_SERVICE_SEARCH_PLACE_BY_AREA:
+ case MAPS_SERVICE_SEARCH_PLACE_BY_ADDRESS:
+ case MAPS_SERVICE_SEARCH_ROUTE:
+ case MAPS_SERVICE_SEARCH_ROUTE_WAYPOINTS:
+ case MAPS_SERVICE_CANCEL_REQUEST:
+ *supported = TRUE;
+ return MAPS_ERROR_NONE;
+ default:
+ *supported = FALSE;
+ return MAPS_ERROR_NOT_SUPPORTED;
+ }
+}
+
+EXPORT_API int maps_plugin_is_data_supported(maps_service_data_e service, bool *supported)
+{
+ if (!supported)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ switch(service)
+ {
+ case MAPS_PLACE_ADDRESS:
+ case MAPS_PLACE_RATING:
+ case MAPS_PLACE_CATEGORIES:
+ case MAPS_PLACE_ATTRIBUTES:
+ case MAPS_PLACE_CONTACTS:
+ case MAPS_PLACE_EDITORIALS:
+ case MAPS_PLACE_REVIEWS:
+ case MAPS_PLACE_IMAGE:
+ case MAPS_PLACE_SUPPLIER:
+ case MAPS_PLACE_RELATED:
+ case MAPS_ROUTE_PATH:
+ case MAPS_ROUTE_SEGMENTS_PATH:
+ case MAPS_ROUTE_SEGMENTS_MANEUVERS:
+ *supported = TRUE;
+ return MAPS_ERROR_NONE;
+ default:
+ *supported = FALSE;
+ return MAPS_ERROR_NOT_SUPPORTED;
+ }
+}
+
+EXPORT_API int maps_plugin_geocode(const char* address, const maps_preference_h preference,
+ maps_service_geocode_cb callback, void *user_data, int* request_id)
+{
+ if (!address || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginGeocode(address, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_geocode_inside_area(const char* address, const maps_area_h bounds,
+ const maps_preference_h preference, maps_service_geocode_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!bounds || !address || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginGeocodeInsideArea(address, bounds, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_geocode_by_structured_address(const maps_address_h address,
+ const maps_preference_h preference, maps_service_geocode_cb callback,
+ void *user_data, int* request_id)
+{
+ if (!address || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginGeocodeByStructuredAddress(address, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_reverse_geocode(double latitude, double longitude,
+ const maps_preference_h preference, maps_service_reverse_geocode_cb callback,
+ void *user_data, int* request_id)
+{
+ if (!callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginReverseGeocode(latitude, longitude, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place(const maps_coordinates_h position, int distance,
+ const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!position || !filter || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSearchPlace(position, distance, preference, filter, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place_by_area(const maps_area_h boundary,
+ const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!boundary || !filter || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSearchPlaceByArea(boundary, preference, filter, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place_by_address(const char* address, const maps_area_h boundary,
+ const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!address || !boundary || !filter || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSearchPlaceByAddress(address, boundary, preference, filter, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_route(const maps_coordinates_h origin, const maps_coordinates_h destination,
+ maps_preference_h preference, maps_service_search_route_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!origin || !destination || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSearchRoute(origin, destination, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_route_waypoints(const maps_coordinates_h* waypoint_list, int waypoint_num,
+ maps_preference_h preference, maps_service_search_route_cb callback,
+ void* user_data, int* request_id)
+{
+ if (!waypoint_list || waypoint_num <= 0 || !callback || !request_id)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginSearchRouteWaypoints(waypoint_list, waypoint_num, preference, callback, user_data, request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_cancel_request(int request_id)
+{
+ if (request_id < 0)
+ return MAPS_ERROR_INVALID_PARAMETER;
+
+ int ret = HerePluginCancelRequest(request_id);
+
+ MAPS_LOGD("here_error_e = %d", ret);
+
+ return ConvertToMapsError(ret);
+}
+
+} // end of extern "C"
+
diff --git a/src/here_revgeocode.cpp b/src/here_revgeocode.cpp
new file mode 100644
index 0000000..914108e
--- /dev/null
+++ b/src/here_revgeocode.cpp
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_revgeocode.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereRevGeocode::HereRevGeocode(void* pCbFunc, void* pUserData, int nReqId)
+: m_geoCoord(0,0,0)
+{
+ m_pQuery = NULL;
+ m_pCbFunc = pCbFunc;
+ m_pUserData = pUserData;
+ m_nReqId = nReqId;
+}
+
+HereRevGeocode::~HereRevGeocode()
+{
+ if (m_pQuery)
+ {
+ delete m_pQuery;
+ m_pQuery = NULL;
+ }
+}
+
+here_error_e HereRevGeocode::PrepareQuery()
+{
+ if (m_pQuery)
+ return HERE_ERROR_PERMISSION_DENIED;
+
+ m_pQuery = new ReverseGeoCoderQuery();
+
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+ else
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::PreparePreference(maps_preference_h hPref)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ int ret;
+ char *szLanguage;
+ ret = maps_preference_get_language(hPref, &szLanguage);
+ if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+ m_pQuery->AppendPreferredLanguage(szLanguage);
+ g_free(szLanguage);
+
+ int nMaxResults;
+ ret = maps_preference_get_max_results(hPref, &nMaxResults);
+ if (ret == MAPS_ERROR_NONE)
+ m_pQuery->SetMaxResults((size_t)nMaxResults);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::PreparePosition(double dLat, double dLng)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ GeoCoordinates geoCoord(dLat, dLng);
+ if (!HereUtils::IsValid(geoCoord))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ m_pQuery->SetProximity(geoCoord, 0);
+ m_pQuery->SetMode(ReverseGeoCoderQuery::RM_RetrieveAddresses);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::StartRevGeocode(maps_item_hashtable_h hPref)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereRevGeocode::OnGeoCoderReply(const GeoCoderReply& Reply)
+{
+ if (m_bCanceled) // ignore call back if it was cancelled.
+ {
+ delete this;
+ return;
+ }
+
+
+ int nResults = Reply.GetNumResults();
+ Result* pResult;
+ float fDistance, fShortestDistance = 0;
+ int nShortestIdx = -1;
+
+ for (size_t i = 0; i < (size_t)nResults; i++)
+ {
+ pResult = (Result*)Reply.GetResult(i);
+
+ if(pResult)
+ {
+ fDistance = pResult->GetDistance();
+
+ if (nShortestIdx < 0 || fDistance < fShortestDistance)
+ {
+ fShortestDistance = fDistance;
+ nShortestIdx = i;
+ }
+ }
+ }
+
+
+ if (nShortestIdx < 0)
+ {
+ ((maps_service_reverse_geocode_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND,
+ m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+ return;
+ }
+
+ maps_address_h hAddr = NULL;
+ maps_error_e error = (maps_error_e)maps_address_create(&hAddr);
+
+ if(error == MAPS_ERROR_NONE)
+ {
+ pResult = (Result*)Reply.GetResult(nShortestIdx);
+
+ if (pResult)
+ {
+ Address tmpAddr = (pResult->GetLocation()).GetAddress();
+
+ if(!tmpAddr.GetHouseNumber().empty())
+ maps_address_set_building_number(hAddr, tmpAddr.GetHouseNumber().c_str());
+
+ if(!tmpAddr.GetStreet().empty())
+ maps_address_set_street(hAddr, tmpAddr.GetStreet().c_str());
+
+ if(!tmpAddr.GetDistrict().empty())
+ maps_address_set_district(hAddr, tmpAddr.GetDistrict().c_str());
+
+ if(!tmpAddr.GetCity().empty())
+ maps_address_set_city(hAddr, tmpAddr.GetCity().c_str());
+
+ if(!tmpAddr.GetCounty().empty())
+ maps_address_set_county(hAddr, tmpAddr.GetCounty().c_str());
+
+ if(!tmpAddr.GetState().empty())
+ maps_address_set_state(hAddr, tmpAddr.GetState().c_str());
+
+ if(!tmpAddr.GetCountry().empty())
+ maps_address_set_country(hAddr, tmpAddr.GetCountry().c_str());
+
+ if(!tmpAddr.GetCountryCode().empty())
+ maps_address_set_country_code(hAddr, tmpAddr.GetCountryCode().c_str());
+
+ if(!tmpAddr.GetPostalCode().empty())
+ maps_address_set_postal_code(hAddr, tmpAddr.GetPostalCode().c_str());
+
+ if(!tmpAddr.GetLabel().empty())
+ maps_address_set_freetext(hAddr, tmpAddr.GetLabel().c_str());
+ }
+ }
+
+ if (m_bCanceled)
+ {
+ maps_address_destroy(hAddr);
+ }
+ else
+ {
+ ((maps_service_reverse_geocode_cb)m_pCbFunc)(error, m_nReqId, 0, 1, hAddr, m_pUserData);
+ }
+
+ delete this;
+}
+
+void HereRevGeocode::OnGeoCoderFailure(const GeoCoderReply& Reply)
+{
+ if (!m_bCanceled)
+ ((maps_service_reverse_geocode_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_route.cpp b/src/here_route.cpp
new file mode 100644
index 0000000..a8eb95e
--- /dev/null
+++ b/src/here_route.cpp
@@ -0,0 +1,431 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_route.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereRoute::HereRoute(void *pCbFunc, void *pUserData, int nReqId)
+{
+ m_pQuery = NULL;
+
+ m_pCbFunc = pCbFunc;
+ m_pUserData = pUserData;
+ m_nReqId = nReqId;
+}
+
+HereRoute::~HereRoute()
+{
+ if (m_pQuery)
+ {
+ delete m_pQuery;
+ m_pQuery = NULL;
+ }
+}
+
+here_error_e HereRoute::PrepareQuery()
+{
+ if (m_pQuery)
+ return HERE_ERROR_PERMISSION_DENIED;
+
+ GeoCoordinates origCoord, destCoord;
+ m_pQuery = new GeoRouteQuery(origCoord, destCoord);
+
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+ else
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::PrepareWaypoint(maps_coordinates_h hOrigin, maps_coordinates_h hDestination)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hOrigin || !hDestination)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+
+ const int nWaypointNum = 2;
+ maps_coordinates_h hWaypointList[nWaypointNum];
+ hWaypointList[0] = hOrigin;
+ hWaypointList[1] = hDestination;
+
+ return PrepareWaypoint(hWaypointList, nWaypointNum);
+}
+
+here_error_e HereRoute::PrepareWaypoint(const maps_coordinates_h* hWaypointList, int nWaypointNum)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hWaypointList || nWaypointNum <= 0)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ GeoCoordinateList hereCoordList;
+ GeoCoordinates hereCoord;
+ double dLatitude, dLongitude;
+
+ for (int index = 0; index < nWaypointNum; index++)
+ {
+ if (hWaypointList[index] != NULL) {
+ maps_coordinates_get_latitude(hWaypointList[index], &dLatitude);
+ maps_coordinates_get_longitude(hWaypointList[index], &dLongitude);
+
+ //MAPS_LOGD("Waypoint --> Lat : %f, Long : %f", dLatitude, dLongitude);
+
+ hereCoord = GeoCoordinates(dLatitude, dLongitude);
+
+ if (!HereUtils::IsValid(hereCoord))
+ return HERE_ERROR_INVALID_PARAMETER;
+
+ hereCoordList.push_back(hereCoord);
+ }
+ }
+
+ m_pQuery->SetWaypoints(hereCoordList);
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::PreparePreference(maps_preference_h hPref)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ if (!hPref)
+ return HERE_ERROR_INVALID_PARAMETER;
+
+/*
+ SegmentDetail aSegmentDetail;
+ ManeuverDetail aMneuverDetail;
+ m_pQuery->SetSegmentDetail(aSegmentDetail);
+ m_pQuery->SetManeuverDetail(aMneuverDetail);
+*/
+
+ /* transport mode */
+ maps_route_transport_mode_e eTransMode;
+ if (maps_preference_get_route_transport_mode(hPref, &eTransMode) == MAPS_ERROR_NONE)
+ {
+ m_pQuery->SetTravelModes(HereUtils::Convert(eTransMode));
+ }
+
+ /* eFeature */
+ maps_route_feature_e eFeature;
+ maps_route_feature_weight_e eFeatureWeight;
+ if (maps_preference_get_route_feature(hPref, &eFeature) == MAPS_ERROR_NONE &&
+ maps_preference_get_route_feature_weight(hPref, &eFeatureWeight) == MAPS_ERROR_NONE)
+ {
+ m_pQuery->SetFeatureWeight(HereUtils::Convert(eFeature),
+ HereUtils::Convert(eFeatureWeight));
+ }
+
+ /* exclude areas */
+ char *szAreaToAvoid;
+ if (maps_preference_get(hPref, MAPS_ROUTE_RECT_AREA_TO_AVOID, &szAreaToAvoid) == MAPS_ERROR_NONE)
+ {
+ GeoBoundingBox gbBox;
+ GeoBoundingBoxList gbBoxList;
+ gbBoxList.push_back(HereUtils::Convert(szAreaToAvoid, gbBox));
+ m_pQuery->SetExcludeAreas(gbBoxList);
+ g_free(szAreaToAvoid);
+ }
+
+ /* optimization */
+ GeoRouteQuery::RouteOptimization hereOpt;
+ maps_route_optimization_e mapsOpt;
+ if (maps_preference_get_route_optimization(hPref, &mapsOpt) == MAPS_ERROR_NONE)
+ {
+ switch (mapsOpt)
+ {
+ case MAPS_ROUTE_TYPE_FASTEST: hereOpt = GeoRouteQuery::RO_FastestRoute; break;
+ case MAPS_ROUTE_TYPE_SHORTEST: hereOpt = GeoRouteQuery::RO_ShortestRoute; break;
+ default: hereOpt = GeoRouteQuery::RO_FastestRoute; break;
+ }
+ m_pQuery->SetRouteOptimization(hereOpt);
+ }
+
+ /* Metric System */
+ GeoRouteQuery::MetricSystem eMetric;
+ maps_distance_unit_e eUnit;
+ if (maps_preference_get_distance_unit(hPref, &eUnit) == MAPS_ERROR_NONE)
+ {
+ switch (eUnit)
+ {
+ case MAPS_DISTANCE_UNIT_M: eMetric = GeoRouteQuery::DIST_metric; break;
+ case MAPS_DISTANCE_UNIT_KM: eMetric = GeoRouteQuery::DIST_metric; break;
+ default: eMetric = GeoRouteQuery::DIST_imperial; break;
+ }
+ m_pQuery->SetMetricSystem(eMetric);
+ }
+
+ char *szViewBounds;
+ if (maps_preference_get(hPref, MAPS_ROUTE_GEOMETRY_BOUNDING_BOX, &szViewBounds) == MAPS_ERROR_NONE)
+ {
+ GeoBoundingBox gbBox;
+ HereUtils::Convert(szViewBounds, gbBox);
+ m_pQuery->SetViewBounds(gbBox);
+ g_free(szViewBounds);
+ }
+
+ return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::StartRoute(void)
+{
+ if (!m_pQuery)
+ return HERE_ERROR_OUT_OF_MEMORY;
+
+ m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+ return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereRoute::OnRouteReply(const GeoRouteReply& Reply)
+{
+ if (m_bCanceled) // ignore call back if it was cancelled.
+ {
+ delete this;
+ return;
+ }
+
+ maps_route_h mapsRoute;
+ maps_error_e error;
+ GeoRouteList hereRouteList = Reply.GetRoutes();
+ int nReplyIdx = 0, nReplyNum = hereRouteList.size();
+ GeoRouteList::iterator hereRoute;
+
+ if (nReplyNum == 0)
+ {
+ ((maps_service_search_route_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+ 0, 1, NULL, m_pUserData);
+ delete this;
+ return;
+ }
+
+ for (hereRoute = hereRouteList.begin() ; hereRoute != hereRouteList.end() ; hereRoute++)
+ {
+ error = (maps_error_e)maps_route_create(&mapsRoute);
+
+ if (error == MAPS_ERROR_NONE)
+ {
+ /* route id */
+ if (!hereRoute->GetRouteId().empty())
+ maps_route_set_route_id(mapsRoute, (char*)hereRoute->GetRouteId().c_str());
+
+ /* distance */
+ maps_route_set_total_distance(mapsRoute, hereRoute->GetDistance());
+
+ /* duration */
+ maps_route_set_total_duration(mapsRoute, hereRoute->GetTravelTime());
+
+ /* travel mode */
+ maps_route_transport_mode_e eTransportMode;
+ eTransportMode = HereUtils::Convert(hereRoute->GetTravelMode());
+ maps_route_set_transport_mode(mapsRoute, eTransportMode);
+
+ /* path */
+ GeoCoordinateList herePathList = hereRoute->GetPath();
+ maps_item_list_h mapsPathList;
+ maps_coordinates_h mapsPath;
+
+ if (maps_item_list_create(&mapsPathList) == MAPS_ERROR_NONE)
+ {
+ GeoCoordinateList::iterator herePath;
+ for (herePath = herePathList.begin(); herePath != herePathList.end(); herePath++)
+ {
+ double dLat = herePath->GetLatitude();
+ double dLng = herePath->GetLongitude();
+
+ if(maps_coordinates_create(dLat, dLng, &mapsPath) == MAPS_ERROR_NONE)
+ {
+ if (herePath == herePathList.begin())
+ maps_route_set_origin(mapsRoute, mapsPath);
+ else if (herePath == herePathList.end()-1)
+ maps_route_set_destination(mapsRoute, mapsPath);
+ else
+ maps_item_list_append(mapsPathList, mapsPath, maps_coordinates_clone);
+
+ maps_coordinates_destroy(mapsPath);
+ }
+ }
+
+ if (maps_item_list_items(mapsPathList))
+ {
+ maps_route_set_path(mapsRoute, mapsPathList);
+ maps_item_list_remove_all(mapsPathList, maps_coordinates_destroy);
+ }
+ maps_item_list_destroy(mapsPathList);
+ }
+
+ /* bounding box */
+ maps_area_h hMapsArea = NULL;
+ HereUtils::Convert(hereRoute->GetBounds(), hMapsArea);
+ if (hMapsArea)
+ {
+ maps_route_set_bounding_box(mapsRoute, hMapsArea);
+ maps_area_destroy(hMapsArea);
+ }
+
+ /* segments */
+ ProcessSegments(mapsRoute, hereRoute->GetRouteSegmentList());
+ }
+
+ if (m_bCanceled)
+ {
+ maps_route_destroy(mapsRoute);
+ break;
+ }
+ else
+ {
+ if (((maps_service_search_route_cb)m_pCbFunc)(error, m_nReqId,
+ nReplyIdx++, nReplyNum, mapsRoute, m_pUserData) == FALSE)
+ {
+ delete this;
+ return;
+ }
+ //maps_route_destroy(mapsRoute);
+ }
+ }
+
+ if(nReplyIdx >= nReplyNum)
+ delete this;
+}
+
+void HereRoute::OnRouteFailure(const GeoRouteReply& Reply)
+{
+ if (!m_bCanceled)
+ ((maps_service_search_route_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+ delete this;
+}
+
+maps_error_e HereRoute::ProcessSegments(maps_route_h mapsRoute, const RouteSegmentList& hereSegmList)
+{
+ maps_item_list_h mapsSegmList;
+ maps_route_segment_h mapsSegm;
+ maps_error_e error;
+
+ if (hereSegmList.empty()) return MAPS_ERROR_NOT_FOUND;
+
+ if ((error = (maps_error_e)maps_item_list_create(&mapsSegmList)) != MAPS_ERROR_NONE)
+ return error;
+
+ RouteSegmentList::const_iterator hereSegm;
+ for (hereSegm = hereSegmList.begin() ; hereSegm != hereSegmList.end() ; hereSegm++)
+ {
+ if (maps_route_segment_create(&mapsSegm) != MAPS_ERROR_NONE) continue;
+
+ /* distance */
+ maps_route_segment_set_distance(mapsSegm, hereSegm->GetDistance());
+
+ /* tranvel time */
+ maps_route_segment_set_duration(mapsSegm, hereSegm->GetTravelTime());
+
+ /* origin, destination */
+ GeoCoordinateList herePathList = hereSegm->GetPath();
+ int here_path_list_size = herePathList.size();
+
+ if (here_path_list_size > 0)
+ {
+ GeoCoordinates hereOrig = herePathList.at(0);
+ GeoCoordinates hereDest = herePathList.at(here_path_list_size-1);
+
+ maps_coordinates_h mapsOrig, mapsDest;
+ maps_coordinates_create(hereOrig.GetLatitude(),
+ hereOrig.GetLongitude(), &mapsOrig);
+ maps_coordinates_create(hereDest.GetLatitude(),
+ hereDest.GetLongitude(), &mapsDest);
+ maps_route_segment_set_origin(mapsSegm, mapsOrig);
+ maps_route_segment_set_destination(mapsSegm, mapsDest);
+ maps_coordinates_destroy(mapsOrig);
+ maps_coordinates_destroy(mapsDest);
+ }
+
+ /* maneuver */
+ ProcessManeuver(mapsSegm, hereSegm->GetManeuverList());
+
+ maps_item_list_append(mapsSegmList, mapsSegm, maps_route_segment_clone);
+ maps_route_segment_destroy(mapsSegm);
+ }
+
+ if (maps_item_list_items(mapsSegmList))
+ {
+ maps_route_set_segments(mapsRoute, mapsSegmList);
+ maps_item_list_remove_all(mapsSegmList, maps_route_segment_destroy);
+ }
+ maps_item_list_destroy(mapsSegmList);
+
+ return MAPS_ERROR_NONE;
+}
+
+maps_error_e HereRoute::ProcessManeuver(maps_route_segment_h mapsSegm, const ManeuverList& hereManeList)
+{
+ maps_item_list_h mapsManeList;
+ maps_route_maneuver_h mapsManeuver;
+ maps_coordinates_h mapsCoord;
+ maps_error_e error;
+
+ if (hereManeList.empty()) return MAPS_ERROR_NOT_FOUND;
+
+ if ((error = (maps_error_e)maps_item_list_create(&mapsManeList)) != MAPS_ERROR_NONE)
+ return error;
+
+ ManeuverList::const_iterator hereMane;
+ for (hereMane = hereManeList.begin() ; hereMane != hereManeList.end() ; hereMane++)
+ {
+ if (maps_route_maneuver_create(&mapsManeuver) != MAPS_ERROR_NONE) continue;
+
+ /* position */
+ if (maps_coordinates_create(hereMane->GetPosition().GetLatitude(),
+ hereMane->GetPosition().GetLongitude(), &mapsCoord) == MAPS_ERROR_NONE)
+ {
+ maps_route_maneuver_set_position(mapsManeuver, mapsCoord);
+ maps_coordinates_destroy(mapsCoord);
+ }
+
+ /* instruction */
+ if (!hereMane->GetInstructionText().empty())
+ maps_route_maneuver_set_instruction_text(mapsManeuver,
+ (char*)hereMane->GetInstructionText().c_str());
+
+ /* length */
+ maps_route_maneuver_set_distance_to_next_instruction(mapsManeuver,
+ hereMane->GetDistanceToNextInstruction());
+
+ /* travel time */
+ maps_route_maneuver_set_time_to_next_instruction(mapsManeuver,
+ hereMane->GetTimeToNextInstruction());
+
+ /* direction -> turn type */
+ maps_route_maneuver_set_turn_type(mapsManeuver,
+ HereUtils::Convert(hereMane->GetDirection()));
+
+ maps_item_list_append(mapsManeList, mapsManeuver, maps_route_maneuver_clone);
+ maps_route_maneuver_destroy(mapsManeuver);
+ }
+
+ if (maps_item_list_items(mapsManeList))
+ {
+ maps_route_segment_set_maneuvers(mapsSegm, mapsManeList);
+ maps_item_list_remove_all(mapsManeList, maps_route_maneuver_destroy);
+ }
+ maps_item_list_destroy(mapsManeList);
+
+ return MAPS_ERROR_NONE;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_utils.cpp b/src/here_utils.cpp
new file mode 100644
index 0000000..60f1fb9
--- /dev/null
+++ b/src/here_utils.cpp
@@ -0,0 +1,359 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_utils.h"
+#include <common/CommunicationError.h>
+
+
+static const double LATITUDE_RANGE = 85.05113;
+static const double LONGITUDE_RANGE = 180.0;
+
+
+extern "C"
+{
+int ConvertToMapsError(int nErr)
+{
+ switch (nErr)
+ {
+ case HERE_ERROR_NONE: return MAPS_ERROR_NONE;
+ case HERE_ERROR_PERMISSION_DENIED: return MAPS_ERROR_PERMISSION_DENIED;
+ case HERE_ERROR_OUT_OF_MEMORY: return MAPS_ERROR_OUT_OF_MEMORY;
+ case HERE_ERROR_INVALID_PARAMETER: return MAPS_ERROR_INVALID_PARAMETER;
+ case HERE_ERROR_NOT_SUPPORTED: return MAPS_ERROR_NOT_SUPPORTED;
+ case HERE_ERROR_CONNECTION_TIME_OUT: return MAPS_ERROR_CONNECTION_TIME_OUT;
+ case HERE_ERROR_NETWORK_UNREACHABLE: return MAPS_ERROR_NETWORK_UNREACHABLE;
+ case HERE_ERROR_INVALID_OPERATION: return MAPS_ERROR_INVALID_OPERATION;
+ case HERE_ERROR_KEY_NOT_AVAILABLE: return MAPS_ERROR_KEY_NOT_AVAILABLE;
+ case HERE_ERROR_RESOURCE_BUSY: return MAPS_ERROR_RESOURCE_BUSY;
+ case HERE_ERROR_CANCELED: return MAPS_ERROR_CANCELED;
+ case HERE_ERROR_UNKNOWN: return MAPS_ERROR_UNKNOWN;
+ case HERE_ERROR_SERVICE_NOT_AVAILABLE: return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+ case HERE_ERROR_NOT_FOUND: return MAPS_ERROR_NOT_FOUND;
+ }
+ return MAPS_ERROR_UNKNOWN;
+}
+
+int ConvertToHereError(int nErr)
+{
+ switch (nErr)
+ {
+ case MAPS_ERROR_NONE: return HERE_ERROR_NONE;
+ case MAPS_ERROR_PERMISSION_DENIED: return HERE_ERROR_PERMISSION_DENIED;
+ case MAPS_ERROR_OUT_OF_MEMORY: return HERE_ERROR_OUT_OF_MEMORY;
+ case MAPS_ERROR_INVALID_PARAMETER: return HERE_ERROR_INVALID_PARAMETER;
+ case MAPS_ERROR_NOT_SUPPORTED: return HERE_ERROR_NOT_SUPPORTED;
+ case MAPS_ERROR_CONNECTION_TIME_OUT: return HERE_ERROR_CONNECTION_TIME_OUT;
+ case MAPS_ERROR_NETWORK_UNREACHABLE: return HERE_ERROR_NETWORK_UNREACHABLE;
+ case MAPS_ERROR_INVALID_OPERATION: return HERE_ERROR_INVALID_OPERATION;
+ case MAPS_ERROR_KEY_NOT_AVAILABLE: return HERE_ERROR_KEY_NOT_AVAILABLE;
+ case MAPS_ERROR_RESOURCE_BUSY: return HERE_ERROR_RESOURCE_BUSY;
+ case MAPS_ERROR_CANCELED: return HERE_ERROR_CANCELED;
+ case MAPS_ERROR_UNKNOWN: return HERE_ERROR_UNKNOWN;
+ case MAPS_ERROR_SERVICE_NOT_AVAILABLE: return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+ case MAPS_ERROR_NOT_FOUND: return HERE_ERROR_NOT_FOUND;
+ }
+ return HERE_ERROR_UNKNOWN;
+}
+
+const char* ConverHereErrorToString(int nErr)
+{
+ switch (nErr)
+ {
+ case HERE_ERROR_NONE: return "No errors";
+ case HERE_ERROR_PERMISSION_DENIED: return "Permission denied";
+ case HERE_ERROR_OUT_OF_MEMORY: return "Out of memory";
+ case HERE_ERROR_INVALID_PARAMETER: return "Invalid Parameter";
+ case HERE_ERROR_NOT_SUPPORTED: return "Not suppoerted";
+ case HERE_ERROR_CONNECTION_TIME_OUT: return "Connection time out";
+ case HERE_ERROR_NETWORK_UNREACHABLE: return "Network unreachable";
+ case HERE_ERROR_INVALID_OPERATION: return "Invalid operation";
+ case HERE_ERROR_KEY_NOT_AVAILABLE: return "Key not available";
+ case HERE_ERROR_RESOURCE_BUSY: return "Resource busy";
+ case HERE_ERROR_CANCELED: return "Canceled";
+ case HERE_ERROR_UNKNOWN: return "Unknown";
+ case HERE_ERROR_SERVICE_NOT_AVAILABLE: return "Service not available";
+ case HERE_ERROR_NOT_FOUND: return "Not found";
+ }
+ return "Unknown";
+}
+
+const char* ConvertMapsErrorToChar(int nErr)
+{
+ switch (nErr)
+ {
+ case MAPS_ERROR_NONE: return "MAPS_ERROR_NONE";
+ case MAPS_ERROR_PERMISSION_DENIED: return "MAPS_ERROR_PERMISSION_DENIED";
+ case MAPS_ERROR_OUT_OF_MEMORY: return "MAPS_ERROR_OUT_OF_MEMORY";
+ case MAPS_ERROR_INVALID_PARAMETER: return "MAPS_ERROR_INVALID_PARAMETER";
+ case MAPS_ERROR_NOT_SUPPORTED: return "MAPS_ERROR_NOT_SUPPORTED";
+ case MAPS_ERROR_CONNECTION_TIME_OUT: return "MAPS_ERROR_CONNECTION_TIME_OUT";
+ case MAPS_ERROR_NETWORK_UNREACHABLE: return "MAPS_ERROR_NETWORK_UNREACHABLE";
+ case MAPS_ERROR_INVALID_OPERATION: return "MAPS_ERROR_INVALID_OPERATION";
+ case MAPS_ERROR_KEY_NOT_AVAILABLE: return "MAPS_ERROR_KEY_NOT_AVAILABLE";
+ case MAPS_ERROR_RESOURCE_BUSY: return "MAPS_ERROR_RESOURCE_BUSY";
+ case MAPS_ERROR_CANCELED: return "MAPS_ERROR_CANCELED";
+ case MAPS_ERROR_UNKNOWN: return "MAPS_ERROR_UNKNOWN";
+ case MAPS_ERROR_SERVICE_NOT_AVAILABLE: return "MAPS_ERROR_SERVICE_NOT_AVAILABLE";
+ case MAPS_ERROR_NOT_FOUND: return "MAPS_ERROR_NOT_FOUND";
+ }
+ return "MAPS_ERROR_UNKNOWN";
+}
+}
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereUtils::HereUtils()
+{
+}
+
+HereUtils::~HereUtils()
+{
+}
+
+GeoRouteQuery::TravelMode HereUtils::Convert(maps_route_transport_mode_e nVal)
+{
+ switch (nVal)
+ {
+ case MAPS_ROUTE_TRANSPORT_MODE_CAR: return GeoRouteQuery::TM_CarTravel;
+ case MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN: return GeoRouteQuery::TM_PedestrianTravel;
+ case MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT: return GeoRouteQuery::TM_PublicTransitTravel;
+ default: break;
+ }
+ return GeoRouteQuery::TM_CarTravel;
+}
+
+maps_route_transport_mode_e HereUtils::Convert(GeoRouteQuery::TravelMode nVal)
+{
+ switch (nVal)
+ {
+ case GeoRouteQuery::TM_CarTravel: return MAPS_ROUTE_TRANSPORT_MODE_CAR;
+ case GeoRouteQuery::TM_PedestrianTravel: return MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN;
+ case GeoRouteQuery::TM_PublicTransitTravel: return MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT;
+ default: break;
+ }
+ return MAPS_ROUTE_TRANSPORT_MODE_CAR;
+}
+
+GeoRouteQuery::FeatureType HereUtils::Convert(maps_route_feature_e nVal)
+{
+ switch (nVal)
+ {
+ case MAPS_ROUTE_FEATURE_NO: return GeoRouteQuery::FT_NoFeature;
+ case MAPS_ROUTE_FEATURE_TOLL: return GeoRouteQuery::FT_TollFeature;
+ case MAPS_ROUTE_FEATURE_MOTORWAY: return GeoRouteQuery::FT_MotorwayFeature;
+ case MAPS_ROUTE_FEATURE_BOATFERRY: return GeoRouteQuery::FT_BoatFerryFeature;
+ case MAPS_ROUTE_FEATURE_RAILFERRY: return GeoRouteQuery::FT_RailFerryFeature;
+ case MAPS_ROUTE_FEATURE_PUBLICTTRANSIT: return GeoRouteQuery::FT_PublicTransitFeature;
+ case MAPS_ROUTE_FEATURE_TUNNEL: return GeoRouteQuery::FT_TunnelFeature;
+ case MAPS_ROUTE_FEATURE_DIRTROAD: return GeoRouteQuery::FT_DirtRoadFeature;
+ case MAPS_ROUTE_FEATURE_PARKS: return GeoRouteQuery::FT_ParksFeature;
+ case MAPS_ROUTE_FEATURE_HOVLANE: return GeoRouteQuery::FT_HOVLane;
+ case MAPS_ROUTE_FEATURE_STAIRS: return GeoRouteQuery::FT_Stairs;
+ default: break;
+ }
+ return GeoRouteQuery::FT_NoFeature;
+}
+
+GeoRouteQuery::FeatureWeight HereUtils::Convert(maps_route_feature_weight_e nVal)
+{
+ switch (nVal)
+ {
+ case MAPS_ROUTE_FEATURE_WEIGHT_NORMAL: return GeoRouteQuery::FW_NormalFeatureWeight;
+ case MAPS_ROUTE_FEATURE_WEIGHT_PREFER: return GeoRouteQuery::FW_PreferFeatureWeight;
+ case MAPS_ROUTE_FEATURE_WEIGHT_AVOID: return GeoRouteQuery::FW_AvoidFeatureWeight;
+ case MAPS_ROUTE_FEATURE_WEIGHT_SOFTEXCLUDE: return GeoRouteQuery::FW_SoftExcludeFeatureWeight;
+ case MAPS_ROUTE_FEATURE_WEIGHT_STRICTEXCLUDE: return GeoRouteQuery::FW_StrictExcludeFeatureWeight;
+ default: break;
+ }
+ return GeoRouteQuery::FW_NormalFeatureWeight;
+}
+
+maps_route_turn_type_e HereUtils::Convert(Maneuver::InstructionDirection nVal)
+{
+ switch (nVal)
+ {
+ case Maneuver::ID_NoDirection: return MAPS_ROUTE_TURN_TYPE_NONE;
+ case Maneuver::ID_DirectionForward: return MAPS_ROUTE_TURN_TYPE_STRAIGHT;
+ case Maneuver::ID_DirectionBearRight: return MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT;
+ case Maneuver::ID_DirectionLightRight: return MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT;
+ case Maneuver::ID_DirectionRight: return MAPS_ROUTE_TURN_TYPE_RIGHT;
+ case Maneuver::ID_DirectionHardRight: return MAPS_ROUTE_TURN_TYPE_HARD_RIGHT;
+ case Maneuver::ID_DirectionUTurnRight: return MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT;
+ case Maneuver::ID_DirectionUTurnLeft: return MAPS_ROUTE_TURN_TYPE_UTURN_LEFT;
+ case Maneuver::ID_DirectionHardLeft: return MAPS_ROUTE_TURN_TYPE_HARD_LEFT;
+ case Maneuver::ID_DirectionLeft: return MAPS_ROUTE_TURN_TYPE_LEFT;
+ case Maneuver::ID_DirectionLightLeft: return MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT;
+ case Maneuver::ID_DirectionBearLeft: return MAPS_ROUTE_TURN_TYPE_BEAR_LEFT;
+ default: break;
+ }
+ return MAPS_ROUTE_TURN_TYPE_NONE;
+}
+
+Maneuver::InstructionDirection HereUtils::Convert(maps_route_turn_type_e nVal)
+{
+ switch (nVal)
+ {
+ case MAPS_ROUTE_TURN_TYPE_NONE: return Maneuver::ID_NoDirection;
+ case MAPS_ROUTE_TURN_TYPE_STRAIGHT: return Maneuver::ID_DirectionForward;
+ case MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT: return Maneuver::ID_DirectionBearRight;
+ case MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT: return Maneuver::ID_DirectionLightRight;
+ case MAPS_ROUTE_TURN_TYPE_RIGHT: return Maneuver::ID_DirectionRight;
+ case MAPS_ROUTE_TURN_TYPE_HARD_RIGHT: return Maneuver::ID_DirectionHardRight;
+ case MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT: return Maneuver::ID_DirectionUTurnRight;
+ case MAPS_ROUTE_TURN_TYPE_UTURN_LEFT: return Maneuver::ID_DirectionUTurnLeft;
+ case MAPS_ROUTE_TURN_TYPE_HARD_LEFT: return Maneuver::ID_DirectionHardLeft;
+ case MAPS_ROUTE_TURN_TYPE_LEFT: return Maneuver::ID_DirectionLeft;
+ case MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT: return Maneuver::ID_DirectionLightLeft;
+ case MAPS_ROUTE_TURN_TYPE_BEAR_LEFT: return Maneuver::ID_DirectionBearLeft;
+ default: break;
+ }
+ return Maneuver::ID_NoDirection;
+}
+
+maps_error_e HereUtils::ConvertHttpCodeToMapsError(int nVal)
+{
+ switch (nVal)
+ {
+ case 200:/*Ok*/ return MAPS_ERROR_NONE;
+ case 408:/*Request timeout*/
+ case 504:/*Gateway timeout*/
+ case 598:/*Network reading timeout*/
+ case 599:/*Network connection timeout*/ return MAPS_ERROR_CONNECTION_TIME_OUT;
+
+ case 404:/*Not found*/
+ case 407:/*Proxy auth. required*/
+ case 502:/*Bad gateway*/ return MAPS_ERROR_NETWORK_UNREACHABLE;
+
+ case 401:/*Unauthorized*/
+ case 402:/*Payment required*/ return MAPS_ERROR_KEY_NOT_AVAILABLE;
+
+ case 405:/*Method not allowed*/
+ case 413:/*Request entity too larget*/
+ case 414:/*Request uri too large*/ return MAPS_ERROR_INVALID_OPERATION;
+
+ case 403:/*Forbidden*/
+ case 500:/*Server internal error*/
+ case 501:/*Not implemented*/
+ case 503:/*Service unavailable*/ return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+ }
+
+ if (nVal > 0 && nVal < 100) // curl error code
+ return MAPS_ERROR_NETWORK_UNREACHABLE;
+
+ if (nVal >= 400 && nVal < 500) // http code 4xx (client-side error)
+ return MAPS_ERROR_INVALID_OPERATION;
+
+ if (nVal >= 500 && nVal < 600) // http code 5xx (server-side error)
+ return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+
+ return MAPS_ERROR_UNKNOWN;
+}
+
+GeoBoundingBox& HereUtils::Convert(maps_area_h hArea, GeoBoundingBox& Box)
+{
+ maps_area_s* area_s = (maps_area_s*)hArea;
+
+ if (!area_s || area_s->type != MAPS_AREA_RECTANGLE) return Box;
+
+ GeoCoordinates hereCoordLT(area_s->rect.top_left.latitude, area_s->rect.top_left.longitude);
+ GeoCoordinates hereCoordRB(area_s->rect.bottom_right.latitude, area_s->rect.bottom_right.longitude);
+
+ Box.SetTopLeft(hereCoordLT);
+ Box.SetBottomRight(hereCoordRB);
+
+ return Box;
+}
+
+maps_area_h& HereUtils::Convert(GeoBoundingBox Box, maps_area_h& hArea)
+{
+ maps_coordinates_h mapsCoordLT, mapsCoordRB;
+ GeoCoordinates hereCoordLT, hereCoordRB;
+
+ hereCoordLT = Box.GetTopLeft();
+ hereCoordRB = Box.GetBottomRight();
+
+ maps_coordinates_create(hereCoordLT.GetLatitude(), hereCoordLT.GetLongitude(), &mapsCoordLT);
+ maps_coordinates_create(hereCoordRB.GetLatitude(), hereCoordRB.GetLongitude(), &mapsCoordRB);
+
+ maps_area_create_rectangle(mapsCoordLT, mapsCoordRB, &hArea);
+
+ maps_coordinates_destroy(mapsCoordLT);
+ maps_coordinates_destroy(mapsCoordRB);
+
+ return hArea;
+}
+
+void HereUtils::Convert(String strUtf8, WString& strUtf16)
+{
+ strUtf16.assign(strUtf8.begin(), strUtf8.end());
+}
+
+void HereUtils::Convert(WString strUtf16, String& strUtf8)
+{
+ strUtf8.assign(strUtf16.begin(), strUtf16.end());
+}
+
+GeoBoundingBox& HereUtils::Convert(const char *src, GeoBoundingBox &box)
+{
+ int i = 0;
+ char *token, *next;
+ double coord[4] = { 0.0, };
+
+ token = strtok_r((char*)src, ",;", &next);
+ while (token && i < 4)
+ {
+ coord[i++] = atof(token);
+ token = strtok_r(NULL, ",;", &next);
+ }
+ box.SetTopLeft(GeoCoordinates(coord[0], coord[1]));
+ box.SetBottomRight(GeoCoordinates(coord[2], coord[3]));
+ return box;
+}
+
+bool HereUtils::IsValid(GeoCoordinates geoCoord)
+{
+ return IsValidCoord(geoCoord.GetLatitude(), geoCoord.GetLongitude());
+}
+
+bool HereUtils::IsValid(maps_coordinates_s geoCoord)
+{
+ return IsValidCoord(geoCoord.latitude, geoCoord.longitude);
+}
+
+bool HereUtils::IsValidCoord(double dLat, double dLng)
+{
+ return ((dLat <= LATITUDE_RANGE && dLat >= -LATITUDE_RANGE) &&
+ (dLng <= LONGITUDE_RANGE && dLng >= -LONGITUDE_RANGE));
+}
+
+bool HereUtils::IsValid(maps_area_s hArea)
+{
+ if (hArea.type == MAPS_AREA_RECTANGLE)
+ {
+ return (HereUtils::IsValid(hArea.rect.top_left) &&
+ HereUtils::IsValid(hArea.rect.bottom_right));
+ }
+ else if(hArea.type == MAPS_AREA_CIRCLE)
+ {
+ return HereUtils::IsValid(hArea.circle.center);
+ }
+ else
+ return false;
+}
+
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/x86_64/libheremaps-engine.so.1 b/x86_64/libheremaps-engine.so.1
deleted file mode 120000
index 0fc20c3..0000000
--- a/x86_64/libheremaps-engine.so.1
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6 \ No newline at end of file
diff --git a/x86_64/libheremaps-engine.so.1.0.6_6 b/x86_64/libheremaps-engine.so.1.0.6_6
deleted file mode 100755
index 3e2a062..0000000
--- a/x86_64/libheremaps-engine.so.1.0.6_6
+++ /dev/null
Binary files differ
diff --git a/x86_64/libmaps-plugin-here.so b/x86_64/libmaps-plugin-here.so
deleted file mode 120000
index 89d69a6..0000000
--- a/x86_64/libmaps-plugin-here.so
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0 \ No newline at end of file
diff --git a/x86_64/libmaps-plugin-here.so.0 b/x86_64/libmaps-plugin-here.so.0
deleted file mode 120000
index f343856..0000000
--- a/x86_64/libmaps-plugin-here.so.0
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6 \ No newline at end of file
diff --git a/x86_64/libmaps-plugin-here.so.0.1.6 b/x86_64/libmaps-plugin-here.so.0.1.6
deleted file mode 100755
index 879b8e5..0000000
--- a/x86_64/libmaps-plugin-here.so.0.1.6
+++ /dev/null
Binary files differ