From ef375fa264fe48b39935385a118515f7cbee3e08 Mon Sep 17 00:00:00 2001
From: Glenn Vorhes <gavorhes@wisc.edu>
Date: Thu, 22 Sep 2016 14:57:13 -0500
Subject: [PATCH] well on the way to converting to typescript

---
 .babelrc                                      |    13 +
 .esdoc.json                                   |     4 +
 definitions/jquery.d.ts                       |  3221 +++
 definitions/node.d.ts                         |  3359 +++
 doc/-_FeatureLayerProperties.html             |   346 -
 doc/-_Slider.html                             |  1272 -
 doc/CommonSymbol.html                         |   225 -
 doc/DayRange.html                             |   234 -
 doc/ItsLayerCollection.html                   |   332 -
 doc/LayerBase.html                            |  2605 --
 doc/LayerBaseVector.html                      |  3962 ---
 doc/LayerBaseVectorEsri.html                  |  4135 ----
 doc/LayerBaseVectorGeoJson.html               |  4020 ---
 doc/LayerBaseXyzTile.html                     |  2370 --
 doc/LayerEsriMapServer.html                   |  2388 --
 doc/LayerEsriTile.html                        |  2370 --
 doc/LayerGroup.html                           |  1067 -
 doc/LayerItsInventory.html                    |  4553 ----
 doc/LayerLegend.html                          |   404 -
 doc/LayerRealEarthTile.html                   |  2421 --
 doc/LayerSwipe.html                           |   666 -
 doc/LayerVectorRealEarth.html                 |  4030 ---
 doc/MapInteractionBase.html                   |   664 -
 doc/MapMoveCls.html                           |  1600 --
 doc/MapPopupCls.html                          |  2092 --
 doc/RealEarthAnimate.html                     |   794 -
 doc/RealEarthAnimateTile.html                 |   813 -
 doc/RealEarthAnimateVector.html               |   791 -
 doc/SingleSymbol.html                         |   233 -
 doc/Sliders.html                              |   655 -
 doc/SortedFeatures.html                       |   491 -
 doc/UniqueValueSymbol.html                    |   233 -
 doc/collections_ItsLayerCollection.js.html    |   213 -
 doc/collections_Sliders.js.html               |   587 -
 doc/fonts/OpenSans-Bold-webfont.eot           |   Bin 19544 -> 0 bytes
 doc/fonts/OpenSans-Bold-webfont.svg           |  1830 --
 doc/fonts/OpenSans-Bold-webfont.woff          |   Bin 22432 -> 0 bytes
 doc/fonts/OpenSans-BoldItalic-webfont.eot     |   Bin 20133 -> 0 bytes
 doc/fonts/OpenSans-BoldItalic-webfont.svg     |  1830 --
 doc/fonts/OpenSans-BoldItalic-webfont.woff    |   Bin 23048 -> 0 bytes
 doc/fonts/OpenSans-Italic-webfont.eot         |   Bin 20265 -> 0 bytes
 doc/fonts/OpenSans-Italic-webfont.svg         |  1830 --
 doc/fonts/OpenSans-Italic-webfont.woff        |   Bin 23188 -> 0 bytes
 doc/fonts/OpenSans-Light-webfont.eot          |   Bin 19514 -> 0 bytes
 doc/fonts/OpenSans-Light-webfont.svg          |  1831 --
 doc/fonts/OpenSans-Light-webfont.woff         |   Bin 22248 -> 0 bytes
 doc/fonts/OpenSans-LightItalic-webfont.eot    |   Bin 20535 -> 0 bytes
 doc/fonts/OpenSans-LightItalic-webfont.svg    |  1835 --
 doc/fonts/OpenSans-LightItalic-webfont.woff   |   Bin 23400 -> 0 bytes
 doc/fonts/OpenSans-Regular-webfont.eot        |   Bin 19836 -> 0 bytes
 doc/fonts/OpenSans-Regular-webfont.svg        |  1831 --
 doc/fonts/OpenSans-Regular-webfont.woff       |   Bin 22660 -> 0 bytes
 doc/global.html                               | 10836 --------
 doc/gulp-helpers.js.html                      |   219 -
 doc/index.html                                |   157 +-
 doc/jquery-plugin_animate-buttons.js.html     |   287 -
 doc/jquery-plugin_day-range.js.html           |   153 -
 doc/jquery-plugin_range-change.js.html        |   178 -
 doc/jquery_floatthead.js.html                 |   105 -
 doc/layers_LayerBaseVector.js.html            |   333 -
 doc/layers_LayerBaseVectorGeoJson.js.html     |   159 -
 doc/layers_LayerBaseXyzTile.js.html           |   157 -
 doc/layers_LayerEsriMapServer.js.html         |   214 -
 doc/layers_LayerEsriTile.js.html              |    97 -
 doc/layers_LayerRealEarthTile.js.html         |   106 -
 doc/layers_LayerRealEarthVector.js.html       |   114 -
 doc/mixin_RealEarthAnimate.js.html            |   202 -
 doc/mixin_RealEarthAnimateTile.js.html        |   107 -
 doc/mixin_RealEarthAnimateVector.js.html      |   154 -
 doc/olHelpers_SortedFeatures.js.html          |   157 -
 doc/olHelpers_layerSwipe.js.html              |   202 -
 doc/olHelpers_mapInteractionBase.js.html      |   127 -
 doc/olHelpers_mapMove.js.html                 |    62 -
 doc/olHelpers_mapMoveCls.js.html              |   333 -
 doc/olHelpers_mapPopup.js.html                |    62 -
 doc/olHelpers_propertiesZoomStyle.js.html     |    84 -
 doc/olHelpers_quickMap.js.html                |    88 -
 doc/olHelpers_quickMapMulti.js.html           |    97 -
 doc/olHelpers_zoomResolutionConvert.js.html   |   129 -
 doc/scripts/linenumber.js                     |    25 -
 doc/scripts/prettify/Apache-License-2.0.txt   |   202 -
 doc/scripts/prettify/lang-css.js              |     2 -
 doc/scripts/prettify/prettify.js              |    28 -
 doc/styles/jsdoc-default.css                  |   353 -
 doc/styles/prettify-jsdoc.css                 |   111 -
 doc/styles/prettify-tomorrow.css              |   132 -
 doc/util_checkDefined.js.html                 |    83 -
 doc/util_colors.js.html                       |   227 -
 doc/util_dateConvert.js.html                  |   103 -
 doc/util_formatString.js.html                 |    89 -
 doc/util_getUrlParams.js.html                 |   102 -
 doc/util_makeGuid.js.html                     |    76 -
 doc/util_objectHelpers.js.html                |    86 -
 doc/util_provide.js.html                      |    87 -
 lib-ts/_internalnterfaces.d.ts                |     9 +
 lib-ts/_internalnterfaces.js                  |     5 +
 lib-ts/_internalnterfaces.js.map              |     1 +
 lib-ts/_scratch/Hello.d.ts                    |    11 +
 lib-ts/_scratch/Hello.js                      |    22 +
 lib-ts/_scratch/Hello.js.map                  |     1 +
 lib-ts/_test/another.d.ts                     |     0
 lib-ts/_test/another.js                       |     6 +
 lib-ts/_test/another.js.map                   |     1 +
 lib-ts/_test/compare-test.d.ts                |     0
 lib-ts/_test/compare-test.js                  |    41 +
 lib-ts/_test/compare-test.js.map              |     1 +
 lib-ts/_test/itsMap.d.ts                      |     0
 lib-ts/_test/itsMap.js                        |    21 +
 lib-ts/_test/itsMap.js.map                    |     1 +
 lib-ts/_test/my_little_test.d.ts              |     0
 lib-ts/_test/my_little_test.js                |    31 +
 lib-ts/_test/my_little_test.js.map            |     1 +
 lib-ts/_test/reacttst.d.ts                    |     0
 lib-ts/_test/reacttst.js                      |    10 +
 lib-ts/_test/reacttst.js.map                  |     1 +
 lib-ts/_test/slider-test.d.ts                 |     0
 lib-ts/_test/slider-test.js                   |   173 +
 lib-ts/_test/slider-test.js.map               |     1 +
 lib-ts/collections/ItsLayerCollection.d.ts    |    36 +
 lib-ts/collections/ItsLayerCollection.js      |   155 +
 lib-ts/collections/ItsLayerCollection.js.map  |     1 +
 lib-ts/collections/LayerLegend.d.ts           |    26 +
 lib-ts/collections/LayerLegend.js             |   287 +
 lib-ts/collections/LayerLegend.js.map         |     1 +
 lib-ts/collections/Sliders.d.ts               |    73 +
 lib-ts/collections/Sliders.js                 |   502 +
 lib-ts/collections/Sliders.js.map             |     1 +
 lib-ts/domUtil/SelectBoxBase.d.ts             |    52 +
 lib-ts/domUtil/SelectBoxBase.js               |   119 +
 lib-ts/domUtil/SelectBoxBase.js.map           |     1 +
 lib-ts/domUtil/animate-buttons.d.ts           |    38 +
 lib-ts/domUtil/animate-buttons.js             |   204 +
 lib-ts/domUtil/animate-buttons.js.map         |     1 +
 lib-ts/domUtil/range-change.d.ts              |    28 +
 lib-ts/domUtil/range-change.js                |    94 +
 lib-ts/domUtil/range-change.js.map            |     1 +
 lib-ts/index.d.ts                             |     0
 lib-ts/index.js                               |     2 +
 lib-ts/index.js.map                           |     1 +
 lib-ts/jquery-plugin/animate-buttons.d.ts     |     1 +
 lib-ts/jquery-plugin/animate-buttons.js       |   214 +
 lib-ts/jquery-plugin/animate-buttons.js.map   |     1 +
 lib-ts/jquery-plugin/day-range.d.ts           |    21 +
 lib-ts/jquery-plugin/day-range.js             |    96 +
 lib-ts/jquery-plugin/day-range.js.map         |     1 +
 lib-ts/jquery-plugin/range-change.d.ts        |    20 +
 lib-ts/jquery-plugin/range-change.js          |    95 +
 lib-ts/jquery-plugin/range-change.js.map      |     1 +
 lib-ts/jquery/floatthead.d.ts                 |    20 +
 lib-ts/jquery/floatthead.js                   |    49 +
 lib-ts/jquery/floatthead.js.map               |     1 +
 lib-ts/layers/LayerBase.d.ts                  |   187 +
 lib-ts/layers/LayerBase.js                    |   384 +
 lib-ts/layers/LayerBase.js.map                |     1 +
 lib-ts/layers/LayerBaseVector.d.ts            |   149 +
 lib-ts/layers/LayerBaseVector.js              |   291 +
 lib-ts/layers/LayerBaseVector.js.map          |     1 +
 lib-ts/layers/LayerBaseVectorGeoJson.d.ts     |    68 +
 lib-ts/layers/LayerBaseVectorGeoJson.js       |   101 +
 lib-ts/layers/LayerBaseVectorGeoJson.js.map   |     1 +
 lib-ts/layers/LayerEsriMapServer.d.ts         |    55 +
 lib-ts/layers/LayerEsriMapServer.js           |   146 +
 lib-ts/layers/LayerEsriMapServer.js.map       |     1 +
 lib-ts/layers/LayerItsInventory.d.ts          |    67 +
 lib-ts/layers/LayerItsInventory.js            |   305 +
 lib-ts/layers/LayerItsInventory.js.map        |     1 +
 lib-ts/olHelpers/esriToOlStyle.d.ts           |    47 +
 lib-ts/olHelpers/esriToOlStyle.js             |   357 +
 lib-ts/olHelpers/esriToOlStyle.js.map         |     1 +
 lib-ts/olHelpers/extentUtil.d.ts              |    14 +
 lib-ts/olHelpers/extentUtil.js                |    70 +
 lib-ts/olHelpers/extentUtil.js.map            |     1 +
 lib-ts/olHelpers/layerSwipe.d.ts              |    30 +
 lib-ts/olHelpers/layerSwipe.js                |   127 +
 lib-ts/olHelpers/layerSwipe.js.map            |     1 +
 lib-ts/olHelpers/mapInteractionBase.d.ts      |    40 +
 lib-ts/olHelpers/mapInteractionBase.js        |    77 +
 lib-ts/olHelpers/mapInteractionBase.js.map    |     1 +
 lib-ts/olHelpers/mapMove.d.ts                 |     6 +
 lib-ts/olHelpers/mapMove.js                   |     8 +
 lib-ts/olHelpers/mapMove.js.map               |     1 +
 lib-ts/olHelpers/mapMoveCls.d.ts              |    75 +
 lib-ts/olHelpers/mapMoveCls.js                |   233 +
 lib-ts/olHelpers/mapMoveCls.js.map            |     1 +
 lib-ts/olHelpers/mapPopup.d.ts                |     6 +
 lib-ts/olHelpers/mapPopup.js                  |     8 +
 lib-ts/olHelpers/mapPopup.js.map              |     1 +
 lib-ts/olHelpers/mapPopupCls.d.ts             |   150 +
 lib-ts/olHelpers/mapPopupCls.js               |   415 +
 lib-ts/olHelpers/mapPopupCls.js.map           |     1 +
 lib-ts/olHelpers/propertiesZoomStyle.d.ts     |    15 +
 lib-ts/olHelpers/propertiesZoomStyle.js       |    31 +
 lib-ts/olHelpers/propertiesZoomStyle.js.map   |     1 +
 lib-ts/olHelpers/quickMap.d.ts                |    23 +
 lib-ts/olHelpers/quickMap.js                  |    36 +
 lib-ts/olHelpers/quickMap.js.map              |     1 +
 lib-ts/olHelpers/quickMapBase.d.ts            |    31 +
 lib-ts/olHelpers/quickMapBase.js              |    74 +
 lib-ts/olHelpers/quickMapBase.js.map          |     1 +
 lib-ts/olHelpers/zoomResolutionConvert.d.ts   |    12 +
 lib-ts/olHelpers/zoomResolutionConvert.js     |    75 +
 lib-ts/olHelpers/zoomResolutionConvert.js.map |     1 +
 lib-ts/src-ts/_internalnterfaces.d.ts         |     9 +
 lib-ts/src-ts/_internalnterfaces.js           |     5 +
 lib-ts/src-ts/_internalnterfaces.js.map       |     1 +
 lib-ts/src-ts/_test/my_little_test.d.ts       |     0
 lib-ts/src-ts/_test/my_little_test.js         |    31 +
 lib-ts/src-ts/_test/my_little_test.js.map     |     1 +
 lib-ts/src-ts/index.d.ts                      |     0
 lib-ts/src-ts/index.js                        |     6 +
 lib-ts/src-ts/index.js.map                    |     1 +
 lib-ts/src-ts/layers/LayerBase.d.ts           |   187 +
 lib-ts/src-ts/layers/LayerBase.js             |   384 +
 lib-ts/src-ts/layers/LayerBase.js.map         |     1 +
 lib-ts/src-ts/layers/LayerBaseVector.d.ts     |   146 +
 lib-ts/src-ts/layers/LayerBaseVector.js       |   275 +
 lib-ts/src-ts/layers/LayerBaseVector.js.map   |     1 +
 lib-ts/src-ts/layers/LayerEsriMapServer.d.ts  |    50 +
 lib-ts/src-ts/layers/LayerEsriMapServer.js    |   145 +
 .../src-ts/layers/LayerEsriMapServer.js.map   |     1 +
 lib-ts/src-ts/olHelpers/esriToOlStyle.d.ts    |    30 +
 lib-ts/src-ts/olHelpers/esriToOlStyle.js      |   357 +
 lib-ts/src-ts/olHelpers/esriToOlStyle.js.map  |     1 +
 .../src-ts/olHelpers/mapInteractionBase.d.ts  |    40 +
 lib-ts/src-ts/olHelpers/mapInteractionBase.js |    79 +
 .../olHelpers/mapInteractionBase.js.map       |     1 +
 lib-ts/src-ts/olHelpers/mapMove.d.ts          |     6 +
 lib-ts/src-ts/olHelpers/mapMove.js            |     8 +
 lib-ts/src-ts/olHelpers/mapMove.js.map        |     1 +
 lib-ts/src-ts/olHelpers/mapMoveCls.d.ts       |    75 +
 lib-ts/src-ts/olHelpers/mapMoveCls.js         |   236 +
 lib-ts/src-ts/olHelpers/mapMoveCls.js.map     |     1 +
 lib-ts/src-ts/olHelpers/mapPopup.d.ts         |     6 +
 lib-ts/src-ts/olHelpers/mapPopup.js           |     8 +
 lib-ts/src-ts/olHelpers/mapPopup.js.map       |     1 +
 lib-ts/src-ts/olHelpers/mapPopupCls.d.ts      |   150 +
 lib-ts/src-ts/olHelpers/mapPopupCls.js        |   418 +
 lib-ts/src-ts/olHelpers/mapPopupCls.js.map    |     1 +
 .../src-ts/olHelpers/propertiesZoomStyle.d.ts |    15 +
 .../src-ts/olHelpers/propertiesZoomStyle.js   |    31 +
 .../olHelpers/propertiesZoomStyle.js.map      |     1 +
 lib-ts/src-ts/olHelpers/quickMap.d.ts         |    23 +
 lib-ts/src-ts/olHelpers/quickMap.js           |    36 +
 lib-ts/src-ts/olHelpers/quickMap.js.map       |     1 +
 lib-ts/src-ts/olHelpers/quickMapBase.d.ts     |    31 +
 lib-ts/src-ts/olHelpers/quickMapBase.js       |    74 +
 lib-ts/src-ts/olHelpers/quickMapBase.js.map   |     1 +
 .../olHelpers/zoomResolutionConvert.d.ts      |    12 +
 .../src-ts/olHelpers/zoomResolutionConvert.js |    75 +
 .../olHelpers/zoomResolutionConvert.js.map    |     1 +
 lib-ts/src-ts/util/checkDefined.d.ts          |    12 +
 lib-ts/src-ts/util/checkDefined.js            |    26 +
 lib-ts/src-ts/util/checkDefined.js.map        |     1 +
 lib-ts/src-ts/util/colors.d.ts                |    41 +
 lib-ts/src-ts/util/colors.js                  |   157 +
 lib-ts/src-ts/util/colors.js.map              |     1 +
 lib-ts/src-ts/util/dateConvert.d.ts           |    12 +
 lib-ts/src-ts/util/dateConvert.js             |    45 +
 lib-ts/src-ts/util/dateConvert.js.map         |     1 +
 lib-ts/src-ts/util/formatString.d.ts          |     1 +
 lib-ts/src-ts/util/formatString.js            |    37 +
 lib-ts/src-ts/util/formatString.js.map        |     1 +
 lib-ts/src-ts/util/getUrlParams.d.ts          |     5 +
 lib-ts/src-ts/util/getUrlParams.js            |    54 +
 lib-ts/src-ts/util/getUrlParams.js.map        |     1 +
 lib-ts/src-ts/util/makeGuid.d.ts              |     6 +
 lib-ts/src-ts/util/makeGuid.js                |    21 +
 lib-ts/src-ts/util/makeGuid.js.map            |     1 +
 lib-ts/src-ts/util/objectHelpers.d.ts         |    11 +
 lib-ts/src-ts/util/objectHelpers.js           |    31 +
 lib-ts/src-ts/util/objectHelpers.js.map       |     1 +
 lib-ts/src-ts/util/provide.d.ts               |    10 +
 lib-ts/src-ts/util/provide.js                 |    30 +
 lib-ts/src-ts/util/provide.js.map             |     1 +
 lib-ts/src/index.d.ts                         |     0
 lib-ts/src/index.js                           |     4 +
 lib-ts/src/index.js.map                       |     1 +
 lib-ts/util/_index.d.ts                       |     8 +
 lib-ts/util/_index.js                         |    11 +
 lib-ts/util/_index.js.map                     |     1 +
 lib-ts/util/checkDefined.d.ts                 |    12 +
 lib-ts/util/checkDefined.js                   |    26 +
 lib-ts/util/checkDefined.js.map               |     1 +
 lib-ts/util/colors.d.ts                       |    41 +
 lib-ts/util/colors.js                         |   157 +
 lib-ts/util/colors.js.map                     |     1 +
 lib-ts/util/dateConvert.d.ts                  |    12 +
 lib-ts/util/dateConvert.js                    |    45 +
 lib-ts/util/dateConvert.js.map                |     1 +
 lib-ts/util/formatString.d.ts                 |     1 +
 lib-ts/util/formatString.js                   |    37 +
 lib-ts/util/formatString.js.map               |     1 +
 lib-ts/util/getUrlParams.d.ts                 |     5 +
 lib-ts/util/getUrlParams.js                   |    54 +
 lib-ts/util/getUrlParams.js.map               |     1 +
 lib-ts/util/makeGuid.d.ts                     |     6 +
 lib-ts/util/makeGuid.js                       |    21 +
 lib-ts/util/makeGuid.js.map                   |     1 +
 lib-ts/util/objectHelpers.d.ts                |    11 +
 lib-ts/util/objectHelpers.js                  |    31 +
 lib-ts/util/objectHelpers.js.map              |     1 +
 lib-ts/util/provide.d.ts                      |    10 +
 lib-ts/util/provide.js                        |    30 +
 lib-ts/util/provide.js.map                    |     1 +
 package.json                                  |    72 +-
 src-ts/_internalnterfaces.ts                  |    11 +
 src-ts/_scratch/Hello.tsx                     |    12 +
 src-ts/_test/another.ts                       |     6 +
 .../_test/compare-test.ts                     |     7 +-
 src-ts/_test/itsMap.ts                        |    27 +
 src-ts/_test/my_little_test.ts                |    40 +
 src-ts/_test/reacttst.tsx                     |    15 +
 src-ts/_test/slider-test.ts                   |   180 +
 src-ts/collections/ItsLayerCollection.ts      |   166 +
 .../collections/LayerLegend.ts                |   137 +-
 src-ts/collections/Sliders.ts                 |   632 +
 src-ts/domUtil/SelectBoxBase.ts               |   140 +
 src-ts/domUtil/animate-buttons.ts             |   228 +
 src-ts/domUtil/range-change.ts                |   142 +
 src-ts/gulp-helpers.js                        |   168 +
 src-ts/index.ts                               |     4 +
 src-ts/jquery-plugin/day-range.ts             |   114 +
 src-ts/jquery/floatthead.ts                   |    55 +
 .../layers/LayerBase.ts                       |   184 +-
 src-ts/layers/LayerBaseVector.ts              |   320 +
 .../layers/LayerBaseVectorEsri.js             |    55 +-
 src-ts/layers/LayerBaseVectorGeoJson.ts       |   119 +
 src-ts/layers/LayerBaseXyzTile.js             |   106 +
 src-ts/layers/LayerEsriMapServer.ts           |   167 +
 src-ts/layers/LayerEsriTile.js                |    44 +
 .../layers/LayerItsInventory.ts               |   101 +-
 src-ts/layers/LayerRealEarthTile.js           |    55 +
 src-ts/layers/LayerRealEarthVector.js         |    63 +
 src-ts/mixin/RealEarthAnimate.js              |   151 +
 src-ts/mixin/RealEarthAnimateTile.js          |    56 +
 src-ts/mixin/RealEarthAnimateVector.js        |   103 +
 src-ts/olHelpers/SortedFeatures.js            |   106 +
 .../olHelpers/esriToOlStyle.ts                |   220 +-
 src-ts/olHelpers/extentUtil.ts                |    85 +
 src-ts/olHelpers/layerSwipe.ts                |   160 +
 src-ts/olHelpers/mapInteractionBase.ts        |    78 +
 src-ts/olHelpers/mapMove.ts                   |    11 +
 src-ts/olHelpers/mapMoveCls.ts                |   290 +
 src-ts/olHelpers/mapPopup.ts                  |    11 +
 .../olHelpers/mapPopupCls.ts                  |   279 +-
 src-ts/olHelpers/propertiesZoomStyle.ts       |    35 +
 src-ts/olHelpers/quickMap.ts                  |    38 +
 .../olHelpers/quickMapBase.ts                 |   151 +-
 src-ts/olHelpers/quickMapMulti.js             |    46 +
 src-ts/olHelpers/zoomResolutionConvert.ts     |    78 +
 src-ts/util/_index.ts                         |    14 +
 src-ts/util/checkDefined.ts                   |    30 +
 src-ts/util/colors.ts                         |   176 +
 src-ts/util/dateConvert.ts                    |    52 +
 src-ts/util/formatString.ts                   |    38 +
 src-ts/util/getUrlParams.ts                   |    61 +
 src-ts/util/makeGuid.ts                       |    25 +
 src-ts/util/objectHelpers.ts                  |    35 +
 src-ts/util/provide.ts                        |    36 +
 test-html/compare-test.html                   |     6 +-
 test-html/css/all-ol-style.css                |   162 +
 test-html/css/all-ol-style.less               |     4 +
 test-html/css/layer-swipe.css                 |    11 +
 test-html/css/layer-swipe.less                |    14 +
 test-html/css/legend.less                     |   116 +
 test-html/css/media-control.less              |    68 +
 test-html/css/ol-popup.css                    |    58 +
 test-html/css/ol-popup.less                   |    66 +
 test-html/css/ol.css                          |     1 +
 test-html/here.html                           |    27 +
 test-html/itsMap.html                         |    42 +
 test-html/lib/react-dom.js                    |    42 +
 test-html/lib/react.js                        | 20595 ++++++++++++++++
 test-html/react_test.html                     |    17 +
 test-html/slider-test.html                    |    45 +-
 test/jquery-test.js                           |    23 -
 test/slider-test.js                           |   102 -
 tsconfig.json                                 |    14 +
 webpack.config.js                             |   149 +
 379 files changed, 43364 insertions(+), 74921 deletions(-)
 create mode 100644 .babelrc
 create mode 100644 .esdoc.json
 create mode 100644 definitions/jquery.d.ts
 create mode 100644 definitions/node.d.ts
 delete mode 100644 doc/-_FeatureLayerProperties.html
 delete mode 100644 doc/-_Slider.html
 delete mode 100644 doc/CommonSymbol.html
 delete mode 100644 doc/DayRange.html
 delete mode 100644 doc/ItsLayerCollection.html
 delete mode 100644 doc/LayerBase.html
 delete mode 100644 doc/LayerBaseVector.html
 delete mode 100644 doc/LayerBaseVectorEsri.html
 delete mode 100644 doc/LayerBaseVectorGeoJson.html
 delete mode 100644 doc/LayerBaseXyzTile.html
 delete mode 100644 doc/LayerEsriMapServer.html
 delete mode 100644 doc/LayerEsriTile.html
 delete mode 100644 doc/LayerGroup.html
 delete mode 100644 doc/LayerItsInventory.html
 delete mode 100644 doc/LayerLegend.html
 delete mode 100644 doc/LayerRealEarthTile.html
 delete mode 100644 doc/LayerSwipe.html
 delete mode 100644 doc/LayerVectorRealEarth.html
 delete mode 100644 doc/MapInteractionBase.html
 delete mode 100644 doc/MapMoveCls.html
 delete mode 100644 doc/MapPopupCls.html
 delete mode 100644 doc/RealEarthAnimate.html
 delete mode 100644 doc/RealEarthAnimateTile.html
 delete mode 100644 doc/RealEarthAnimateVector.html
 delete mode 100644 doc/SingleSymbol.html
 delete mode 100644 doc/Sliders.html
 delete mode 100644 doc/SortedFeatures.html
 delete mode 100644 doc/UniqueValueSymbol.html
 delete mode 100644 doc/collections_ItsLayerCollection.js.html
 delete mode 100644 doc/collections_Sliders.js.html
 delete mode 100644 doc/fonts/OpenSans-Bold-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-Bold-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-Bold-webfont.woff
 delete mode 100644 doc/fonts/OpenSans-BoldItalic-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-BoldItalic-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-BoldItalic-webfont.woff
 delete mode 100644 doc/fonts/OpenSans-Italic-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-Italic-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-Italic-webfont.woff
 delete mode 100644 doc/fonts/OpenSans-Light-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-Light-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-Light-webfont.woff
 delete mode 100644 doc/fonts/OpenSans-LightItalic-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-LightItalic-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-LightItalic-webfont.woff
 delete mode 100644 doc/fonts/OpenSans-Regular-webfont.eot
 delete mode 100644 doc/fonts/OpenSans-Regular-webfont.svg
 delete mode 100644 doc/fonts/OpenSans-Regular-webfont.woff
 delete mode 100644 doc/global.html
 delete mode 100644 doc/gulp-helpers.js.html
 delete mode 100644 doc/jquery-plugin_animate-buttons.js.html
 delete mode 100644 doc/jquery-plugin_day-range.js.html
 delete mode 100644 doc/jquery-plugin_range-change.js.html
 delete mode 100644 doc/jquery_floatthead.js.html
 delete mode 100644 doc/layers_LayerBaseVector.js.html
 delete mode 100644 doc/layers_LayerBaseVectorGeoJson.js.html
 delete mode 100644 doc/layers_LayerBaseXyzTile.js.html
 delete mode 100644 doc/layers_LayerEsriMapServer.js.html
 delete mode 100644 doc/layers_LayerEsriTile.js.html
 delete mode 100644 doc/layers_LayerRealEarthTile.js.html
 delete mode 100644 doc/layers_LayerRealEarthVector.js.html
 delete mode 100644 doc/mixin_RealEarthAnimate.js.html
 delete mode 100644 doc/mixin_RealEarthAnimateTile.js.html
 delete mode 100644 doc/mixin_RealEarthAnimateVector.js.html
 delete mode 100644 doc/olHelpers_SortedFeatures.js.html
 delete mode 100644 doc/olHelpers_layerSwipe.js.html
 delete mode 100644 doc/olHelpers_mapInteractionBase.js.html
 delete mode 100644 doc/olHelpers_mapMove.js.html
 delete mode 100644 doc/olHelpers_mapMoveCls.js.html
 delete mode 100644 doc/olHelpers_mapPopup.js.html
 delete mode 100644 doc/olHelpers_propertiesZoomStyle.js.html
 delete mode 100644 doc/olHelpers_quickMap.js.html
 delete mode 100644 doc/olHelpers_quickMapMulti.js.html
 delete mode 100644 doc/olHelpers_zoomResolutionConvert.js.html
 delete mode 100644 doc/scripts/linenumber.js
 delete mode 100644 doc/scripts/prettify/Apache-License-2.0.txt
 delete mode 100644 doc/scripts/prettify/lang-css.js
 delete mode 100644 doc/scripts/prettify/prettify.js
 delete mode 100644 doc/styles/jsdoc-default.css
 delete mode 100644 doc/styles/prettify-jsdoc.css
 delete mode 100644 doc/styles/prettify-tomorrow.css
 delete mode 100644 doc/util_checkDefined.js.html
 delete mode 100644 doc/util_colors.js.html
 delete mode 100644 doc/util_dateConvert.js.html
 delete mode 100644 doc/util_formatString.js.html
 delete mode 100644 doc/util_getUrlParams.js.html
 delete mode 100644 doc/util_makeGuid.js.html
 delete mode 100644 doc/util_objectHelpers.js.html
 delete mode 100644 doc/util_provide.js.html
 create mode 100644 lib-ts/_internalnterfaces.d.ts
 create mode 100644 lib-ts/_internalnterfaces.js
 create mode 100644 lib-ts/_internalnterfaces.js.map
 create mode 100644 lib-ts/_scratch/Hello.d.ts
 create mode 100644 lib-ts/_scratch/Hello.js
 create mode 100644 lib-ts/_scratch/Hello.js.map
 create mode 100644 lib-ts/_test/another.d.ts
 create mode 100644 lib-ts/_test/another.js
 create mode 100644 lib-ts/_test/another.js.map
 create mode 100644 lib-ts/_test/compare-test.d.ts
 create mode 100644 lib-ts/_test/compare-test.js
 create mode 100644 lib-ts/_test/compare-test.js.map
 create mode 100644 lib-ts/_test/itsMap.d.ts
 create mode 100644 lib-ts/_test/itsMap.js
 create mode 100644 lib-ts/_test/itsMap.js.map
 create mode 100644 lib-ts/_test/my_little_test.d.ts
 create mode 100644 lib-ts/_test/my_little_test.js
 create mode 100644 lib-ts/_test/my_little_test.js.map
 create mode 100644 lib-ts/_test/reacttst.d.ts
 create mode 100644 lib-ts/_test/reacttst.js
 create mode 100644 lib-ts/_test/reacttst.js.map
 create mode 100644 lib-ts/_test/slider-test.d.ts
 create mode 100644 lib-ts/_test/slider-test.js
 create mode 100644 lib-ts/_test/slider-test.js.map
 create mode 100644 lib-ts/collections/ItsLayerCollection.d.ts
 create mode 100644 lib-ts/collections/ItsLayerCollection.js
 create mode 100644 lib-ts/collections/ItsLayerCollection.js.map
 create mode 100644 lib-ts/collections/LayerLegend.d.ts
 create mode 100644 lib-ts/collections/LayerLegend.js
 create mode 100644 lib-ts/collections/LayerLegend.js.map
 create mode 100644 lib-ts/collections/Sliders.d.ts
 create mode 100644 lib-ts/collections/Sliders.js
 create mode 100644 lib-ts/collections/Sliders.js.map
 create mode 100644 lib-ts/domUtil/SelectBoxBase.d.ts
 create mode 100644 lib-ts/domUtil/SelectBoxBase.js
 create mode 100644 lib-ts/domUtil/SelectBoxBase.js.map
 create mode 100644 lib-ts/domUtil/animate-buttons.d.ts
 create mode 100644 lib-ts/domUtil/animate-buttons.js
 create mode 100644 lib-ts/domUtil/animate-buttons.js.map
 create mode 100644 lib-ts/domUtil/range-change.d.ts
 create mode 100644 lib-ts/domUtil/range-change.js
 create mode 100644 lib-ts/domUtil/range-change.js.map
 create mode 100644 lib-ts/index.d.ts
 create mode 100644 lib-ts/index.js
 create mode 100644 lib-ts/index.js.map
 create mode 100644 lib-ts/jquery-plugin/animate-buttons.d.ts
 create mode 100644 lib-ts/jquery-plugin/animate-buttons.js
 create mode 100644 lib-ts/jquery-plugin/animate-buttons.js.map
 create mode 100644 lib-ts/jquery-plugin/day-range.d.ts
 create mode 100644 lib-ts/jquery-plugin/day-range.js
 create mode 100644 lib-ts/jquery-plugin/day-range.js.map
 create mode 100644 lib-ts/jquery-plugin/range-change.d.ts
 create mode 100644 lib-ts/jquery-plugin/range-change.js
 create mode 100644 lib-ts/jquery-plugin/range-change.js.map
 create mode 100644 lib-ts/jquery/floatthead.d.ts
 create mode 100644 lib-ts/jquery/floatthead.js
 create mode 100644 lib-ts/jquery/floatthead.js.map
 create mode 100644 lib-ts/layers/LayerBase.d.ts
 create mode 100644 lib-ts/layers/LayerBase.js
 create mode 100644 lib-ts/layers/LayerBase.js.map
 create mode 100644 lib-ts/layers/LayerBaseVector.d.ts
 create mode 100644 lib-ts/layers/LayerBaseVector.js
 create mode 100644 lib-ts/layers/LayerBaseVector.js.map
 create mode 100644 lib-ts/layers/LayerBaseVectorGeoJson.d.ts
 create mode 100644 lib-ts/layers/LayerBaseVectorGeoJson.js
 create mode 100644 lib-ts/layers/LayerBaseVectorGeoJson.js.map
 create mode 100644 lib-ts/layers/LayerEsriMapServer.d.ts
 create mode 100644 lib-ts/layers/LayerEsriMapServer.js
 create mode 100644 lib-ts/layers/LayerEsriMapServer.js.map
 create mode 100644 lib-ts/layers/LayerItsInventory.d.ts
 create mode 100644 lib-ts/layers/LayerItsInventory.js
 create mode 100644 lib-ts/layers/LayerItsInventory.js.map
 create mode 100644 lib-ts/olHelpers/esriToOlStyle.d.ts
 create mode 100644 lib-ts/olHelpers/esriToOlStyle.js
 create mode 100644 lib-ts/olHelpers/esriToOlStyle.js.map
 create mode 100644 lib-ts/olHelpers/extentUtil.d.ts
 create mode 100644 lib-ts/olHelpers/extentUtil.js
 create mode 100644 lib-ts/olHelpers/extentUtil.js.map
 create mode 100644 lib-ts/olHelpers/layerSwipe.d.ts
 create mode 100644 lib-ts/olHelpers/layerSwipe.js
 create mode 100644 lib-ts/olHelpers/layerSwipe.js.map
 create mode 100644 lib-ts/olHelpers/mapInteractionBase.d.ts
 create mode 100644 lib-ts/olHelpers/mapInteractionBase.js
 create mode 100644 lib-ts/olHelpers/mapInteractionBase.js.map
 create mode 100644 lib-ts/olHelpers/mapMove.d.ts
 create mode 100644 lib-ts/olHelpers/mapMove.js
 create mode 100644 lib-ts/olHelpers/mapMove.js.map
 create mode 100644 lib-ts/olHelpers/mapMoveCls.d.ts
 create mode 100644 lib-ts/olHelpers/mapMoveCls.js
 create mode 100644 lib-ts/olHelpers/mapMoveCls.js.map
 create mode 100644 lib-ts/olHelpers/mapPopup.d.ts
 create mode 100644 lib-ts/olHelpers/mapPopup.js
 create mode 100644 lib-ts/olHelpers/mapPopup.js.map
 create mode 100644 lib-ts/olHelpers/mapPopupCls.d.ts
 create mode 100644 lib-ts/olHelpers/mapPopupCls.js
 create mode 100644 lib-ts/olHelpers/mapPopupCls.js.map
 create mode 100644 lib-ts/olHelpers/propertiesZoomStyle.d.ts
 create mode 100644 lib-ts/olHelpers/propertiesZoomStyle.js
 create mode 100644 lib-ts/olHelpers/propertiesZoomStyle.js.map
 create mode 100644 lib-ts/olHelpers/quickMap.d.ts
 create mode 100644 lib-ts/olHelpers/quickMap.js
 create mode 100644 lib-ts/olHelpers/quickMap.js.map
 create mode 100644 lib-ts/olHelpers/quickMapBase.d.ts
 create mode 100644 lib-ts/olHelpers/quickMapBase.js
 create mode 100644 lib-ts/olHelpers/quickMapBase.js.map
 create mode 100644 lib-ts/olHelpers/zoomResolutionConvert.d.ts
 create mode 100644 lib-ts/olHelpers/zoomResolutionConvert.js
 create mode 100644 lib-ts/olHelpers/zoomResolutionConvert.js.map
 create mode 100644 lib-ts/src-ts/_internalnterfaces.d.ts
 create mode 100644 lib-ts/src-ts/_internalnterfaces.js
 create mode 100644 lib-ts/src-ts/_internalnterfaces.js.map
 create mode 100644 lib-ts/src-ts/_test/my_little_test.d.ts
 create mode 100644 lib-ts/src-ts/_test/my_little_test.js
 create mode 100644 lib-ts/src-ts/_test/my_little_test.js.map
 create mode 100644 lib-ts/src-ts/index.d.ts
 create mode 100644 lib-ts/src-ts/index.js
 create mode 100644 lib-ts/src-ts/index.js.map
 create mode 100644 lib-ts/src-ts/layers/LayerBase.d.ts
 create mode 100644 lib-ts/src-ts/layers/LayerBase.js
 create mode 100644 lib-ts/src-ts/layers/LayerBase.js.map
 create mode 100644 lib-ts/src-ts/layers/LayerBaseVector.d.ts
 create mode 100644 lib-ts/src-ts/layers/LayerBaseVector.js
 create mode 100644 lib-ts/src-ts/layers/LayerBaseVector.js.map
 create mode 100644 lib-ts/src-ts/layers/LayerEsriMapServer.d.ts
 create mode 100644 lib-ts/src-ts/layers/LayerEsriMapServer.js
 create mode 100644 lib-ts/src-ts/layers/LayerEsriMapServer.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/esriToOlStyle.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/esriToOlStyle.js
 create mode 100644 lib-ts/src-ts/olHelpers/esriToOlStyle.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/mapInteractionBase.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/mapInteractionBase.js
 create mode 100644 lib-ts/src-ts/olHelpers/mapInteractionBase.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/mapMove.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/mapMove.js
 create mode 100644 lib-ts/src-ts/olHelpers/mapMove.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/mapMoveCls.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/mapMoveCls.js
 create mode 100644 lib-ts/src-ts/olHelpers/mapMoveCls.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopup.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopup.js
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopup.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopupCls.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopupCls.js
 create mode 100644 lib-ts/src-ts/olHelpers/mapPopupCls.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/propertiesZoomStyle.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/propertiesZoomStyle.js
 create mode 100644 lib-ts/src-ts/olHelpers/propertiesZoomStyle.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/quickMap.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/quickMap.js
 create mode 100644 lib-ts/src-ts/olHelpers/quickMap.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/quickMapBase.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/quickMapBase.js
 create mode 100644 lib-ts/src-ts/olHelpers/quickMapBase.js.map
 create mode 100644 lib-ts/src-ts/olHelpers/zoomResolutionConvert.d.ts
 create mode 100644 lib-ts/src-ts/olHelpers/zoomResolutionConvert.js
 create mode 100644 lib-ts/src-ts/olHelpers/zoomResolutionConvert.js.map
 create mode 100644 lib-ts/src-ts/util/checkDefined.d.ts
 create mode 100644 lib-ts/src-ts/util/checkDefined.js
 create mode 100644 lib-ts/src-ts/util/checkDefined.js.map
 create mode 100644 lib-ts/src-ts/util/colors.d.ts
 create mode 100644 lib-ts/src-ts/util/colors.js
 create mode 100644 lib-ts/src-ts/util/colors.js.map
 create mode 100644 lib-ts/src-ts/util/dateConvert.d.ts
 create mode 100644 lib-ts/src-ts/util/dateConvert.js
 create mode 100644 lib-ts/src-ts/util/dateConvert.js.map
 create mode 100644 lib-ts/src-ts/util/formatString.d.ts
 create mode 100644 lib-ts/src-ts/util/formatString.js
 create mode 100644 lib-ts/src-ts/util/formatString.js.map
 create mode 100644 lib-ts/src-ts/util/getUrlParams.d.ts
 create mode 100644 lib-ts/src-ts/util/getUrlParams.js
 create mode 100644 lib-ts/src-ts/util/getUrlParams.js.map
 create mode 100644 lib-ts/src-ts/util/makeGuid.d.ts
 create mode 100644 lib-ts/src-ts/util/makeGuid.js
 create mode 100644 lib-ts/src-ts/util/makeGuid.js.map
 create mode 100644 lib-ts/src-ts/util/objectHelpers.d.ts
 create mode 100644 lib-ts/src-ts/util/objectHelpers.js
 create mode 100644 lib-ts/src-ts/util/objectHelpers.js.map
 create mode 100644 lib-ts/src-ts/util/provide.d.ts
 create mode 100644 lib-ts/src-ts/util/provide.js
 create mode 100644 lib-ts/src-ts/util/provide.js.map
 create mode 100644 lib-ts/src/index.d.ts
 create mode 100644 lib-ts/src/index.js
 create mode 100644 lib-ts/src/index.js.map
 create mode 100644 lib-ts/util/_index.d.ts
 create mode 100644 lib-ts/util/_index.js
 create mode 100644 lib-ts/util/_index.js.map
 create mode 100644 lib-ts/util/checkDefined.d.ts
 create mode 100644 lib-ts/util/checkDefined.js
 create mode 100644 lib-ts/util/checkDefined.js.map
 create mode 100644 lib-ts/util/colors.d.ts
 create mode 100644 lib-ts/util/colors.js
 create mode 100644 lib-ts/util/colors.js.map
 create mode 100644 lib-ts/util/dateConvert.d.ts
 create mode 100644 lib-ts/util/dateConvert.js
 create mode 100644 lib-ts/util/dateConvert.js.map
 create mode 100644 lib-ts/util/formatString.d.ts
 create mode 100644 lib-ts/util/formatString.js
 create mode 100644 lib-ts/util/formatString.js.map
 create mode 100644 lib-ts/util/getUrlParams.d.ts
 create mode 100644 lib-ts/util/getUrlParams.js
 create mode 100644 lib-ts/util/getUrlParams.js.map
 create mode 100644 lib-ts/util/makeGuid.d.ts
 create mode 100644 lib-ts/util/makeGuid.js
 create mode 100644 lib-ts/util/makeGuid.js.map
 create mode 100644 lib-ts/util/objectHelpers.d.ts
 create mode 100644 lib-ts/util/objectHelpers.js
 create mode 100644 lib-ts/util/objectHelpers.js.map
 create mode 100644 lib-ts/util/provide.d.ts
 create mode 100644 lib-ts/util/provide.js
 create mode 100644 lib-ts/util/provide.js.map
 create mode 100644 src-ts/_internalnterfaces.ts
 create mode 100644 src-ts/_scratch/Hello.tsx
 create mode 100644 src-ts/_test/another.ts
 rename test/compare-test.js => src-ts/_test/compare-test.ts (89%)
 create mode 100644 src-ts/_test/itsMap.ts
 create mode 100644 src-ts/_test/my_little_test.ts
 create mode 100644 src-ts/_test/reacttst.tsx
 create mode 100644 src-ts/_test/slider-test.ts
 create mode 100644 src-ts/collections/ItsLayerCollection.ts
 rename doc/collections_LayerLegend.js.html => src-ts/collections/LayerLegend.ts (58%)
 create mode 100644 src-ts/collections/Sliders.ts
 create mode 100644 src-ts/domUtil/SelectBoxBase.ts
 create mode 100644 src-ts/domUtil/animate-buttons.ts
 create mode 100644 src-ts/domUtil/range-change.ts
 create mode 100644 src-ts/gulp-helpers.js
 create mode 100644 src-ts/index.ts
 create mode 100644 src-ts/jquery-plugin/day-range.ts
 create mode 100644 src-ts/jquery/floatthead.ts
 rename doc/layers_LayerBase.js.html => src-ts/layers/LayerBase.ts (55%)
 create mode 100644 src-ts/layers/LayerBaseVector.ts
 rename doc/layers_LayerBaseVectorEsri.js.html => src-ts/layers/LayerBaseVectorEsri.js (56%)
 create mode 100644 src-ts/layers/LayerBaseVectorGeoJson.ts
 create mode 100644 src-ts/layers/LayerBaseXyzTile.js
 create mode 100644 src-ts/layers/LayerEsriMapServer.ts
 create mode 100644 src-ts/layers/LayerEsriTile.js
 rename doc/layers_LayerItsInventory.js.html => src-ts/layers/LayerItsInventory.ts (65%)
 create mode 100644 src-ts/layers/LayerRealEarthTile.js
 create mode 100644 src-ts/layers/LayerRealEarthVector.js
 create mode 100644 src-ts/mixin/RealEarthAnimate.js
 create mode 100644 src-ts/mixin/RealEarthAnimateTile.js
 create mode 100644 src-ts/mixin/RealEarthAnimateVector.js
 create mode 100644 src-ts/olHelpers/SortedFeatures.js
 rename doc/olHelpers_esriToOlStyle.js.html => src-ts/olHelpers/esriToOlStyle.ts (53%)
 create mode 100644 src-ts/olHelpers/extentUtil.ts
 create mode 100644 src-ts/olHelpers/layerSwipe.ts
 create mode 100644 src-ts/olHelpers/mapInteractionBase.ts
 create mode 100644 src-ts/olHelpers/mapMove.ts
 create mode 100644 src-ts/olHelpers/mapMoveCls.ts
 create mode 100644 src-ts/olHelpers/mapPopup.ts
 rename doc/olHelpers_mapPopupCls.js.html => src-ts/olHelpers/mapPopupCls.ts (56%)
 create mode 100644 src-ts/olHelpers/propertiesZoomStyle.ts
 create mode 100644 src-ts/olHelpers/quickMap.ts
 rename doc/olHelpers_quickMapBase.js.html => src-ts/olHelpers/quickMapBase.ts (55%)
 create mode 100644 src-ts/olHelpers/quickMapMulti.js
 create mode 100644 src-ts/olHelpers/zoomResolutionConvert.ts
 create mode 100644 src-ts/util/_index.ts
 create mode 100644 src-ts/util/checkDefined.ts
 create mode 100644 src-ts/util/colors.ts
 create mode 100644 src-ts/util/dateConvert.ts
 create mode 100644 src-ts/util/formatString.ts
 create mode 100644 src-ts/util/getUrlParams.ts
 create mode 100644 src-ts/util/makeGuid.ts
 create mode 100644 src-ts/util/objectHelpers.ts
 create mode 100644 src-ts/util/provide.ts
 create mode 100644 test-html/css/all-ol-style.css
 create mode 100644 test-html/css/all-ol-style.less
 create mode 100644 test-html/css/layer-swipe.css
 create mode 100644 test-html/css/layer-swipe.less
 create mode 100644 test-html/css/legend.less
 create mode 100644 test-html/css/media-control.less
 create mode 100644 test-html/css/ol-popup.css
 create mode 100644 test-html/css/ol-popup.less
 create mode 100644 test-html/css/ol.css
 create mode 100644 test-html/here.html
 create mode 100644 test-html/itsMap.html
 create mode 100644 test-html/lib/react-dom.js
 create mode 100644 test-html/lib/react.js
 create mode 100644 test-html/react_test.html
 delete mode 100644 test/jquery-test.js
 delete mode 100644 test/slider-test.js
 create mode 100644 tsconfig.json
 create mode 100644 webpack.config.js

diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000..5695e7c
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,13 @@
+{
+  "sourceMaps": true,
+  "presets": [
+    "latest"
+  ],
+  "ignore": [
+    "src\\ol\\ol-build.js",
+    "node_modules/**/*/js"
+  ],
+  "plugins": [
+
+  ]
+}
\ No newline at end of file
diff --git a/.esdoc.json b/.esdoc.json
new file mode 100644
index 0000000..9f83726
--- /dev/null
+++ b/.esdoc.json
@@ -0,0 +1,4 @@
+{
+  "source": "./src",
+  "destination": "./doc"
+}
\ No newline at end of file
diff --git a/definitions/jquery.d.ts b/definitions/jquery.d.ts
new file mode 100644
index 0000000..6478529
--- /dev/null
+++ b/definitions/jquery.d.ts
@@ -0,0 +1,3221 @@
+// Type definitions for jQuery 1.10.x / 2.0.x
+// Project: http://jquery.com/
+// Definitions by: Boris Yankov <https://github.com/borisyankov/>, Christian Hoffmeister <https://github.com/choffmeister>, Steve Fenton <https://github.com/Steve-Fenton>, Diullei Gomes <https://github.com/Diullei>, Tass Iliopoulos <https://github.com/tasoili>, Jason Swearingen <https://github.com/jasons-novaleaf>, Sean Hill <https://github.com/seanski>, Guus Goossens <https://github.com/Guuz>, Kelly Summerlin <https://github.com/ksummerlin>, Basarat Ali Syed <https://github.com/basarat>, Nicholas Wolverson <https://github.com/nwolverson>, Derek Cicerone <https://github.com/derekcicerone>, Andrew Gaspar <https://github.com/AndrewGaspar>, James Harrison Fisher <https://github.com/jameshfisher>, Seikichi Kondo <https://github.com/seikichi>, Benjamin Jackman <https://github.com/benjaminjackman>, Poul Sorensen <https://github.com/s093294>, Josh Strobl <https://github.com/JoshStrobl>, John Reilly <https://github.com/johnnyreilly/>, Dick van den Brink <https://github.com/DickvdBrink>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+/* *****************************************************************************
+Copyright (c) Microsoft Corporation. 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
+
+THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+MERCHANTABLITY OR NON-INFRINGEMENT.
+
+See the Apache Version 2.0 License for specific language governing permissions
+and limitations under the License.
+***************************************************************************** */
+
+
+/**
+ * Interface for the AJAX setting that will configure the AJAX request
+ */
+interface JQueryAjaxSettings {
+    /**
+     * The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.
+     */
+    accepts?: any;
+    /**
+     * By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
+     */
+    async?: boolean;
+    /**
+     * A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings objects are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.
+     */
+    beforeSend? (jqXHR: JQueryXHR, settings: JQueryAjaxSettings): any;
+    /**
+     * If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
+     */
+    cache?: boolean;
+    /**
+     * A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request ("success", "notmodified", "error", "timeout", "abort", or "parsererror"). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
+     */
+    complete? (jqXHR: JQueryXHR, textStatus: string): any;
+    /**
+     * An object of string/regular-expression pairs that determine how jQuery will parse the response, given its content type. (version added: 1.5)
+     */
+    contents?: { [key: string]: any; };
+    //According to jQuery.ajax source code, ajax's option actually allows contentType to set to "false"
+    // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/742
+    /**
+     * When sending data to the server, use this content type. Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it is always sent to the server (even if no data is sent). The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.
+     */
+    contentType?: any;
+    /**
+     * This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax).
+     */
+    context?: any;
+    /**
+     * An object containing dataType-to-dataType converters. Each converter's value is a function that returns the transformed value of the response. (version added: 1.5)
+     */
+    converters?: { [key: string]: any; };
+    /**
+     * If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)
+     */
+    crossDomain?: boolean;
+    /**
+     * Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).
+     */
+    data?: any;
+    /**
+     * A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter.
+     */
+    dataFilter? (data: any, ty: any): any;
+    /**
+     * The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). 
+     */
+    dataType?: string;
+    /**
+     * A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.
+     */
+    error? (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any;
+    /**
+     * Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.
+     */
+    global?: boolean;
+    /**
+     * An object of additional header key/value pairs to send along with requests using the XMLHttpRequest transport. The header X-Requested-With: XMLHttpRequest is always added, but its default XMLHttpRequest value can be changed here. Values in the headers setting can also be overwritten from within the beforeSend function. (version added: 1.5)
+     */
+    headers?: { [key: string]: any; };
+    /**
+     * Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the 'etag' specified by the server to catch unmodified data.
+     */
+    ifModified?: boolean;
+    /**
+     * Allow the current environment to be recognized as "local," (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method. (version added: 1.5.1)
+     */
+    isLocal?: boolean;
+    /**
+     * Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url. So {jsonp:'onJSONPLoad'} would result in 'onJSONPLoad=?' passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the "?callback" string to the URL or attempting to use "=?" for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: "callbackName" }
+     */
+    jsonp?: any;
+    /**
+     * Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.
+     */
+    jsonpCallback?: any;
+    /**
+     * The HTTP method to use for the request (e.g. "POST", "GET", "PUT"). (version added: 1.9.0)
+     */
+    method?: string;
+    /**
+     * A mime type to override the XHR mime type. (version added: 1.5.1)
+     */
+    mimeType?: string;
+    /**
+     * A password to be used with XMLHttpRequest in response to an HTTP access authentication request.
+     */
+    password?: string;
+    /**
+     * By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.
+     */
+    processData?: boolean;
+    /**
+     * Only applies when the "script" transport is used (e.g., cross-domain requests with "jsonp" or "script" dataType and "GET" type). Sets the charset attribute on the script tag used in the request. Used when the character set on the local page is not the same as the one on the remote script.
+     */
+    scriptCharset?: string;
+    /**
+     * An object of numeric HTTP codes and functions to be called when the response has the corresponding code. f the request is successful, the status code functions take the same parameters as the success callback; if it results in an error (including 3xx redirect), they take the same parameters as the error callback. (version added: 1.5)
+     */
+    statusCode?: { [key: string]: any; };
+    /**
+     * A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
+     */
+    success? (data: any, textStatus: string, jqXHR: JQueryXHR): any;
+    /**
+     * Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.
+     */
+    timeout?: number;
+    /**
+     * Set this to true if you wish to use the traditional style of param serialization.
+     */
+    traditional?: boolean;
+    /**
+     * The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.
+     */
+    type?: string;
+    /**
+     * A string containing the URL to which the request is sent.
+     */
+    url?: string;
+    /**
+     * A username to be used with XMLHttpRequest in response to an HTTP access authentication request.
+     */
+    username?: string;
+    /**
+     * Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.
+     */
+    xhr?: any;
+    /**
+     * An object of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed. In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it. (version added: 1.5.1)
+     */
+    xhrFields?: { [key: string]: any; };
+}
+
+/**
+ * Interface for the jqXHR object
+ */
+interface JQueryXHR extends XMLHttpRequest, JQueryPromise<any> {
+    /**
+     * The .overrideMimeType() method may be used in the beforeSend() callback function, for example, to modify the response content-type header. As of jQuery 1.5.1, the jqXHR object also contains the overrideMimeType() method (it was available in jQuery 1.4.x, as well, but was temporarily removed in jQuery 1.5). 
+     */
+    overrideMimeType(mimeType: string): any;
+    /**
+     * Cancel the request. 
+     *
+     * @param statusText A string passed as the textStatus parameter for the done callback. Default value: "canceled"
+     */
+    abort(statusText?: string): void;
+    /**
+     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
+     */
+    then<R>(doneCallback: (data: any, textStatus: string, jqXHR: JQueryXHR) => R, failCallback?: (jqXHR: JQueryXHR, textStatus: string, errorThrown: any) => void): JQueryPromise<R>;
+    /**
+     * Property containing the parsed response if the response Content-Type is json
+     */
+    responseJSON?: any;
+    /**
+     * A function to be called if the request fails.
+     */
+    error(xhr: JQueryXHR, textStatus: string, errorThrown: string): void;
+}
+
+/**
+ * Interface for the JQuery callback
+ */
+interface JQueryCallback {
+    /**
+     * Add a callback or a collection of callbacks to a callback list.
+     * 
+     * @param callbacks A function, or array of functions, that are to be added to the callback list.
+     */
+    add(callbacks: Function): JQueryCallback;
+    /**
+     * Add a callback or a collection of callbacks to a callback list.
+     * 
+     * @param callbacks A function, or array of functions, that are to be added to the callback list.
+     */
+    add(callbacks: Function[]): JQueryCallback;
+
+    /**
+     * Disable a callback list from doing anything more.
+     */
+    disable(): JQueryCallback;
+
+    /**
+     * Determine if the callbacks list has been disabled.
+     */
+    disabled(): boolean;
+
+    /**
+     * Remove all of the callbacks from a list.
+     */
+    empty(): JQueryCallback;
+
+    /**
+     * Call all of the callbacks with the given arguments
+     * 
+     * @param arguments The argument or list of arguments to pass back to the callback list.
+     */
+    fire(...arguments: any[]): JQueryCallback;
+
+    /**
+     * Determine if the callbacks have already been called at least once.
+     */
+    fired(): boolean;
+
+    /**
+     * Call all callbacks in a list with the given context and arguments.
+     * 
+     * @param context A reference to the context in which the callbacks in the list should be fired.
+     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.
+     */
+    fireWith(context?: any, args?: any[]): JQueryCallback;
+
+    /**
+     * Determine whether a supplied callback is in a list
+     * 
+     * @param callback The callback to search for.
+     */
+    has(callback: Function): boolean;
+
+    /**
+     * Lock a callback list in its current state.
+     */
+    lock(): JQueryCallback;
+
+    /**
+     * Determine if the callbacks list has been locked.
+     */
+    locked(): boolean;
+
+    /**
+     * Remove a callback or a collection of callbacks from a callback list.
+     * 
+     * @param callbacks A function, or array of functions, that are to be removed from the callback list.
+     */
+    remove(callbacks: Function): JQueryCallback;
+    /**
+     * Remove a callback or a collection of callbacks from a callback list.
+     * 
+     * @param callbacks A function, or array of functions, that are to be removed from the callback list.
+     */
+    remove(callbacks: Function[]): JQueryCallback;
+}
+
+/**
+ * Allows jQuery Promises to interop with non-jQuery promises
+ */
+interface JQueryGenericPromise<T> {
+    /**
+     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
+     * 
+     * @param doneFilter A function that is called when the Deferred is resolved.
+     * @param failFilter An optional function that is called when the Deferred is rejected.
+     */
+    then<U>(doneFilter: (value?: T, ...values: any[]) => U|JQueryPromise<U>, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<U>;
+
+    /**
+     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
+     * 
+     * @param doneFilter A function that is called when the Deferred is resolved.
+     * @param failFilter An optional function that is called when the Deferred is rejected.
+     */
+    then(doneFilter: (value?: T, ...values: any[]) => void, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<void>;
+}
+
+/**
+ * Interface for the JQuery promise/deferred callbacks
+ */
+interface JQueryPromiseCallback<T> {
+    (value?: T, ...args: any[]): void;
+}
+
+interface JQueryPromiseOperator<T, U> {
+    (callback1: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...callbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<U>;
+}
+
+/**
+ * Interface for the JQuery promise, part of callbacks
+ */
+interface JQueryPromise<T> extends JQueryGenericPromise<T> {
+    /**
+     * Determine the current state of a Deferred object.
+     */
+    state(): string;
+    /**
+     * Add handlers to be called when the Deferred object is either resolved or rejected.
+     * 
+     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
+     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
+     */
+    always(alwaysCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...alwaysCallbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object is resolved.
+     * 
+     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
+     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
+     */
+    done(doneCallback1?: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object is rejected.
+     * 
+     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
+     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
+     */
+    fail(failCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...failCallbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object generates progress notifications.
+     * 
+     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
+     */
+    progress(progressCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+
+    // Deprecated - given no typings
+    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;
+}
+
+/**
+ * Interface for the JQuery deferred, part of callbacks
+ */
+interface JQueryDeferred<T> extends JQueryGenericPromise<T> {
+    /**
+     * Determine the current state of a Deferred object.
+     */
+    state(): string;
+    /**
+     * Add handlers to be called when the Deferred object is either resolved or rejected.
+     * 
+     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
+     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
+     */
+    always(alwaysCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...alwaysCallbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object is resolved.
+     * 
+     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
+     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
+     */
+    done(doneCallback1?: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object is rejected.
+     * 
+     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
+     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
+     */
+    fail(failCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...failCallbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object generates progress notifications.
+     * 
+     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
+     */
+    progress(progressCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+
+    /**
+     * Call the progressCallbacks on a Deferred object with the given args.
+     * 
+     * @param args Optional arguments that are passed to the progressCallbacks.
+     */
+    notify(value?: any, ...args: any[]): JQueryDeferred<T>;
+
+    /**
+     * Call the progressCallbacks on a Deferred object with the given context and args.
+     * 
+     * @param context Context passed to the progressCallbacks as the this object.
+     * @param args Optional arguments that are passed to the progressCallbacks.
+     */
+    notifyWith(context: any, value?: any[]): JQueryDeferred<T>;
+
+    /**
+     * Reject a Deferred object and call any failCallbacks with the given args.
+     * 
+     * @param args Optional arguments that are passed to the failCallbacks.
+     */
+    reject(value?: any, ...args: any[]): JQueryDeferred<T>;
+    /**
+     * Reject a Deferred object and call any failCallbacks with the given context and args.
+     * 
+     * @param context Context passed to the failCallbacks as the this object.
+     * @param args An optional array of arguments that are passed to the failCallbacks.
+     */
+    rejectWith(context: any, value?: any[]): JQueryDeferred<T>;
+
+    /**
+     * Resolve a Deferred object and call any doneCallbacks with the given args.
+     * 
+     * @param value First argument passed to doneCallbacks.
+     * @param args Optional subsequent arguments that are passed to the doneCallbacks.
+     */
+    resolve(value?: T, ...args: any[]): JQueryDeferred<T>;
+
+    /**
+     * Resolve a Deferred object and call any doneCallbacks with the given context and args.
+     * 
+     * @param context Context passed to the doneCallbacks as the this object.
+     * @param args An optional array of arguments that are passed to the doneCallbacks.
+     */
+    resolveWith(context: any, value?: T[]): JQueryDeferred<T>;
+
+    /**
+     * Return a Deferred's Promise object.
+     * 
+     * @param target Object onto which the promise methods have to be attached
+     */
+    promise(target?: any): JQueryPromise<T>;
+
+    // Deprecated - given no typings
+    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;
+}
+
+/**
+ * Interface of the JQuery extension of the W3C event object
+ */
+interface BaseJQueryEventObject extends Event {
+    data: any;
+    delegateTarget: Element;
+    isDefaultPrevented(): boolean;
+    isImmediatePropagationStopped(): boolean;
+    isPropagationStopped(): boolean;
+    namespace: string;
+    originalEvent: Event;
+    preventDefault(): any;
+    relatedTarget: Element;
+    result: any;
+    stopImmediatePropagation(): void;
+    stopPropagation(): void;
+    target: Element;
+    pageX: number;
+    pageY: number;
+    which: number;
+    metaKey: boolean;
+}
+
+interface JQueryInputEventObject extends BaseJQueryEventObject {
+    altKey: boolean;
+    ctrlKey: boolean;
+    metaKey: boolean;
+    shiftKey: boolean;
+}
+
+interface JQueryMouseEventObject extends JQueryInputEventObject {
+    button: number;
+    clientX: number;
+    clientY: number;
+    offsetX: number;
+    offsetY: number;
+    pageX: number;
+    pageY: number;
+    screenX: number;
+    screenY: number;
+}
+
+interface JQueryKeyEventObject extends JQueryInputEventObject {
+    char: any;
+    charCode: number;
+    key: any;
+    keyCode: number;
+}
+
+interface JQueryEventObject extends BaseJQueryEventObject, JQueryInputEventObject, JQueryMouseEventObject, JQueryKeyEventObject{
+}
+
+/*
+    Collection of properties of the current browser
+*/
+
+interface JQuerySupport {
+    ajax?: boolean;
+    boxModel?: boolean;
+    changeBubbles?: boolean;
+    checkClone?: boolean;
+    checkOn?: boolean;
+    cors?: boolean;
+    cssFloat?: boolean;
+    hrefNormalized?: boolean;
+    htmlSerialize?: boolean;
+    leadingWhitespace?: boolean;
+    noCloneChecked?: boolean;
+    noCloneEvent?: boolean;
+    opacity?: boolean;
+    optDisabled?: boolean;
+    optSelected?: boolean;
+    scriptEval? (): boolean;
+    style?: boolean;
+    submitBubbles?: boolean;
+    tbody?: boolean;
+}
+
+interface JQueryParam {
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     * 
+     * @param obj An array or object to serialize.
+     */
+    (obj: any): string;
+
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     * 
+     * @param obj An array or object to serialize.
+     * @param traditional A Boolean indicating whether to perform a traditional "shallow" serialization.
+     */
+    (obj: any, traditional: boolean): string;
+}
+
+/**
+ * The interface used to construct jQuery events (with $.Event). It is
+ * defined separately instead of inline in JQueryStatic to allow
+ * overriding the construction function with specific strings
+ * returning specific event objects.
+ */
+interface JQueryEventConstructor {
+    (name: string, eventProperties?: any): JQueryEventObject;
+    new (name: string, eventProperties?: any): JQueryEventObject;
+}
+
+/**
+ * The interface used to specify coordinates.
+ */
+interface JQueryCoordinates {
+    left: number;
+    top: number;
+}
+
+/**
+ * Elements in the array returned by serializeArray()
+ */
+interface JQuerySerializeArrayElement {
+    name: string;
+    value: string;
+}
+
+interface JQueryAnimationOptions { 
+    /**
+     * A string or number determining how long the animation will run.
+     */
+    duration?: any; 
+    /**
+     * A string indicating which easing function to use for the transition.
+     */
+    easing?: string; 
+    /**
+     * A function to call once the animation is complete.
+     */
+    complete?: Function; 
+    /**
+     * A function to be called for each animated property of each animated element. This function provides an opportunity to modify the Tween object to change the value of the property before it is set.
+     */
+    step?: (now: number, tween: any) => any; 
+    /**
+     * A function to be called after each step of the animation, only once per animated element regardless of the number of animated properties. (version added: 1.8)
+     */
+    progress?: (animation: JQueryPromise<any>, progress: number, remainingMs: number) => any; 
+    /**
+     * A function to call when the animation begins. (version added: 1.8)
+     */
+    start?: (animation: JQueryPromise<any>) => any; 
+    /**
+     * A function to be called when the animation completes (its Promise object is resolved). (version added: 1.8)
+     */
+    done?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any; 
+    /**
+     * A function to be called when the animation fails to complete (its Promise object is rejected). (version added: 1.8)
+     */
+    fail?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any; 
+    /**
+     * A function to be called when the animation completes or stops without completing (its Promise object is either resolved or rejected). (version added: 1.8)
+     */
+    always?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any; 
+    /**
+     * A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string. When a custom queue name is used the animation does not automatically start; you must call .dequeue("queuename") to start it.
+     */
+    queue?: any; 
+    /**
+     * A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions. (version added: 1.4)
+     */
+    specialEasing?: Object;
+}
+
+interface JQueryEasingFunction {
+    ( percent: number ): number;
+}
+
+interface JQueryEasingFunctions {
+    [ name: string ]: JQueryEasingFunction;
+    linear: JQueryEasingFunction;
+    swing: JQueryEasingFunction;
+}
+
+/**
+ * Static members of jQuery (those on $ and jQuery themselves)
+ */
+interface JQueryStatic {
+
+    /**
+     * Perform an asynchronous HTTP (Ajax) request.
+     *
+     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
+     */
+    ajax(settings: JQueryAjaxSettings): JQueryXHR;
+    /**
+     * Perform an asynchronous HTTP (Ajax) request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
+     */
+    ajax(url: string, settings?: JQueryAjaxSettings): JQueryXHR;
+
+    /**
+     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
+     *
+     * @param dataTypes An optional string containing one or more space-separated dataTypes
+     * @param handler A handler to set default values for future Ajax requests.
+     */
+    ajaxPrefilter(dataTypes: string, handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;
+    /**
+     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
+     *
+     * @param handler A handler to set default values for future Ajax requests.
+     */
+    ajaxPrefilter(handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;
+
+    ajaxSettings: JQueryAjaxSettings;
+
+     /**
+      * Set default values for future Ajax requests. Its use is not recommended.
+      *
+      * @param options A set of key/value pairs that configure the default Ajax request. All options are optional.
+      */
+    ajaxSetup(options: JQueryAjaxSettings): void;
+
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
+     */
+    get(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
+     */
+    get(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param settings The JQueryAjaxSettings to be used for the request
+     */
+    get(settings : JQueryAjaxSettings): JQueryXHR;
+    /**
+     * Load JSON-encoded data from the server using a GET HTTP request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     */
+    getJSON(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+    /**
+     * Load JSON-encoded data from the server using a GET HTTP request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds.
+     */
+    getJSON(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+    /**
+     * Load a JavaScript file from the server using a GET HTTP request, then execute it.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     */
+    getScript(url: string, success?: (script: string, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     */
+    param: JQueryParam;
+
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
+     */
+    post(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
+     */
+    post(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param settings The JQueryAjaxSettings to be used for the request
+     */
+    post(settings : JQueryAjaxSettings): JQueryXHR;
+    /**
+     * A multi-purpose callbacks list object that provides a powerful way to manage callback lists.
+     *
+     * @param flags An optional list of space-separated flags that change how the callback list behaves.
+     */
+    Callbacks(flags?: string): JQueryCallback;
+
+    /**
+     * Holds or releases the execution of jQuery's ready event.
+     *
+     * @param hold Indicates whether the ready hold is being requested or released
+     */
+    holdReady(hold: boolean): void;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param selector A string containing a selector expression
+     * @param context A DOM Element, Document, or jQuery to use as context
+     */
+    (selector: string, context?: Element|JQuery): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param element A DOM element to wrap in a jQuery object.
+     */
+    (element: Element): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param elementArray An array containing a set of DOM elements to wrap in a jQuery object.
+     */
+    (elementArray: Element[]): JQuery;
+
+    /**
+     * Binds a function to be executed when the DOM has finished loading.
+     *
+     * @param callback A function to execute after the DOM is ready.
+     */
+    (callback: (jQueryAlias?: JQueryStatic) => any): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param object A plain object to wrap in a jQuery object.
+     */
+    (object: {}): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param object An existing jQuery object to clone.
+     */
+    (object: JQuery): JQuery;
+
+    /**
+     * Specify a function to execute when the DOM is fully loaded.
+     */
+    (): JQuery;
+
+    /**
+     * Creates DOM elements on the fly from the provided string of raw HTML.
+     *
+     * @param html A string of HTML to create on the fly. Note that this parses HTML, not XML.
+     * @param ownerDocument A document in which the new elements will be created.
+     */
+    (html: string, ownerDocument?: Document): JQuery;
+
+    /**
+     * Creates DOM elements on the fly from the provided string of raw HTML.
+     *
+     * @param html A string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).
+     * @param attributes An object of attributes, events, and methods to call on the newly-created element.
+     */
+    (html: string, attributes: Object): JQuery;
+
+    /**
+     * Relinquish jQuery's control of the $ variable.
+     *
+     * @param removeAll A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).
+     */
+    noConflict(removeAll?: boolean): JQueryStatic;
+
+    /**
+     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
+     *
+     * @param deferreds One or more Deferred objects, or plain JavaScript objects.
+     */
+    when<T>(...deferreds: Array<T|JQueryPromise<T>/* as JQueryDeferred<T> */>): JQueryPromise<T>;
+
+    /**
+     * Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.
+     */
+    cssHooks: { [key: string]: any; };
+    cssNumber: any;
+
+    /**
+     * Store arbitrary data associated with the specified element. Returns the value that was set.
+     *
+     * @param element The DOM element to associate with the data.
+     * @param key A string naming the piece of data to set.
+     * @param value The new data value.
+     */
+    data<T>(element: Element, key: string, value: T): T;
+    /**
+     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
+     *
+     * @param element The DOM element to associate with the data.
+     * @param key A string naming the piece of data to set.
+     */
+    data(element: Element, key: string): any;
+    /**
+     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
+     *
+     * @param element The DOM element to associate with the data.
+     */
+    data(element: Element): any;
+
+    /**
+     * Execute the next function on the queue for the matched element.
+     *
+     * @param element A DOM element from which to remove and execute a queued function.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    dequeue(element: Element, queueName?: string): void;
+
+    /**
+     * Determine whether an element has any jQuery data associated with it.
+     *
+     * @param element A DOM element to be checked for data.
+     */
+    hasData(element: Element): boolean;
+
+    /**
+     * Show the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element to inspect for an attached queue.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    queue(element: Element, queueName?: string): any[];
+    /**
+     * Manipulate the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element where the array of queued functions is attached.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param newQueue An array of functions to replace the current queue contents.
+     */
+    queue(element: Element, queueName: string, newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element on which to add a queued function.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param callback The new function to add to the queue.
+     */
+    queue(element: Element, queueName: string, callback: Function): JQuery;
+
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param element A DOM element from which to remove data.
+     * @param name A string naming the piece of data to remove.
+     */
+    removeData(element: Element, name?: string): JQuery;
+
+    /**
+     * A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
+     *
+     * @param beforeStart A function that is called just before the constructor returns.
+     */
+    Deferred<T>(beforeStart?: (deferred: JQueryDeferred<T>) => any): JQueryDeferred<T>;
+
+    /**
+     * Effects
+     */
+
+    easing: JQueryEasingFunctions;
+
+    fx: {
+        tick: () => void;
+        /**
+         * The rate (in milliseconds) at which animations fire.
+         */
+        interval: number;
+        stop: () => void;
+        speeds: { slow: number; fast: number; };
+        /**
+         * Globally disable all animations.
+         */
+        off: boolean;
+        step: any;
+    };
+
+    /**
+     * Takes a function and returns a new one that will always have a particular context.
+     *
+     * @param fnction The function whose context will be changed.
+     * @param context The object to which the context (this) of the function should be set.
+     * @param additionalArguments Any number of arguments to be passed to the function referenced in the function argument.
+     */
+    proxy(fnction: (...args: any[]) => any, context: Object, ...additionalArguments: any[]): any;
+    /**
+     * Takes a function and returns a new one that will always have a particular context.
+     *
+     * @param context The object to which the context (this) of the function should be set.
+     * @param name The name of the function whose context will be changed (should be a property of the context object).
+     * @param additionalArguments Any number of arguments to be passed to the function named in the name argument.
+     */
+    proxy(context: Object, name: string, ...additionalArguments: any[]): any;
+
+    Event: JQueryEventConstructor;
+
+    /**
+     * Takes a string and throws an exception containing it.
+     *
+     * @param message The message to send out.
+     */
+    error(message: any): JQuery;
+
+    expr: any;
+    fn: any;  //TODO: Decide how we want to type this
+
+    isReady: boolean;
+
+    // Properties
+    support: JQuerySupport;
+
+    /**
+     * Check to see if a DOM element is a descendant of another DOM element.
+     * 
+     * @param container The DOM element that may contain the other element.
+     * @param contained The DOM element that may be contained by (a descendant of) the other element.
+     */
+    contains(container: Element, contained: Element): boolean;
+
+    /**
+     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
+     * 
+     * @param collection The object or array to iterate over.
+     * @param callback The function that will be executed on every object.
+     */
+    each<T>(
+        collection: T[],
+        callback: (indexInArray: number, valueOfElement: T) => any
+        ): any;
+
+    /**
+     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
+     * 
+     * @param collection The object or array to iterate over.
+     * @param callback The function that will be executed on every object.
+     */
+    each(
+        collection: any,
+        callback: (indexInArray: any, valueOfElement: any) => any
+        ): any;
+
+    /**
+     * Merge the contents of two or more objects together into the first object.
+     *
+     * @param target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.
+     * @param object1 An object containing additional properties to merge in.
+     * @param objectN Additional objects containing properties to merge in.
+     */
+    extend(target: any, object1?: any, ...objectN: any[]): any;
+    /**
+     * Merge the contents of two or more objects together into the first object.
+     *
+     * @param deep If true, the merge becomes recursive (aka. deep copy).
+     * @param target The object to extend. It will receive the new properties.
+     * @param object1 An object containing additional properties to merge in.
+     * @param objectN Additional objects containing properties to merge in.
+     */
+    extend(deep: boolean, target: any, object1?: any, ...objectN: any[]): any;
+
+    /**
+     * Execute some JavaScript code globally.
+     *
+     * @param code The JavaScript code to execute.
+     */
+    globalEval(code: string): any;
+
+    /**
+     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
+     *
+     * @param array The array to search through.
+     * @param func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
+     * @param invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
+     */
+    grep<T>(array: T[], func: (elementOfArray: T, indexInArray: number) => boolean, invert?: boolean): T[];
+
+    /**
+     * Search for a specified value within an array and return its index (or -1 if not found).
+     *
+     * @param value The value to search for.
+     * @param array An array through which to search.
+     * @param fromIndex he index of the array at which to begin the search. The default is 0, which will search the whole array.
+     */
+    inArray<T>(value: T, array: T[], fromIndex?: number): number;
+
+    /**
+     * Determine whether the argument is an array.
+     *
+     * @param obj Object to test whether or not it is an array.
+     */
+    isArray(obj: any): boolean;
+    /**
+     * Check to see if an object is empty (contains no enumerable properties).
+     *
+     * @param obj The object that will be checked to see if it's empty.
+     */
+    isEmptyObject(obj: any): boolean;
+    /**
+     * Determine if the argument passed is a Javascript function object.
+     *
+     * @param obj Object to test whether or not it is a function.
+     */
+    isFunction(obj: any): boolean;
+    /**
+     * Determines whether its argument is a number.
+     *
+     * @param obj The value to be tested.
+     */
+    isNumeric(value: any): boolean;
+    /**
+     * Check to see if an object is a plain object (created using "{}" or "new Object").
+     *
+     * @param obj The object that will be checked to see if it's a plain object.
+     */
+    isPlainObject(obj: any): boolean;
+    /**
+     * Determine whether the argument is a window.
+     *
+     * @param obj Object to test whether or not it is a window.
+     */
+    isWindow(obj: any): boolean;
+    /**
+     * Check to see if a DOM node is within an XML document (or is an XML document).
+     *
+     * @param node he DOM node that will be checked to see if it's in an XML document.
+     */
+    isXMLDoc(node: Node): boolean;
+
+    /**
+     * Convert an array-like object into a true JavaScript array.
+     * 
+     * @param obj Any object to turn into a native Array.
+     */
+    makeArray(obj: any): any[];
+
+    /**
+     * Translate all items in an array or object to new array of items.
+     * 
+     * @param array The Array to translate.
+     * @param callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.
+     */
+    map<T, U>(array: T[], callback: (elementOfArray: T, indexInArray: number) => U): U[];
+    /**
+     * Translate all items in an array or object to new array of items.
+     * 
+     * @param arrayOrObject The Array or Object to translate.
+     * @param callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.
+     */
+    map(arrayOrObject: any, callback: (value: any, indexOrKey: any) => any): any;
+
+    /**
+     * Merge the contents of two arrays together into the first array.
+     * 
+     * @param first The first array to merge, the elements of second added.
+     * @param second The second array to merge into the first, unaltered.
+     */
+    merge<T>(first: T[], second: T[]): T[];
+
+    /**
+     * An empty function.
+     */
+    noop(): any;
+
+    /**
+     * Return a number representing the current time.
+     */
+    now(): number;
+
+    /**
+     * Takes a well-formed JSON string and returns the resulting JavaScript object.
+     * 
+     * @param json The JSON string to parse.
+     */
+    parseJSON(json: string): any;
+
+    /**
+     * Parses a string into an XML document.
+     *
+     * @param data a well-formed XML string to be parsed
+     */
+    parseXML(data: string): XMLDocument;
+
+    /**
+     * Remove the whitespace from the beginning and end of a string.
+     * 
+     * @param str Remove the whitespace from the beginning and end of a string.
+     */
+    trim(str: string): string;
+
+    /**
+     * Determine the internal JavaScript [[Class]] of an object.
+     * 
+     * @param obj Object to get the internal JavaScript [[Class]] of.
+     */
+    type(obj: any): string;
+
+    /**
+     * Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.
+     * 
+     * @param array The Array of DOM elements.
+     */
+    unique(array: Element[]): Element[];
+
+    /**
+     * Parses a string into an array of DOM nodes.
+     *
+     * @param data HTML string to be parsed
+     * @param context DOM element to serve as the context in which the HTML fragment will be created
+     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
+     */
+    parseHTML(data: string, context?: HTMLElement, keepScripts?: boolean): any[];
+
+    /**
+     * Parses a string into an array of DOM nodes.
+     *
+     * @param data HTML string to be parsed
+     * @param context DOM element to serve as the context in which the HTML fragment will be created
+     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
+     */
+    parseHTML(data: string, context?: Document, keepScripts?: boolean): any[];
+}
+
+/**
+ * The jQuery instance members
+ */
+interface JQuery {
+    /**
+     * Register a handler to be called when Ajax requests complete. This is an AjaxEvent.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxComplete(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: any) => any): JQuery;
+    /**
+     * Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxError(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxSettings: JQueryAjaxSettings, thrownError: any) => any): JQuery;
+    /**
+     * Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxSend(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxOptions: JQueryAjaxSettings) => any): JQuery;
+    /**
+     * Register a handler to be called when the first Ajax request begins. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxStart(handler: () => any): JQuery;
+    /**
+     * Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxStop(handler: () => any): JQuery;
+    /**
+     * Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     */
+    ajaxSuccess(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: JQueryAjaxSettings) => any): JQuery;
+
+    /**
+     * Load data from the server and place the returned HTML into the matched element.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param complete A callback function that is executed when the request completes.
+     */
+    load(url: string, data?: string|Object, complete?: (responseText: string, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any): JQuery;
+
+    /**
+     * Encode a set of form elements as a string for submission.
+     */
+    serialize(): string;
+    /**
+     * Encode a set of form elements as an array of names and values.
+     */
+    serializeArray(): JQuerySerializeArrayElement[];
+
+    /**
+     * Adds the specified class(es) to each of the set of matched elements.
+     *
+     * @param className One or more space-separated classes to be added to the class attribute of each matched element.
+     */
+    addClass(className: string): JQuery;
+    /**
+     * Adds the specified class(es) to each of the set of matched elements.
+     *
+     * @param function A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.
+     */
+    addClass(func: (index: number, className: string) => string): JQuery;
+
+    /**
+     * Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
+     */
+    addBack(selector?: string): JQuery;
+
+    /**
+     * Get the value of an attribute for the first element in the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to get.
+     */
+    attr(attributeName: string): string;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to set.
+     * @param value A value to set for the attribute.
+     */
+    attr(attributeName: string, value: string|number): JQuery;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to set.
+     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.
+     */
+    attr(attributeName: string, func: (index: number, attr: string) => string|number): JQuery;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributes An object of attribute-value pairs to set.
+     */
+    attr(attributes: Object): JQuery;
+    
+    /**
+     * Determine whether any of the matched elements are assigned the given class.
+     *
+     * @param className The class name to search for.
+     */
+    hasClass(className: string): boolean;
+
+    /**
+     * Get the HTML contents of the first element in the set of matched elements.
+     */
+    html(): string;
+    /**
+     * Set the HTML contents of each element in the set of matched elements.
+     *
+     * @param htmlString A string of HTML to set as the content of each matched element.
+     */
+    html(htmlString: string): JQuery;
+    /**
+     * Set the HTML contents of each element in the set of matched elements.
+     *
+     * @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.
+     */
+    html(func: (index: number, oldhtml: string) => string): JQuery;
+    /**
+     * Set the HTML contents of each element in the set of matched elements.
+     *
+     * @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.
+     */
+
+    /**
+     * Get the value of a property for the first element in the set of matched elements.
+     *
+     * @param propertyName The name of the property to get.
+     */
+    prop(propertyName: string): any;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param propertyName The name of the property to set.
+     * @param value A value to set for the property.
+     */
+    prop(propertyName: string, value: string|number|boolean): JQuery;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param properties An object of property-value pairs to set.
+     */
+    prop(properties: Object): JQuery;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param propertyName The name of the property to set.
+     * @param func A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.
+     */
+    prop(propertyName: string, func: (index: number, oldPropertyValue: any) => any): JQuery;
+
+    /**
+     * Remove an attribute from each element in the set of matched elements.
+     *
+     * @param attributeName An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.
+     */
+    removeAttr(attributeName: string): JQuery;
+
+    /**
+     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
+     *
+     * @param className One or more space-separated classes to be removed from the class attribute of each matched element.
+     */
+    removeClass(className?: string): JQuery;
+    /**
+     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
+     *
+     * @param function A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.
+     */
+    removeClass(func: (index: number, className: string) => string): JQuery;
+
+    /**
+     * Remove a property for the set of matched elements.
+     *
+     * @param propertyName The name of the property to remove.
+     */
+    removeProp(propertyName: string): JQuery;
+
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param className One or more class names (separated by spaces) to be toggled for each element in the matched set.
+     * @param swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
+     */
+    toggleClass(className: string, swtch?: boolean): JQuery;
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param swtch A boolean value to determine whether the class should be added or removed.
+     */
+    toggleClass(swtch?: boolean): JQuery;
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param func A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.
+     * @param swtch A boolean value to determine whether the class should be added or removed.
+     */
+    toggleClass(func: (index: number, className: string, swtch: boolean) => string, swtch?: boolean): JQuery;
+
+    /**
+     * Get the current value of the first element in the set of matched elements.
+     */
+    val(): any;
+    /**
+     * Set the value of each element in the set of matched elements.
+     *
+     * @param value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
+     */
+    val(value: string|string[]|number): JQuery;
+    /**
+     * Set the value of each element in the set of matched elements.
+     *
+     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
+     */
+    val(func: (index: number, value: string) => string): JQuery;
+
+
+    /**
+     * Get the value of style properties for the first element in the set of matched elements.
+     *
+     * @param propertyName A CSS property.
+     */
+    css(propertyName: string): string;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param propertyName A CSS property name.
+     * @param value A value to set for the property.
+     */
+    css(propertyName: string, value: string|number): JQuery;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param propertyName A CSS property name.
+     * @param value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
+     */
+    css(propertyName: string, value: (index: number, value: string) => string|number): JQuery;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param properties An object of property-value pairs to set.
+     */
+    css(properties: Object): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements.
+     */
+    height(): number;
+    /**
+     * Set the CSS height of every matched element.
+     *
+     * @param value An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).
+     */
+    height(value: number|string): JQuery;
+    /**
+     * Set the CSS height of every matched element.
+     *
+     * @param func A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.
+     */
+    height(func: (index: number, height: number) => number|string): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements, including padding but not border.
+     */
+    innerHeight(): number;
+
+    /**
+     * Sets the inner height on elements in the set of matched elements, including padding but not border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     */
+    innerHeight(height: number|string): JQuery;
+    
+    /**
+     * Get the current computed width for the first element in the set of matched elements, including padding but not border.
+     */
+    innerWidth(): number;
+
+    /**
+     * Sets the inner width on elements in the set of matched elements, including padding but not border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     */
+    innerWidth(width: number|string): JQuery;
+    
+    /**
+     * Get the current coordinates of the first element in the set of matched elements, relative to the document.
+     */
+    offset(): JQueryCoordinates;
+    /**
+     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     *
+     * @param coordinates An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     */
+    offset(coordinates: JQueryCoordinates): JQuery;
+    /**
+     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     *
+     * @param func A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.
+     */
+    offset(func: (index: number, coords: JQueryCoordinates) => JQueryCoordinates): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements.
+     *
+     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
+     */
+    outerHeight(includeMargin?: boolean): number;
+
+    /**
+     * Sets the outer height on elements in the set of matched elements, including padding and border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     */
+    outerHeight(height: number|string): JQuery;
+
+    /**
+     * Get the current computed width for the first element in the set of matched elements, including padding and border.
+     *
+     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
+     */
+    outerWidth(includeMargin?: boolean): number;
+
+    /**
+     * Sets the outer width on elements in the set of matched elements, including padding and border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     */
+    outerWidth(width: number|string): JQuery;
+
+    /**
+     * Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.
+     */
+    position(): JQueryCoordinates;
+
+    /**
+     * Get the current horizontal position of the scroll bar for the first element in the set of matched elements or set the horizontal position of the scroll bar for every matched element.
+     */
+    scrollLeft(): number;
+    /**
+     * Set the current horizontal position of the scroll bar for each of the set of matched elements.
+     *
+     * @param value An integer indicating the new position to set the scroll bar to.
+     */
+    scrollLeft(value: number): JQuery;
+
+    /**
+     * Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element.
+     */
+    scrollTop(): number;
+    /**
+     * Set the current vertical position of the scroll bar for each of the set of matched elements.
+     *
+     * @param value An integer indicating the new position to set the scroll bar to.
+     */
+    scrollTop(value: number): JQuery;
+
+    /**
+     * Get the current computed width for the first element in the set of matched elements.
+     */
+    width(): number;
+    /**
+     * Set the CSS width of each element in the set of matched elements.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     */
+    width(value: number|string): JQuery;
+    /**
+     * Set the CSS width of each element in the set of matched elements.
+     *
+     * @param func A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.
+     */
+    width(func: (index: number, width: number) => number|string): JQuery;
+
+    /**
+     * Remove from the queue all items that have not yet been run.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    clearQueue(queueName?: string): JQuery;
+
+    /**
+     * Store arbitrary data associated with the matched elements.
+     *
+     * @param key A string naming the piece of data to set.
+     * @param value The new data value; it can be any Javascript type including Array or Object.
+     */
+    data(key: string, value: any): JQuery;
+    /**
+     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
+     *
+     * @param key Name of the data stored.
+     */
+    data(key: string): any;
+    /**
+     * Store arbitrary data associated with the matched elements.
+     *
+     * @param obj An object of key-value pairs of data to update.
+     */
+    data(obj: { [key: string]: any; }): JQuery;
+    /**
+     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
+     */
+    data(): any;
+
+    /**
+     * Execute the next function on the queue for the matched elements.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    dequeue(queueName?: string): JQuery;
+
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param name A string naming the piece of data to delete or space-separated string naming the pieces of data to delete.
+     */
+    removeData(name: string): JQuery;
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param list An array of strings naming the pieces of data to delete.
+     */
+    removeData(list: string[]): JQuery;
+    /**
+     * Remove all previously-stored piece of data.
+     */
+    removeData(): JQuery;
+
+    /**
+     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.
+     *
+     * @param type The type of queue that needs to be observed. (default: fx)
+     * @param target Object onto which the promise methods have to be attached
+     */
+    promise(type?: string, target?: Object): JQueryPromise<any>;
+
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    animate(properties: Object, duration?: string|number, complete?: Function): JQuery;
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition. (default: swing)
+     * @param complete A function to call once the animation is complete.
+     */
+    animate(properties: Object, duration?: string|number, easing?: string, complete?: Function): JQuery;
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param options A map of additional options to pass to the method.
+     */
+    animate(properties: Object, options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Set a timer to delay execution of subsequent items in the queue.
+     *
+     * @param duration An integer indicating the number of milliseconds to delay execution of the next item in the queue.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    delay(duration: number, queueName?: string): JQuery;
+
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeIn(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeIn(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    fadeIn(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeOut(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeOut(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    fadeOut(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Adjust the opacity of the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param opacity A number between 0 and 1 denoting the target opacity.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeTo(duration: string|number, opacity: number, complete?: Function): JQuery;
+    /**
+     * Adjust the opacity of the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param opacity A number between 0 and 1 denoting the target opacity.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeTo(duration: string|number, opacity: number, easing?: string, complete?: Function): JQuery;
+
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeToggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    fadeToggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    fadeToggle(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.
+     *
+     * @param queue The name of the queue in which to stop animations.
+     */
+    finish(queue?: string): JQuery;
+
+    /**
+     * Hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    hide(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    hide(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    hide(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    show(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    show(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    show(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideDown(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideDown(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    slideDown(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideToggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideToggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    slideToggle(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideUp(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    slideUp(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    slideUp(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Stop the currently-running animation on the matched elements.
+     *
+     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
+     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
+     */
+    stop(clearQueue?: boolean, jumpToEnd?: boolean): JQuery;
+    /**
+     * Stop the currently-running animation on the matched elements.
+     *
+     * @param queue The name of the queue in which to stop animations.
+     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
+     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
+     */
+    stop(queue?: string, clearQueue?: boolean, jumpToEnd?: boolean): JQuery;
+
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     */
+    toggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     */
+    toggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     */
+    toggle(options: JQueryAnimationOptions): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param showOrHide A Boolean indicating whether to show or hide the elements.
+     */
+    toggle(showOrHide: boolean): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements.
+     * 
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    bind(eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     * 
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    bind(eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     * 
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
+     */
+    bind(eventType: string, eventData: any, preventBubble: boolean): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     * 
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
+     */
+    bind(eventType: string, preventBubble: boolean): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     * 
+     * @param events An object containing one or more DOM event types and functions to execute for them.
+     */
+    bind(events: any): JQuery;
+
+    /**
+     * Trigger the "blur" event on an element
+     */
+    blur(): JQuery;
+    /**
+     * Bind an event handler to the "blur" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    blur(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "blur" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    blur(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "change" event on an element.
+     */
+    change(): JQuery;
+    /**
+     * Bind an event handler to the "change" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    change(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "change" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    change(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "click" event on an element.
+     */
+    click(): JQuery;
+    /**
+     * Bind an event handler to the "click" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     */
+    click(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "click" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    click(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "dblclick" event on an element.
+     */
+    dblclick(): JQuery;
+    /**
+     * Bind an event handler to the "dblclick" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    dblclick(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "dblclick" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    dblclick(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    delegate(selector: any, eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    delegate(selector: any, eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focus" event on an element.
+     */
+    focus(): JQuery;
+    /**
+     * Bind an event handler to the "focus" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focus(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focus" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focus(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focusin" event on an element.
+     */
+    focusin(): JQuery;
+    /**
+     * Bind an event handler to the "focusin" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focusin(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focusin" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focusin(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focusout" event on an element.
+     */
+    focusout(): JQuery;
+    /**
+     * Bind an event handler to the "focusout" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focusout(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focusout" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    focusout(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.
+     *
+     * @param handlerIn A function to execute when the mouse pointer enters the element.
+     * @param handlerOut A function to execute when the mouse pointer leaves the element.
+     */
+    hover(handlerIn: (eventObject: JQueryEventObject) => any, handlerOut: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements.
+     *
+     * @param handlerInOut A function to execute when the mouse pointer enters or leaves the element.
+     */
+    hover(handlerInOut: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keydown" event on an element.
+     */
+    keydown(): JQuery;
+    /**
+     * Bind an event handler to the "keydown" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keydown(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keydown" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keydown(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keypress" event on an element.
+     */
+    keypress(): JQuery;
+    /**
+     * Bind an event handler to the "keypress" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keypress(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keypress" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keypress(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keyup" event on an element.
+     */
+    keyup(): JQuery;
+    /**
+     * Bind an event handler to the "keyup" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keyup(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keyup" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    keyup(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Bind an event handler to the "load" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    load(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "load" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    load(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mousedown" event on an element.
+     */
+    mousedown(): JQuery;
+    /**
+     * Bind an event handler to the "mousedown" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mousedown(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mousedown" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mousedown(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseenter" event on an element.
+     */
+    mouseenter(): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse enters an element.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseenter(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse enters an element.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseenter(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseleave" event on an element.
+     */
+    mouseleave(): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse leaves an element.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseleave(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse leaves an element.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseleave(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mousemove" event on an element.
+     */
+    mousemove(): JQuery;
+    /**
+     * Bind an event handler to the "mousemove" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mousemove(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mousemove" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mousemove(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseout" event on an element.
+     */
+    mouseout(): JQuery;
+    /**
+     * Bind an event handler to the "mouseout" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseout(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseout" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseout(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseover" event on an element.
+     */
+    mouseover(): JQuery;
+    /**
+     * Bind an event handler to the "mouseover" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseover(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseover" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseover(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseup" event on an element.
+     */
+    mouseup(): JQuery;
+    /**
+     * Bind an event handler to the "mouseup" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseup(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseup" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    mouseup(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Remove an event handler.
+     */
+    off(): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
+     * @param handler A handler function previously attached for the event(s), or the special value false.
+     */
+    off(events: string, selector?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param handler A handler function previously attached for the event(s), or the special value false. Takes handler with extra args that can be attached with on().
+     */
+    off(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param handler A handler function previously attached for the event(s), or the special value false.
+     */
+    off(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).
+     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
+     */
+    off(events: { [key: string]: any; }, selector?: string): JQuery;
+
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. Rest parameter args is for optional parameters passed to jQuery.trigger(). Note that the actual parameters on the event handler function must be marked as optional (? syntax).
+     */
+    on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+    */
+    on(events: string, data : any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     */
+    on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     */
+    on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     */
+    on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     */
+    on(events: { [key: string]: any; }, data?: any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
+     * @param handler A function to execute at the time the event is triggered.
+     */
+    one(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
+     * @param data An object containing data that will be passed to the event handler.
+     * @param handler A function to execute at the time the event is triggered.
+     */
+    one(events: string, data: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     */
+    one(events: string, selector: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     */
+    one(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     */
+    one(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     */
+    one(events: { [key: string]: any; }, data?: any): JQuery;
+
+
+    /**
+     * Specify a function to execute when the DOM is fully loaded.
+     *
+     * @param handler A function to execute after the DOM is ready.
+     */
+    ready(handler: (jQueryAlias?: JQueryStatic) => any): JQuery;
+
+    /**
+     * Trigger the "resize" event on an element.
+     */
+    resize(): JQuery;
+    /**
+     * Bind an event handler to the "resize" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    resize(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "resize" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    resize(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "scroll" event on an element.
+     */
+    scroll(): JQuery;
+    /**
+     * Bind an event handler to the "scroll" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    scroll(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "scroll" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    scroll(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "select" event on an element.
+     */
+    select(): JQuery;
+    /**
+     * Bind an event handler to the "select" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    select(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "select" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    select(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "submit" event on an element.
+     */
+    submit(): JQuery;
+    /**
+     * Bind an event handler to the "submit" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     */
+    submit(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "submit" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     */
+    submit(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Execute all handlers and behaviors attached to the matched elements for the given event type.
+     * 
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param extraParameters Additional parameters to pass along to the event handler.
+     */
+    trigger(eventType: string, extraParameters?: any[]|Object): JQuery;
+    /**
+     * Execute all handlers and behaviors attached to the matched elements for the given event type.
+     * 
+     * @param event A jQuery.Event object.
+     * @param extraParameters Additional parameters to pass along to the event handler.
+     */
+    trigger(event: JQueryEventObject, extraParameters?: any[]|Object): JQuery;
+
+    /**
+     * Execute all handlers attached to an element for an event.
+     * 
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param extraParameters An array of additional parameters to pass along to the event handler.
+     */
+    triggerHandler(eventType: string, ...extraParameters: any[]): Object;
+
+    /**
+     * Execute all handlers attached to an element for an event.
+     * 
+     * @param event A jQuery.Event object.
+     * @param extraParameters An array of additional parameters to pass along to the event handler.
+     */
+    triggerHandler(event: JQueryEventObject, ...extraParameters: any[]): Object;
+
+    /**
+     * Remove a previously-attached event handler from the elements.
+     * 
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param handler The function that is to be no longer executed.
+     */
+    unbind(eventType?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove a previously-attached event handler from the elements.
+     * 
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param fls Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).
+     */
+    unbind(eventType: string, fls: boolean): JQuery;
+    /**
+     * Remove a previously-attached event handler from the elements.
+     * 
+     * @param evt A JavaScript event object as passed to an event handler.
+     */
+    unbind(evt: any): JQuery;
+
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     */
+    undelegate(): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     * 
+     * @param selector A selector which will be used to filter the event results.
+     * @param eventType A string containing a JavaScript event type, such as "click" or "keydown"
+     * @param handler A function to execute at the time the event is triggered.
+     */
+    undelegate(selector: string, eventType: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     * 
+     * @param selector A selector which will be used to filter the event results.
+     * @param events An object of one or more event types and previously bound functions to unbind from them.
+     */
+    undelegate(selector: string, events: Object): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     * 
+     * @param namespace A string containing a namespace to unbind all events from.
+     */
+    undelegate(namespace: string): JQuery;
+
+    /**
+     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
+     * 
+     * @param handler A function to execute when the event is triggered.
+     */
+    unload(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
+     * 
+     * @param eventData A plain object of data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    unload(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. (DEPRECATED from v1.10)
+     */
+    context: Element;
+
+    jquery: string;
+
+    /**
+     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
+     * 
+     * @param handler A function to execute when the event is triggered.
+     */
+    error(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
+     * 
+     * @param eventData A plain object of data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     */
+    error(eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Add a collection of DOM elements onto the jQuery stack.
+     * 
+     * @param elements An array of elements to push onto the stack and make into a new jQuery object.
+     */
+    pushStack(elements: any[]): JQuery;
+    /**
+     * Add a collection of DOM elements onto the jQuery stack.
+     * 
+     * @param elements An array of elements to push onto the stack and make into a new jQuery object.
+     * @param name The name of a jQuery method that generated the array of elements.
+     * @param arguments The arguments that were passed in to the jQuery method (for serialization).
+     */
+    pushStack(elements: any[], name: string, arguments: any[]): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, after each element in the set of matched elements.
+     * 
+     * param content1 HTML string, DOM element, array of elements, or jQuery object to insert after each element in the set of matched elements.
+     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.
+     */
+    after(content1: JQuery|any[]|Element|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, after each element in the set of matched elements.
+     * 
+     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     */
+    after(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
+     * 
+     * param content1 DOM element, array of elements, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.
+     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.
+     */
+    append(content1: JQuery|any[]|Element|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
+     * 
+     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
+     */
+    append(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements to the end of the target.
+     * 
+     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.
+     */
+    appendTo(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, before each element in the set of matched elements.
+     * 
+     * param content1 HTML string, DOM element, array of elements, or jQuery object to insert before each element in the set of matched elements.
+     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.
+     */
+    before(content1: JQuery|any[]|Element|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, before each element in the set of matched elements.
+     * 
+     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     */
+    before(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Create a deep copy of the set of matched elements.
+     * 
+     * param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
+     * param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
+     */
+    clone(withDataAndEvents?: boolean, deepWithDataAndEvents?: boolean): JQuery;
+
+    /**
+     * Remove the set of matched elements from the DOM.
+     * 
+     * param selector A selector expression that filters the set of matched elements to be removed.
+     */
+    detach(selector?: string): JQuery;
+
+    /**
+     * Remove all child nodes of the set of matched elements from the DOM.
+     */
+    empty(): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements after the target.
+     * 
+     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.
+     */
+    insertAfter(target: JQuery|any[]|Element|Text|string): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements before the target.
+     * 
+     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.
+     */
+    insertBefore(target: JQuery|any[]|Element|Text|string): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
+     * 
+     * param content1 DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.
+     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.
+     */
+    prepend(content1: JQuery|any[]|Element|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
+     * 
+     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
+     */
+    prepend(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements to the beginning of the target.
+     * 
+     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.
+     */
+    prependTo(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Remove the set of matched elements from the DOM.
+     * 
+     * @param selector A selector expression that filters the set of matched elements to be removed.
+     */
+    remove(selector?: string): JQuery;
+
+    /**
+     * Replace each target element with the set of matched elements.
+     * 
+     * @param target A selector string, jQuery object, DOM element, or array of elements indicating which element(s) to replace.
+     */
+    replaceAll(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
+     * 
+     * param newContent The content to insert. May be an HTML string, DOM element, array of DOM elements, or jQuery object.
+     */
+    replaceWith(newContent: JQuery|any[]|Element|Text|string): JQuery;
+    /**
+     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
+     * 
+     * param func A function that returns content with which to replace the set of matched elements.
+     */
+    replaceWith(func: () => Element|JQuery): JQuery;
+
+    /**
+     * Get the combined text contents of each element in the set of matched elements, including their descendants.
+     */
+    text(): string;
+    /**
+     * Set the content of each element in the set of matched elements to the specified text.
+     * 
+     * @param text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
+     */
+    text(text: string|number|boolean): JQuery;
+    /**
+     * Set the content of each element in the set of matched elements to the specified text.
+     * 
+     * @param func A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.
+     */
+    text(func: (index: number, text: string) => string): JQuery;
+
+    /**
+     * Retrieve all the elements contained in the jQuery set, as an array.
+     */
+    toArray(): any[];
+
+    /**
+     * Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.
+     */
+    unwrap(): JQuery;
+
+    /**
+     * Wrap an HTML structure around each element in the set of matched elements.
+     * 
+     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
+     */
+    wrap(wrappingElement: JQuery|Element|string): JQuery;
+    /**
+     * Wrap an HTML structure around each element in the set of matched elements.
+     * 
+     * @param func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     */
+    wrap(func: (index: number) => string|JQuery): JQuery;
+
+    /**
+     * Wrap an HTML structure around all elements in the set of matched elements.
+     * 
+     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
+     */
+    wrapAll(wrappingElement: JQuery|Element|string): JQuery;
+    wrapAll(func: (index: number) => string): JQuery;
+
+    /**
+     * Wrap an HTML structure around the content of each element in the set of matched elements.
+     * 
+     * @param wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.
+     */
+    wrapInner(wrappingElement: JQuery|Element|string): JQuery;
+    /**
+     * Wrap an HTML structure around the content of each element in the set of matched elements.
+     * 
+     * @param func A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     */
+    wrapInner(func: (index: number) => string): JQuery;
+
+    /**
+     * Iterate over a jQuery object, executing a function for each matched element.
+     * 
+     * @param func A function to execute for each matched element.
+     */
+    each(func: (index: number, elem: Element) => any): JQuery;
+
+    /**
+     * Retrieve one of the elements matched by the jQuery object.
+     * 
+     * @param index A zero-based integer indicating which element to retrieve.
+     */
+    get(index: number): HTMLElement;
+    /**
+     * Retrieve the elements matched by the jQuery object.
+     */
+    get(): any[];
+
+    /**
+     * Search for a given element from among the matched elements.
+     */
+    index(): number;
+    /**
+     * Search for a given element from among the matched elements.
+     * 
+     * @param selector A selector representing a jQuery collection in which to look for an element.
+     */
+    index(selector: string|JQuery|Element): number;
+
+    /**
+     * The number of elements in the jQuery object.
+     */
+    length: number;
+    /**
+     * A selector representing selector passed to jQuery(), if any, when creating the original set.
+     * version deprecated: 1.7, removed: 1.9
+     */
+    selector: string;
+    [index: string]: any;
+    [index: number]: HTMLElement;
+
+    /**
+     * Add elements to the set of matched elements.
+     * 
+     * @param selector A string representing a selector expression to find additional elements to add to the set of matched elements.
+     * @param context The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.
+     */
+    add(selector: string, context?: Element): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     * 
+     * @param elements One or more elements to add to the set of matched elements.
+     */
+    add(...elements: Element[]): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     * 
+     * @param html An HTML fragment to add to the set of matched elements.
+     */
+    add(html: string): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     * 
+     * @param obj An existing jQuery object to add to the set of matched elements.
+     */
+    add(obj: JQuery): JQuery;
+
+    /**
+     * Get the children of each element in the set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    children(selector?: string): JQuery;
+
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    closest(selector: string): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
+     */
+    closest(selector: string, context?: Element): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     * 
+     * @param obj A jQuery object to match elements against.
+     */
+    closest(obj: JQuery): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     * 
+     * @param element An element to match elements against.
+     */
+    closest(element: Element): JQuery;
+
+    /**
+     * Get an array of all the elements and selectors matched against the current element up through the DOM tree.
+     * 
+     * @param selectors An array or string containing a selector expression to match elements against (can also be a jQuery object).
+     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
+     */
+    closest(selectors: any, context?: Element): any[];
+
+    /**
+     * Get the children of each element in the set of matched elements, including text and comment nodes.
+     */
+    contents(): JQuery;
+
+    /**
+     * End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
+     */
+    end(): JQuery;
+
+    /**
+     * Reduce the set of matched elements to the one at the specified index.
+     * 
+     * @param index An integer indicating the 0-based position of the element. OR An integer indicating the position of the element, counting backwards from the last element in the set.
+     *  
+     */
+    eq(index: number): JQuery;
+
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     * 
+     * @param selector A string containing a selector expression to match the current set of elements against.
+     */
+    filter(selector: string): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     * 
+     * @param func A function used as a test for each element in the set. this is the current DOM element.
+     */
+    filter(func: (index: number, element: Element) => any): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     * 
+     * @param element An element to match the current set of elements against.
+     */
+    filter(element: Element): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     * 
+     * @param obj An existing jQuery object to match the current set of elements against.
+     */
+    filter(obj: JQuery): JQuery;
+
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    find(selector: string): JQuery;
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     * 
+     * @param element An element to match elements against.
+     */
+    find(element: Element): JQuery;
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     * 
+     * @param obj A jQuery object to match elements against.
+     */
+    find(obj: JQuery): JQuery;
+
+    /**
+     * Reduce the set of matched elements to the first in the set.
+     */
+    first(): JQuery;
+
+    /**
+     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    has(selector: string): JQuery;
+    /**
+     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
+     * 
+     * @param contained A DOM element to match elements against.
+     */
+    has(contained: Element): JQuery;
+
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    is(selector: string): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     * 
+     * @param func A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.
+     */
+    is(func: (index: number, element: Element) => boolean): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     * 
+     * @param obj An existing jQuery object to match the current set of elements against.
+     */
+    is(obj: JQuery): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     * 
+     * @param elements One or more elements to match the current set of elements against.
+     */
+    is(elements: any): boolean;
+
+    /**
+     * Reduce the set of matched elements to the final one in the set.
+     */
+    last(): JQuery;
+
+    /**
+     * Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.
+     * 
+     * @param callback A function object that will be invoked for each element in the current set.
+     */
+    map(callback: (index: number, domElement: Element) => any): JQuery;
+
+    /**
+     * Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    next(selector?: string): JQuery;
+
+    /**
+     * Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    nextAll(selector?: string): JQuery;
+
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     * 
+     * @param selector A string containing a selector expression to indicate where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    nextUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     * 
+     * @param element A DOM node or jQuery object indicating where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    nextUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     * 
+     * @param obj A DOM node or jQuery object indicating where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    nextUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Remove elements from the set of matched elements.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    not(selector: string): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     * 
+     * @param func A function used as a test for each element in the set. this is the current DOM element.
+     */
+    not(func: (index: number, element: Element) => boolean): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     * 
+     * @param elements One or more DOM elements to remove from the matched set.
+     */
+    not(elements: Element|Element[]): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     * 
+     * @param obj An existing jQuery object to match the current set of elements against.
+     */
+    not(obj: JQuery): JQuery;
+
+    /**
+     * Get the closest ancestor element that is positioned.
+     */
+    offsetParent(): JQuery;
+
+    /**
+     * Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    parent(selector?: string): JQuery;
+
+    /**
+     * Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    parents(selector?: string): JQuery;
+
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param selector A string containing a selector expression to indicate where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    parentsUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param element A DOM node or jQuery object indicating where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    parentsUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param obj A DOM node or jQuery object indicating where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    parentsUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    prev(selector?: string): JQuery;
+
+    /**
+     * Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    prevAll(selector?: string): JQuery;
+
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    prevUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param element A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    prevUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     * 
+     * @param obj A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     */
+    prevUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
+     * 
+     * @param selector A string containing a selector expression to match elements against.
+     */
+    siblings(selector?: string): JQuery;
+
+    /**
+     * Reduce the set of matched elements to a subset specified by a range of indices.
+     * 
+     * @param start An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.
+     * @param end An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.
+     */
+    slice(start: number, end?: number): JQuery;
+
+    /**
+     * Show the queue of functions to be executed on the matched elements.
+     * 
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     */
+    queue(queueName?: string): any[];
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     * 
+     * @param newQueue An array of functions to replace the current queue contents.
+     */
+    queue(newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     * 
+     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.
+     */
+    queue(callback: Function): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     * 
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param newQueue An array of functions to replace the current queue contents.
+     */
+    queue(queueName: string, newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     * 
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.
+     */
+    queue(queueName: string, callback: Function): JQuery;
+}
+declare module "jquery" {
+    export = $;
+}
+declare var jQuery: JQueryStatic;
+declare var $: JQueryStatic;
diff --git a/definitions/node.d.ts b/definitions/node.d.ts
new file mode 100644
index 0000000..888da5c
--- /dev/null
+++ b/definitions/node.d.ts
@@ -0,0 +1,3359 @@
+// Type definitions for Node.js v6.x
+// Project: http://nodejs.org/
+// Definitions by: Microsoft TypeScript <http://typescriptlang.org>, DefinitelyTyped <https://github.com/DefinitelyTyped/DefinitelyTyped>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+/************************************************
+*                                               *
+*               Node.js v6.x API                *
+*                                               *
+************************************************/
+
+interface Error {
+    stack?: string;
+}
+
+interface ErrorConstructor {
+    captureStackTrace(targetObject: Object, constructorOpt?: Function): void;
+    stackTraceLimit: number;
+}
+
+// compat for TypeScript 1.8
+// if you use with --target es3 or --target es5 and use below definitions,
+// use the lib.es6.d.ts that is bundled with TypeScript 1.8.
+interface MapConstructor { }
+interface WeakMapConstructor { }
+interface SetConstructor { }
+interface WeakSetConstructor { }
+
+/************************************************
+*                                               *
+*                   GLOBAL                      *
+*                                               *
+************************************************/
+declare var process: NodeJS.Process;
+declare var global: NodeJS.Global;
+
+declare var __filename: string;
+declare var __dirname: string;
+
+declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
+declare function clearTimeout(timeoutId: NodeJS.Timer): void;
+declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
+declare function clearInterval(intervalId: NodeJS.Timer): void;
+declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any;
+declare function clearImmediate(immediateId: any): void;
+
+interface NodeRequireFunction {
+    (id: string): any;
+}
+
+interface NodeRequire extends NodeRequireFunction {
+    resolve(id: string): string;
+    cache: any;
+    extensions: any;
+    main: any;
+}
+
+declare var require: NodeRequire;
+
+interface NodeModule {
+    exports: any;
+    require: NodeRequireFunction;
+    id: string;
+    filename: string;
+    loaded: boolean;
+    parent: any;
+    children: any[];
+}
+
+declare var module: NodeModule;
+
+// Same as module.exports
+declare var exports: any;
+declare var SlowBuffer: {
+    new (str: string, encoding?: string): Buffer;
+    new (size: number): Buffer;
+    new (size: Uint8Array): Buffer;
+    new (array: any[]): Buffer;
+    prototype: Buffer;
+    isBuffer(obj: any): boolean;
+    byteLength(string: string, encoding?: string): number;
+    concat(list: Buffer[], totalLength?: number): Buffer;
+};
+
+
+// Buffer class
+type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "binary" | "hex";
+interface Buffer extends NodeBuffer { }
+
+/**
+ * Raw data is stored in instances of the Buffer class.
+ * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap.  A Buffer cannot be resized.
+ * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
+ */
+declare var Buffer: {
+    /**
+     * Allocates a new buffer containing the given {str}.
+     *
+     * @param str String to store in buffer.
+     * @param encoding encoding to use, optional.  Default is 'utf8'
+     */
+    new (str: string, encoding?: string): Buffer;
+    /**
+     * Allocates a new buffer of {size} octets.
+     *
+     * @param size count of octets to allocate.
+     */
+    new (size: number): Buffer;
+    /**
+     * Allocates a new buffer containing the given {array} of octets.
+     *
+     * @param array The octets to store.
+     */
+    new (array: Uint8Array): Buffer;
+    /**
+     * Produces a Buffer backed by the same allocated memory as
+     * the given {ArrayBuffer}.
+     *
+     *
+     * @param arrayBuffer The ArrayBuffer with which to share memory.
+     */
+    new (arrayBuffer: ArrayBuffer): Buffer;
+    /**
+     * Allocates a new buffer containing the given {array} of octets.
+     *
+     * @param array The octets to store.
+     */
+    new (array: any[]): Buffer;
+    /**
+     * Copies the passed {buffer} data onto a new {Buffer} instance.
+     *
+     * @param buffer The buffer to copy.
+     */
+    new (buffer: Buffer): Buffer;
+    prototype: Buffer;
+    /**
+     * Allocates a new Buffer using an {array} of octets.
+     *
+     * @param array
+     */
+    from(array: any[]): Buffer;
+    /**
+     * When passed a reference to the .buffer property of a TypedArray instance,
+     * the newly created Buffer will share the same allocated memory as the TypedArray.
+     * The optional {byteOffset} and {length} arguments specify a memory range
+     * within the {arrayBuffer} that will be shared by the Buffer.
+     *
+     * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer()
+     * @param byteOffset
+     * @param length
+     */
+    from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
+    /**
+     * Copies the passed {buffer} data onto a new Buffer instance.
+     *
+     * @param buffer
+     */
+    from(buffer: Buffer): Buffer;
+    /**
+     * Creates a new Buffer containing the given JavaScript string {str}.
+     * If provided, the {encoding} parameter identifies the character encoding.
+     * If not provided, {encoding} defaults to 'utf8'.
+     *
+     * @param str
+     */
+    from(str: string, encoding?: string): Buffer;
+    /**
+     * Returns true if {obj} is a Buffer
+     *
+     * @param obj object to test.
+     */
+    isBuffer(obj: any): obj is Buffer;
+    /**
+     * Returns true if {encoding} is a valid encoding argument.
+     * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
+     *
+     * @param encoding string to test.
+     */
+    isEncoding(encoding: string): boolean;
+    /**
+     * Gives the actual byte length of a string. encoding defaults to 'utf8'.
+     * This is not the same as String.prototype.length since that returns the number of characters in a string.
+     *
+     * @param string string to test.
+     * @param encoding encoding used to evaluate (defaults to 'utf8')
+     */
+    byteLength(string: string, encoding?: string): number;
+    /**
+     * Returns a buffer which is the result of concatenating all the buffers in the list together.
+     *
+     * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer.
+     * If the list has exactly one item, then the first item of the list is returned.
+     * If the list has more than one item, then a new Buffer is created.
+     *
+     * @param list An array of Buffer objects to concatenate
+     * @param totalLength Total length of the buffers when concatenated.
+     *   If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly.
+     */
+    concat(list: Buffer[], totalLength?: number): Buffer;
+    /**
+     * The same as buf1.compare(buf2).
+     */
+    compare(buf1: Buffer, buf2: Buffer): number;
+    /**
+     * Allocates a new buffer of {size} octets.
+     *
+     * @param size count of octets to allocate.
+     * @param fill if specified, buffer will be initialized by calling buf.fill(fill).
+     *    If parameter is omitted, buffer will be filled with zeros.
+     * @param encoding encoding used for call to buf.fill while initalizing
+     */
+    alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer;
+    /**
+     * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents
+     * of the newly created Buffer are unknown and may contain sensitive data.
+     *
+     * @param size count of octets to allocate
+     */
+    allocUnsafe(size: number): Buffer;
+    /**
+     * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents
+     * of the newly created Buffer are unknown and may contain sensitive data.
+     *
+     * @param size count of octets to allocate
+     */
+    allocUnsafeSlow(size: number): Buffer;
+};
+
+/************************************************
+*                                               *
+*               GLOBAL INTERFACES               *
+*                                               *
+************************************************/
+declare namespace NodeJS {
+    export interface ErrnoException extends Error {
+        errno?: string;
+        code?: string;
+        path?: string;
+        syscall?: string;
+        stack?: string;
+    }
+
+    export class EventEmitter {
+        addListener(event: string, listener: Function): this;
+        on(event: string, listener: Function): this;
+        once(event: string, listener: Function): this;
+        removeListener(event: string, listener: Function): this;
+        removeAllListeners(event?: string): this;
+        setMaxListeners(n: number): this;
+        getMaxListeners(): number;
+        listeners(event: string): Function[];
+        emit(event: string, ...args: any[]): boolean;
+        listenerCount(type: string): number;
+        // Added in Node 6...
+        prependListener(event: string, listener: Function): this;
+        prependOnceListener(event: string, listener: Function): this;
+        eventNames(): string[];
+    }
+
+    export interface ReadableStream extends EventEmitter {
+        readable: boolean;
+        read(size?: number): string | Buffer;
+        setEncoding(encoding: string): void;
+        pause(): ReadableStream;
+        resume(): ReadableStream;
+        pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
+        unpipe<T extends WritableStream>(destination?: T): void;
+        unshift(chunk: string): void;
+        unshift(chunk: Buffer): void;
+        wrap(oldStream: ReadableStream): ReadableStream;
+    }
+
+    export interface WritableStream extends EventEmitter {
+        writable: boolean;
+        write(buffer: Buffer | string, cb?: Function): boolean;
+        write(str: string, encoding?: string, cb?: Function): boolean;
+        end(): void;
+        end(buffer: Buffer, cb?: Function): void;
+        end(str: string, cb?: Function): void;
+        end(str: string, encoding?: string, cb?: Function): void;
+    }
+
+    export interface ReadWriteStream extends ReadableStream, WritableStream {
+        pause(): ReadWriteStream;
+        resume(): ReadWriteStream;
+    }
+
+    export interface Events extends EventEmitter { }
+
+    export interface Domain extends Events {
+        run(fn: Function): void;
+        add(emitter: Events): void;
+        remove(emitter: Events): void;
+        bind(cb: (err: Error, data: any) => any): any;
+        intercept(cb: (data: any) => any): any;
+        dispose(): void;
+
+        addListener(event: string, listener: Function): this;
+        on(event: string, listener: Function): this;
+        once(event: string, listener: Function): this;
+        removeListener(event: string, listener: Function): this;
+        removeAllListeners(event?: string): this;
+    }
+
+    export interface MemoryUsage {
+        rss: number;
+        heapTotal: number;
+        heapUsed: number;
+    }
+
+    export interface ProcessVersions {
+        http_parser: string;
+        node: string;
+        v8: string;
+        ares: string;
+        uv: string;
+        zlib: string;
+        modules: string;
+        openssl: string;
+    }
+
+    export interface Process extends EventEmitter {
+        stdout: WritableStream;
+        stderr: WritableStream;
+        stdin: ReadableStream;
+        argv: string[];
+        execArgv: string[];
+        execPath: string;
+        abort(): void;
+        chdir(directory: string): void;
+        cwd(): string;
+        env: any;
+        exit(code?: number): void;
+        exitCode: number;
+        getgid(): number;
+        setgid(id: number): void;
+        setgid(id: string): void;
+        getuid(): number;
+        setuid(id: number): void;
+        setuid(id: string): void;
+        version: string;
+        versions: ProcessVersions;
+        config: {
+            target_defaults: {
+                cflags: any[];
+                default_configuration: string;
+                defines: string[];
+                include_dirs: string[];
+                libraries: string[];
+            };
+            variables: {
+                clang: number;
+                host_arch: string;
+                node_install_npm: boolean;
+                node_install_waf: boolean;
+                node_prefix: string;
+                node_shared_openssl: boolean;
+                node_shared_v8: boolean;
+                node_shared_zlib: boolean;
+                node_use_dtrace: boolean;
+                node_use_etw: boolean;
+                node_use_openssl: boolean;
+                target_arch: string;
+                v8_no_strict_aliasing: number;
+                v8_use_snapshot: boolean;
+                visibility: string;
+            };
+        };
+        kill(pid: number, signal?: string | number): void;
+        pid: number;
+        title: string;
+        arch: string;
+        platform: string;
+        memoryUsage(): MemoryUsage;
+        nextTick(callback: Function, ...args: any[]): void;
+        umask(mask?: number): number;
+        uptime(): number;
+        hrtime(time?: number[]): number[];
+        domain: Domain;
+
+        // Worker
+        send?(message: any, sendHandle?: any): void;
+        disconnect(): void;
+        connected: boolean;
+    }
+
+    export interface Global {
+        Array: typeof Array;
+        ArrayBuffer: typeof ArrayBuffer;
+        Boolean: typeof Boolean;
+        Buffer: typeof Buffer;
+        DataView: typeof DataView;
+        Date: typeof Date;
+        Error: typeof Error;
+        EvalError: typeof EvalError;
+        Float32Array: typeof Float32Array;
+        Float64Array: typeof Float64Array;
+        Function: typeof Function;
+        GLOBAL: Global;
+        Infinity: typeof Infinity;
+        Int16Array: typeof Int16Array;
+        Int32Array: typeof Int32Array;
+        Int8Array: typeof Int8Array;
+        Intl: typeof Intl;
+        JSON: typeof JSON;
+        Map: MapConstructor;
+        Math: typeof Math;
+        NaN: typeof NaN;
+        Number: typeof Number;
+        Object: typeof Object;
+        Promise: Function;
+        RangeError: typeof RangeError;
+        ReferenceError: typeof ReferenceError;
+        RegExp: typeof RegExp;
+        Set: SetConstructor;
+        String: typeof String;
+        Symbol: Function;
+        SyntaxError: typeof SyntaxError;
+        TypeError: typeof TypeError;
+        URIError: typeof URIError;
+        Uint16Array: typeof Uint16Array;
+        Uint32Array: typeof Uint32Array;
+        Uint8Array: typeof Uint8Array;
+        Uint8ClampedArray: Function;
+        WeakMap: WeakMapConstructor;
+        WeakSet: WeakSetConstructor;
+        clearImmediate: (immediateId: any) => void;
+        clearInterval: (intervalId: NodeJS.Timer) => void;
+        clearTimeout: (timeoutId: NodeJS.Timer) => void;
+        console: typeof console;
+        decodeURI: typeof decodeURI;
+        decodeURIComponent: typeof decodeURIComponent;
+        encodeURI: typeof encodeURI;
+        encodeURIComponent: typeof encodeURIComponent;
+        escape: (str: string) => string;
+        eval: typeof eval;
+        global: Global;
+        isFinite: typeof isFinite;
+        isNaN: typeof isNaN;
+        parseFloat: typeof parseFloat;
+        parseInt: typeof parseInt;
+        process: Process;
+        root: Global;
+        setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any;
+        setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer;
+        setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer;
+        undefined: typeof undefined;
+        unescape: (str: string) => string;
+        gc: () => void;
+        v8debug?: any;
+    }
+
+    export interface Timer {
+        ref(): void;
+        unref(): void;
+    }
+}
+
+interface IterableIterator<T> { }
+
+/**
+ * @deprecated
+ */
+interface NodeBuffer extends Uint8Array {
+    write(string: string, offset?: number, length?: number, encoding?: string): number;
+    toString(encoding?: string, start?: number, end?: number): string;
+    toJSON(): {type: 'Buffer', data: any[]};
+    equals(otherBuffer: Buffer): boolean;
+    compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;
+    copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
+    slice(start?: number, end?: number): Buffer;
+    writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
+    writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
+    writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
+    writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
+    readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number;
+    readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number;
+    readIntLE(offset: number, byteLength: number, noAssert?: boolean): number;
+    readIntBE(offset: number, byteLength: number, noAssert?: boolean): number;
+    readUInt8(offset: number, noAssert?: boolean): number;
+    readUInt16LE(offset: number, noAssert?: boolean): number;
+    readUInt16BE(offset: number, noAssert?: boolean): number;
+    readUInt32LE(offset: number, noAssert?: boolean): number;
+    readUInt32BE(offset: number, noAssert?: boolean): number;
+    readInt8(offset: number, noAssert?: boolean): number;
+    readInt16LE(offset: number, noAssert?: boolean): number;
+    readInt16BE(offset: number, noAssert?: boolean): number;
+    readInt32LE(offset: number, noAssert?: boolean): number;
+    readInt32BE(offset: number, noAssert?: boolean): number;
+    readFloatLE(offset: number, noAssert?: boolean): number;
+    readFloatBE(offset: number, noAssert?: boolean): number;
+    readDoubleLE(offset: number, noAssert?: boolean): number;
+    readDoubleBE(offset: number, noAssert?: boolean): number;
+    swap16(): Buffer;
+    swap32(): Buffer;
+    swap64(): Buffer;
+    writeUInt8(value: number, offset: number, noAssert?: boolean): number;
+    writeUInt16LE(value: number, offset: number, noAssert?: boolean): number;
+    writeUInt16BE(value: number, offset: number, noAssert?: boolean): number;
+    writeUInt32LE(value: number, offset: number, noAssert?: boolean): number;
+    writeUInt32BE(value: number, offset: number, noAssert?: boolean): number;
+    writeInt8(value: number, offset: number, noAssert?: boolean): number;
+    writeInt16LE(value: number, offset: number, noAssert?: boolean): number;
+    writeInt16BE(value: number, offset: number, noAssert?: boolean): number;
+    writeInt32LE(value: number, offset: number, noAssert?: boolean): number;
+    writeInt32BE(value: number, offset: number, noAssert?: boolean): number;
+    writeFloatLE(value: number, offset: number, noAssert?: boolean): number;
+    writeFloatBE(value: number, offset: number, noAssert?: boolean): number;
+    writeDoubleLE(value: number, offset: number, noAssert?: boolean): number;
+    writeDoubleBE(value: number, offset: number, noAssert?: boolean): number;
+    fill(value: any, offset?: number, end?: number): this;
+    indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;
+    lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;
+    entries(): IterableIterator<[number, number]>;
+    includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean;
+    keys(): IterableIterator<number>;
+    values(): IterableIterator<number>;
+}
+
+/************************************************
+*                                               *
+*                   MODULES                     *
+*                                               *
+************************************************/
+declare module "buffer" {
+    export var INSPECT_MAX_BYTES: number;
+    var BuffType: typeof Buffer;
+    var SlowBuffType: typeof SlowBuffer;
+    export { BuffType as Buffer, SlowBuffType as SlowBuffer };
+}
+
+declare module "querystring" {
+    export interface StringifyOptions {
+        encodeURIComponent?: Function;
+    }
+
+    export interface ParseOptions {
+        maxKeys?: number;
+        decodeURIComponent?: Function;
+    }
+
+    export function stringify<T>(obj: T, sep?: string, eq?: string, options?: StringifyOptions): string;
+    export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): any;
+    export function parse<T extends {}>(str: string, sep?: string, eq?: string, options?: ParseOptions): T;
+    export function escape(str: string): string;
+    export function unescape(str: string): string;
+}
+
+declare module "events" {
+    export class EventEmitter extends NodeJS.EventEmitter {
+        static EventEmitter: EventEmitter;
+        static listenerCount(emitter: EventEmitter, event: string): number; // deprecated
+        static defaultMaxListeners: number;
+
+        addListener(event: string, listener: Function): this;
+        on(event: string, listener: Function): this;
+        once(event: string, listener: Function): this;
+        prependListener(event: string, listener: Function): this;
+        prependOnceListener(event: string, listener: Function): this;
+        removeListener(event: string, listener: Function): this;
+        removeAllListeners(event?: string): this;
+        setMaxListeners(n: number): this;
+        getMaxListeners(): number;
+        listeners(event: string): Function[];
+        emit(event: string, ...args: any[]): boolean;
+        eventNames(): string[];
+        listenerCount(type: string): number;
+    }
+}
+
+declare module "http" {
+    import * as events from "events";
+    import * as net from "net";
+    import * as stream from "stream";
+
+    export interface RequestOptions {
+        protocol?: string;
+        host?: string;
+        hostname?: string;
+        family?: number;
+        port?: number;
+        localAddress?: string;
+        socketPath?: string;
+        method?: string;
+        path?: string;
+        headers?: { [key: string]: any };
+        auth?: string;
+        agent?: Agent | boolean;
+    }
+
+    export interface Server extends net.Server {
+        setTimeout(msecs: number, callback: Function): void;
+        maxHeadersCount: number;
+        timeout: number;
+        listening: boolean;
+    }
+    /**
+     * @deprecated Use IncomingMessage
+     */
+    export interface ServerRequest extends IncomingMessage {
+        connection: net.Socket;
+    }
+    export interface ServerResponse extends stream.Writable {
+        // Extended base methods
+        write(buffer: Buffer): boolean;
+        write(buffer: Buffer, cb?: Function): boolean;
+        write(str: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, fd?: string): boolean;
+
+        writeContinue(): void;
+        writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void;
+        writeHead(statusCode: number, headers?: any): void;
+        statusCode: number;
+        statusMessage: string;
+        headersSent: boolean;
+        setHeader(name: string, value: string | string[]): void;
+        setTimeout(msecs: number, callback: Function): ServerResponse;
+        sendDate: boolean;
+        getHeader(name: string): string;
+        removeHeader(name: string): void;
+        write(chunk: any, encoding?: string): any;
+        addTrailers(headers: any): void;
+        finished: boolean;
+
+        // Extended base methods
+        end(): void;
+        end(buffer: Buffer, cb?: Function): void;
+        end(str: string, cb?: Function): void;
+        end(str: string, encoding?: string, cb?: Function): void;
+        end(data?: any, encoding?: string): void;
+    }
+    export interface ClientRequest extends stream.Writable {
+        // Extended base methods
+        write(buffer: Buffer): boolean;
+        write(buffer: Buffer, cb?: Function): boolean;
+        write(str: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, fd?: string): boolean;
+
+        write(chunk: any, encoding?: string): void;
+        abort(): void;
+        setTimeout(timeout: number, callback?: Function): void;
+        setNoDelay(noDelay?: boolean): void;
+        setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
+
+        setHeader(name: string, value: string | string[]): void;
+        getHeader(name: string): string;
+        removeHeader(name: string): void;
+        addTrailers(headers: any): void;
+
+        // Extended base methods
+        end(): void;
+        end(buffer: Buffer, cb?: Function): void;
+        end(str: string, cb?: Function): void;
+        end(str: string, encoding?: string, cb?: Function): void;
+        end(data?: any, encoding?: string): void;
+    }
+    export interface IncomingMessage extends stream.Readable {
+        httpVersion: string;
+        httpVersionMajor: string;
+        httpVersionMinor: string;
+        connection: net.Socket;
+        headers: any;
+        rawHeaders: string[];
+        trailers: any;
+        rawTrailers: any;
+        setTimeout(msecs: number, callback: Function): NodeJS.Timer;
+        /**
+         * Only valid for request obtained from http.Server.
+         */
+        method?: string;
+        /**
+         * Only valid for request obtained from http.Server.
+         */
+        url?: string;
+        /**
+         * Only valid for response obtained from http.ClientRequest.
+         */
+        statusCode?: number;
+        /**
+         * Only valid for response obtained from http.ClientRequest.
+         */
+        statusMessage?: string;
+        socket: net.Socket;
+        destroy(error?: Error): void;
+    }
+    /**
+     * @deprecated Use IncomingMessage
+     */
+    export interface ClientResponse extends IncomingMessage { }
+
+    export interface AgentOptions {
+        /**
+         * Keep sockets around in a pool to be used by other requests in the future. Default = false
+         */
+        keepAlive?: boolean;
+        /**
+         * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
+         * Only relevant if keepAlive is set to true.
+         */
+        keepAliveMsecs?: number;
+        /**
+         * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
+         */
+        maxSockets?: number;
+        /**
+         * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
+         */
+        maxFreeSockets?: number;
+    }
+
+    export class Agent {
+        maxSockets: number;
+        sockets: any;
+        requests: any;
+
+        constructor(opts?: AgentOptions);
+
+        /**
+         * Destroy any sockets that are currently in use by the agent.
+         * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled,
+         * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise,
+         * sockets may hang open for quite a long time before the server terminates them.
+         */
+        destroy(): void;
+    }
+
+    export var METHODS: string[];
+
+    export var STATUS_CODES: {
+        [errorCode: number]: string;
+        [errorCode: string]: string;
+    };
+    export function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) => void): Server;
+    export function createClient(port?: number, host?: string): any;
+    export function request(options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
+    export function get(options: any, callback?: (res: IncomingMessage) => void): ClientRequest;
+    export var globalAgent: Agent;
+}
+
+declare module "cluster" {
+    import * as child from "child_process";
+    import * as events from "events";
+    import * as net from "net";
+
+    // interfaces
+    export interface ClusterSettings {
+        execArgv?: string[]; // default: process.execArgv
+        exec?: string;
+        args?: string[];
+        silent?: boolean;
+        stdio?: any[];
+        uid?: number;
+        gid?: number;
+    }
+
+    export interface ClusterSetupMasterSettings {
+        exec?: string;  // default: process.argv[1]
+        args?: string[];  // default: process.argv.slice(2)
+        silent?: boolean;  // default: false
+        stdio?: any[];
+    }
+
+    export interface Address {
+        address: string;
+        port: number;
+        addressType: number | "udp4" | "udp6";  // 4, 6, -1, "udp4", "udp6"
+    }
+
+    export class Worker extends events.EventEmitter {
+        id: string;
+        process: child.ChildProcess;
+        suicide: boolean;
+        send(message: any, sendHandle?: any): boolean;
+        kill(signal?: string): void;
+        destroy(signal?: string): void;
+        disconnect(): void;
+        isConnected(): boolean;
+        isDead(): boolean;
+        exitedAfterDisconnect: boolean;
+        
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. error
+         *   3. exit
+         *   4. listening
+         *   5. message
+         *   6. online
+         */
+        addListener(event: string, listener: Function): this;
+        addListener(event: "disconnect", listener: () => void): this;
+        addListener(event: "error", listener: (code: number, signal: string) => void): this;
+        addListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        addListener(event: "listening", listener: (address: Address) => void): this;
+        addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: () => void): this;
+        
+        on(event: string, listener: Function): this;
+        on(event: "disconnect", listener: () => void): this;
+        on(event: "error", listener: (code: number, signal: string) => void): this;
+        on(event: "exit", listener: (code: number, signal: string) => void): this;
+        on(event: "listening", listener: (address: Address) => void): this;
+        on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: () => void): this;
+        
+        once(event: string, listener: Function): this;
+        once(event: "disconnect", listener: () => void): this;
+        once(event: "error", listener: (code: number, signal: string) => void): this;
+        once(event: "exit", listener: (code: number, signal: string) => void): this;
+        once(event: "listening", listener: (address: Address) => void): this;
+        once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: () => void): this;
+        
+        prependListener(event: string, listener: Function): this;
+        prependListener(event: "disconnect", listener: () => void): this;
+        prependListener(event: "error", listener: (code: number, signal: string) => void): this;
+        prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependListener(event: "listening", listener: (address: Address) => void): this;
+        prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependListener(event: "online", listener: () => void): this;
+        
+        prependOnceListener(event: string, listener: Function): this;
+        prependOnceListener(event: "disconnect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (code: number, signal: string) => void): this;
+        prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependOnceListener(event: "listening", listener: (address: Address) => void): this;
+        prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(event: "online", listener: () => void): this;
+    }
+
+    export interface Cluster extends events.EventEmitter {
+        Worker: Worker;
+        disconnect(callback?: Function): void;
+        fork(env?: any): Worker;
+        isMaster: boolean;
+        isWorker: boolean;
+        // TODO: cluster.schedulingPolicy
+        settings: ClusterSettings;
+        setupMaster(settings?: ClusterSetupMasterSettings): void;
+        worker: Worker;
+        workers: {
+            [index: string]: Worker
+        };
+
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. exit
+         *   3. fork
+         *   4. listening
+         *   5. message
+         *   6. online
+         *   7. setup
+         */
+        addListener(event: string, listener: Function): this;
+        addListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        addListener(event: "fork", listener: (worker: Worker) => void): this;
+        addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: (worker: Worker) => void): this;
+        addListener(event: "setup", listener: (settings: any) => void): this;
+
+        on(event: string, listener: Function): this;
+        on(event: "disconnect", listener: (worker: Worker) => void): this;
+        on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        on(event: "fork", listener: (worker: Worker) => void): this;
+        on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: (worker: Worker) => void): this;
+        on(event: "setup", listener: (settings: any) => void): this;
+
+        once(event: string, listener: Function): this;
+        once(event: "disconnect", listener: (worker: Worker) => void): this;
+        once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        once(event: "fork", listener: (worker: Worker) => void): this;
+        once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: (worker: Worker) => void): this;
+        once(event: "setup", listener: (settings: any) => void): this;
+
+        prependListener(event: string, listener: Function): this;
+        prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependListener(event: "online", listener: (worker: Worker) => void): this;
+        prependListener(event: "setup", listener: (settings: any) => void): this;
+
+        prependOnceListener(event: string, listener: Function): this;
+        prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "setup", listener: (settings: any) => void): this;
+
+    }
+
+    export function disconnect(callback ?: Function): void;
+    export function fork(env?: any): Worker;
+    export var isMaster: boolean;
+    export var isWorker: boolean;
+    // TODO: cluster.schedulingPolicy
+    export var settings: ClusterSettings;
+    export function setupMaster(settings?: ClusterSetupMasterSettings): void;
+    export var worker: Worker;
+    export var workers: {
+        [index: string]: Worker
+    };
+
+    /**
+     * events.EventEmitter
+     *   1. disconnect
+     *   2. exit
+     *   3. fork
+     *   4. listening
+     *   5. message
+     *   6. online
+     *   7. setup
+     */
+    export function addListener(event: string, listener: Function): Cluster;
+    export function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    export function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    export function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    export function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    export function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    export function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    export function addListener(event: "setup", listener: (settings: any) => void): Cluster;
+
+    export function on(event: string, listener: Function): Cluster;
+    export function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    export function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    export function on(event: "fork", listener: (worker: Worker) => void): Cluster;
+    export function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    export function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    export function on(event: "online", listener: (worker: Worker) => void): Cluster;
+    export function on(event: "setup", listener: (settings: any) => void): Cluster;
+
+    export function once(event: string, listener: Function): Cluster;
+    export function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    export function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    export function once(event: "fork", listener: (worker: Worker) => void): Cluster;
+    export function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    export function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    export function once(event: "online", listener: (worker: Worker) => void): Cluster;
+    export function once(event: "setup", listener: (settings: any) => void): Cluster;
+
+    export function removeListener(event: string, listener: Function): Cluster;
+    export function removeAllListeners(event?: string): Cluster;
+    export function setMaxListeners(n: number): Cluster;
+    export function getMaxListeners(): number;
+    export function listeners(event: string): Function[];
+    export function emit(event: string, ...args: any[]): boolean;
+    export function listenerCount(type: string): number;
+
+    export function prependListener(event: string, listener: Function): Cluster;
+    export function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    export function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    export function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    export function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    export function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    export function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    export function prependListener(event: "setup", listener: (settings: any) => void): Cluster;
+
+    export function prependOnceListener(event: string, listener: Function): Cluster;
+    export function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    export function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    export function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    export function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    export function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    export function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    export function prependOnceListener(event: "setup", listener: (settings: any) => void): Cluster;
+
+    export function eventNames(): string[];
+}
+
+declare module "zlib" {
+    import * as stream from "stream";
+    export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; }
+
+    export interface Gzip extends stream.Transform { }
+    export interface Gunzip extends stream.Transform { }
+    export interface Deflate extends stream.Transform { }
+    export interface Inflate extends stream.Transform { }
+    export interface DeflateRaw extends stream.Transform { }
+    export interface InflateRaw extends stream.Transform { }
+    export interface Unzip extends stream.Transform { }
+
+    export function createGzip(options?: ZlibOptions): Gzip;
+    export function createGunzip(options?: ZlibOptions): Gunzip;
+    export function createDeflate(options?: ZlibOptions): Deflate;
+    export function createInflate(options?: ZlibOptions): Inflate;
+    export function createDeflateRaw(options?: ZlibOptions): DeflateRaw;
+    export function createInflateRaw(options?: ZlibOptions): InflateRaw;
+    export function createUnzip(options?: ZlibOptions): Unzip;
+
+    export function deflate(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function deflateSync(buf: Buffer, options?: ZlibOptions): any;
+    export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function deflateRawSync(buf: Buffer, options?: ZlibOptions): any;
+    export function gzip(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function gzipSync(buf: Buffer, options?: ZlibOptions): any;
+    export function gunzip(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function gunzipSync(buf: Buffer, options?: ZlibOptions): any;
+    export function inflate(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function inflateSync(buf: Buffer, options?: ZlibOptions): any;
+    export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function inflateRawSync(buf: Buffer, options?: ZlibOptions): any;
+    export function unzip(buf: Buffer, callback: (error: Error, result: any) => void): void;
+    export function unzipSync(buf: Buffer, options?: ZlibOptions): any;
+
+    // Constants
+    export var Z_NO_FLUSH: number;
+    export var Z_PARTIAL_FLUSH: number;
+    export var Z_SYNC_FLUSH: number;
+    export var Z_FULL_FLUSH: number;
+    export var Z_FINISH: number;
+    export var Z_BLOCK: number;
+    export var Z_TREES: number;
+    export var Z_OK: number;
+    export var Z_STREAM_END: number;
+    export var Z_NEED_DICT: number;
+    export var Z_ERRNO: number;
+    export var Z_STREAM_ERROR: number;
+    export var Z_DATA_ERROR: number;
+    export var Z_MEM_ERROR: number;
+    export var Z_BUF_ERROR: number;
+    export var Z_VERSION_ERROR: number;
+    export var Z_NO_COMPRESSION: number;
+    export var Z_BEST_SPEED: number;
+    export var Z_BEST_COMPRESSION: number;
+    export var Z_DEFAULT_COMPRESSION: number;
+    export var Z_FILTERED: number;
+    export var Z_HUFFMAN_ONLY: number;
+    export var Z_RLE: number;
+    export var Z_FIXED: number;
+    export var Z_DEFAULT_STRATEGY: number;
+    export var Z_BINARY: number;
+    export var Z_TEXT: number;
+    export var Z_ASCII: number;
+    export var Z_UNKNOWN: number;
+    export var Z_DEFLATED: number;
+    export var Z_NULL: number;
+}
+
+declare module "os" {
+    export interface CpuInfo {
+        model: string;
+        speed: number;
+        times: {
+            user: number;
+            nice: number;
+            sys: number;
+            idle: number;
+            irq: number;
+        };
+    }
+
+    export interface NetworkInterfaceInfo {
+        address: string;
+        netmask: string;
+        family: string;
+        mac: string;
+        internal: boolean;
+    }
+
+    export function hostname(): string;
+    export function loadavg(): number[];
+    export function uptime(): number;
+    export function freemem(): number;
+    export function totalmem(): number;
+    export function cpus(): CpuInfo[];
+    export function type(): string;
+    export function release(): string;
+    export function networkInterfaces(): { [index: string]: NetworkInterfaceInfo[] };
+    export function homedir(): string;
+    export function userInfo(options?: { encoding: string }): { username: string, uid: number, gid: number, shell: any, homedir: string }
+    export var constants: {
+        UV_UDP_REUSEADDR: number,
+        errno: {
+            SIGHUP: number;
+            SIGINT: number;
+            SIGQUIT: number;
+            SIGILL: number;
+            SIGTRAP: number;
+            SIGABRT: number;
+            SIGIOT: number;
+            SIGBUS: number;
+            SIGFPE: number;
+            SIGKILL: number;
+            SIGUSR1: number;
+            SIGSEGV: number;
+            SIGUSR2: number;
+            SIGPIPE: number;
+            SIGALRM: number;
+            SIGTERM: number;
+            SIGCHLD: number;
+            SIGSTKFLT: number;
+            SIGCONT: number;
+            SIGSTOP: number;
+            SIGTSTP: number;
+            SIGTTIN: number;
+            SIGTTOU: number;
+            SIGURG: number;
+            SIGXCPU: number;
+            SIGXFSZ: number;
+            SIGVTALRM: number;
+            SIGPROF: number;
+            SIGWINCH: number;
+            SIGIO: number;
+            SIGPOLL: number;
+            SIGPWR: number;
+            SIGSYS: number;
+            SIGUNUSED: number;
+        },
+        signals: {
+            E2BIG: number;
+            EACCES: number;
+            EADDRINUSE: number;
+            EADDRNOTAVAIL: number;
+            EAFNOSUPPORT: number;
+            EAGAIN: number;
+            EALREADY: number;
+            EBADF: number;
+            EBADMSG: number;
+            EBUSY: number;
+            ECANCELED: number;
+            ECHILD: number;
+            ECONNABORTED: number;
+            ECONNREFUSED: number;
+            ECONNRESET: number;
+            EDEADLK: number;
+            EDESTADDRREQ: number;
+            EDOM: number;
+            EDQUOT: number;
+            EEXIST: number;
+            EFAULT: number;
+            EFBIG: number;
+            EHOSTUNREACH: number;
+            EIDRM: number;
+            EILSEQ: number;
+            EINPROGRESS: number;
+            EINTR: number;
+            EINVAL: number;
+            EIO: number;
+            EISCONN: number;
+            EISDIR: number;
+            ELOOP: number;
+            EMFILE: number;
+            EMLINK: number;
+            EMSGSIZE: number;
+            EMULTIHOP: number;
+            ENAMETOOLONG: number;
+            ENETDOWN: number;
+            ENETRESET: number;
+            ENETUNREACH: number;
+            ENFILE: number;
+            ENOBUFS: number;
+            ENODATA: number;
+            ENODEV: number;
+            ENOENT: number;
+            ENOEXEC: number;
+            ENOLCK: number;
+            ENOLINK: number;
+            ENOMEM: number;
+            ENOMSG: number;
+            ENOPROTOOPT: number;
+            ENOSPC: number;
+            ENOSR: number;
+            ENOSTR: number;
+            ENOSYS: number;
+            ENOTCONN: number;
+            ENOTDIR: number;
+            ENOTEMPTY: number;
+            ENOTSOCK: number;
+            ENOTSUP: number;
+            ENOTTY: number;
+            ENXIO: number;
+            EOPNOTSUPP: number;
+            EOVERFLOW: number;
+            EPERM: number;
+            EPIPE: number;
+            EPROTO: number;
+            EPROTONOSUPPORT: number;
+            EPROTOTYPE: number;
+            ERANGE: number;
+            EROFS: number;
+            ESPIPE: number;
+            ESRCH: number;
+            ESTALE: number;
+            ETIME: number;
+            ETIMEDOUT: number;
+            ETXTBSY: number;
+            EWOULDBLOCK: number;
+            EXDEV: number;
+        },
+    };
+    export function arch(): string;
+    export function platform(): string;
+    export function tmpdir(): string;
+    export var EOL: string;
+    export function endianness(): "BE" | "LE";
+}
+
+declare module "https" {
+    import * as tls from "tls";
+    import * as events from "events";
+    import * as http from "http";
+
+    export interface ServerOptions {
+        pfx?: any;
+        key?: any;
+        passphrase?: string;
+        cert?: any;
+        ca?: any;
+        crl?: any;
+        ciphers?: string;
+        honorCipherOrder?: boolean;
+        requestCert?: boolean;
+        rejectUnauthorized?: boolean;
+        NPNProtocols?: any;
+        SNICallback?: (servername: string, cb: (err: Error, ctx: tls.SecureContext) => any) => any;
+    }
+
+    export interface RequestOptions extends http.RequestOptions {
+        pfx?: any;
+        key?: any;
+        passphrase?: string;
+        cert?: any;
+        ca?: any;
+        ciphers?: string;
+        rejectUnauthorized?: boolean;
+        secureProtocol?: string;
+    }
+
+    export interface Agent extends http.Agent { }
+
+    export interface AgentOptions extends http.AgentOptions {
+        pfx?: any;
+        key?: any;
+        passphrase?: string;
+        cert?: any;
+        ca?: any;
+        ciphers?: string;
+        rejectUnauthorized?: boolean;
+        secureProtocol?: string;
+        maxCachedSessions?: number;
+    }
+
+    export var Agent: {
+        new (options?: AgentOptions): Agent;
+    };
+    export interface Server extends tls.Server { }
+    export function createServer(options: ServerOptions, requestListener?: Function): Server;
+    export function request(options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    export function get(options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    export var globalAgent: Agent;
+}
+
+declare module "punycode" {
+    export function decode(string: string): string;
+    export function encode(string: string): string;
+    export function toUnicode(domain: string): string;
+    export function toASCII(domain: string): string;
+    export var ucs2: ucs2;
+    interface ucs2 {
+        decode(string: string): number[];
+        encode(codePoints: number[]): string;
+    }
+    export var version: any;
+}
+
+declare module "repl" {
+    import * as stream from "stream";
+    import * as readline from "readline";
+
+    export interface ReplOptions {
+        prompt?: string;
+        input?: NodeJS.ReadableStream;
+        output?: NodeJS.WritableStream;
+        terminal?: boolean;
+        eval?: Function;
+        useColors?: boolean;
+        useGlobal?: boolean;
+        ignoreUndefined?: boolean;
+        writer?: Function;
+        completer?: Function;
+        replMode?: any;
+        breakEvalOnSigint?: any;
+    }
+
+    export interface REPLServer extends readline.ReadLine {
+        defineCommand(keyword: string, cmd: Function | { help: string, action: Function }): void;
+        displayPrompt(preserveCursor?: boolean): void
+    }
+
+    export function start(options: ReplOptions): REPLServer;
+}
+
+declare module "readline" {
+    import * as events from "events";
+    import * as stream from "stream";
+
+    export interface Key {
+        sequence?: string;
+        name?: string;
+        ctrl?: boolean;
+        meta?: boolean;
+        shift?: boolean;
+    }
+
+    export interface ReadLine extends events.EventEmitter {
+        setPrompt(prompt: string): void;
+        prompt(preserveCursor?: boolean): void;
+        question(query: string, callback: (answer: string) => void): void;
+        pause(): ReadLine;
+        resume(): ReadLine;
+        close(): void;
+        write(data: string | Buffer, key?: Key): void;
+    }
+
+    export interface Completer {
+        (line: string): CompleterResult;
+        (line: string, callback: (err: any, result: CompleterResult) => void): any;
+    }
+
+    export interface CompleterResult {
+        completions: string[];
+        line: string;
+    }
+
+    export interface ReadLineOptions {
+        input: NodeJS.ReadableStream;
+        output?: NodeJS.WritableStream;
+        completer?: Completer;
+        terminal?: boolean;
+        historySize?: number;
+    }
+
+    export function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer, terminal?: boolean): ReadLine;
+    export function createInterface(options: ReadLineOptions): ReadLine;
+
+    export function cursorTo(stream: NodeJS.WritableStream, x: number, y: number): void;
+    export function moveCursor(stream: NodeJS.WritableStream, dx: number | string, dy: number | string): void;
+    export function clearLine(stream: NodeJS.WritableStream, dir: number): void;
+    export function clearScreenDown(stream: NodeJS.WritableStream): void;
+}
+
+declare module "vm" {
+    export interface Context { }
+    export interface ScriptOptions {
+        filename?: string;
+        lineOffset?: number;
+        columnOffset?: number;
+        displayErrors?: boolean;
+        timeout?: number;
+        cachedData?: Buffer;
+        produceCachedData?: boolean;
+    }
+    export interface RunningScriptOptions {
+        filename?: string;
+        lineOffset?: number;
+        columnOffset?: number;
+        displayErrors?: boolean;
+        timeout?: number;
+    }
+    export class Script {
+        constructor(code: string, options?: ScriptOptions);
+        runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any;
+        runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any;
+        runInThisContext(options?: RunningScriptOptions): any;
+    }
+    export function createContext(sandbox?: Context): Context;
+    export function isContext(sandbox: Context): boolean;
+    export function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions): any;
+    export function runInDebugContext(code: string): any;
+    export function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions): any;
+    export function runInThisContext(code: string, options?: RunningScriptOptions): any;
+}
+
+declare module "child_process" {
+    import * as events from "events";
+    import * as stream from "stream";
+
+    export interface ChildProcess extends events.EventEmitter {
+        stdin: stream.Writable;
+        stdout: stream.Readable;
+        stderr: stream.Readable;
+        stdio: [stream.Writable, stream.Readable, stream.Readable];
+        pid: number;
+        kill(signal?: string): void;
+        send(message: any, sendHandle?: any): boolean;
+        connected: boolean;
+        disconnect(): void;
+        unref(): void;
+        ref(): void;
+    }
+
+    export interface SpawnOptions {
+        cwd?: string;
+        env?: any;
+        stdio?: any;
+        detached?: boolean;
+        uid?: number;
+        gid?: number;
+        shell?: boolean | string;
+    }
+    export function spawn(command: string, args?: string[], options?: SpawnOptions): ChildProcess;
+
+    export interface ExecOptions {
+        cwd?: string;
+        env?: any;
+        shell?: string;
+        timeout?: number;
+        maxBuffer?: number;
+        killSignal?: string;
+        uid?: number;
+        gid?: number;
+    }
+    export interface ExecOptionsWithStringEncoding extends ExecOptions {
+        encoding: BufferEncoding;
+    }
+    export interface ExecOptionsWithBufferEncoding extends ExecOptions {
+        encoding: string; // specify `null`.
+    }
+    export function exec(command: string, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    export function exec(command: string, options: ExecOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    // usage. child_process.exec("tsc", {encoding: null as string}, (err, stdout, stderr) => {});
+    export function exec(command: string, options: ExecOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+    export function exec(command: string, options: ExecOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+
+    export interface ExecFileOptions {
+        cwd?: string;
+        env?: any;
+        timeout?: number;
+        maxBuffer?: number;
+        killSignal?: string;
+        uid?: number;
+        gid?: number;
+    }
+    export interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+        encoding: BufferEncoding;
+    }
+    export interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+        encoding: string; // specify `null`.
+    }
+    export function execFile(file: string, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    export function execFile(file: string, options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    // usage. child_process.execFile("file.sh", {encoding: null as string}, (err, stdout, stderr) => {});
+    export function execFile(file: string, options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+    export function execFile(file: string, options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    export function execFile(file: string, args?: string[], callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+    // usage. child_process.execFile("file.sh", ["foo"], {encoding: null as string}, (err, stdout, stderr) => {});
+    export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+    export function execFile(file: string, args?: string[], options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess;
+
+    export interface ForkOptions {
+        cwd?: string;
+        env?: any;
+        execPath?: string;
+        execArgv?: string[];
+        silent?: boolean;
+        uid?: number;
+        gid?: number;
+    }
+    export function fork(modulePath: string, args?: string[], options?: ForkOptions): ChildProcess;
+
+    export interface SpawnSyncOptions {
+        cwd?: string;
+        input?: string | Buffer;
+        stdio?: any;
+        env?: any;
+        uid?: number;
+        gid?: number;
+        timeout?: number;
+        killSignal?: string;
+        maxBuffer?: number;
+        encoding?: string;
+        shell?: boolean | string;
+    }
+    export interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+        encoding: BufferEncoding;
+    }
+    export interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    export interface SpawnSyncReturns<T> {
+        pid: number;
+        output: string[];
+        stdout: T;
+        stderr: T;
+        status: number;
+        signal: string;
+        error: Error;
+    }
+    export function spawnSync(command: string): SpawnSyncReturns<Buffer>;
+    export function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
+    export function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
+    export function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
+    export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
+    export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
+    export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
+
+    export interface ExecSyncOptions {
+        cwd?: string;
+        input?: string | Buffer;
+        stdio?: any;
+        env?: any;
+        shell?: string;
+        uid?: number;
+        gid?: number;
+        timeout?: number;
+        killSignal?: string;
+        maxBuffer?: number;
+        encoding?: string;
+    }
+    export interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+        encoding: BufferEncoding;
+    }
+    export interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    export function execSync(command: string): Buffer;
+    export function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string;
+    export function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer;
+    export function execSync(command: string, options?: ExecSyncOptions): Buffer;
+
+    export interface ExecFileSyncOptions {
+        cwd?: string;
+        input?: string | Buffer;
+        stdio?: any;
+        env?: any;
+        uid?: number;
+        gid?: number;
+        timeout?: number;
+        killSignal?: string;
+        maxBuffer?: number;
+        encoding?: string;
+    }
+    export interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+        encoding: BufferEncoding;
+    }
+    export interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    export function execFileSync(command: string): Buffer;
+    export function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string;
+    export function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+    export function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer;
+    export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithStringEncoding): string;
+    export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+    export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptions): Buffer;
+}
+
+declare module "url" {
+    export interface Url {
+        href?: string;
+        protocol?: string;
+        auth?: string;
+        hostname?: string;
+        port?: string;
+        host?: string;
+        pathname?: string;
+        search?: string;
+        query?: string | any;
+        slashes?: boolean;
+        hash?: string;
+        path?: string;
+    }
+
+    export function parse(urlStr: string, parseQueryString?: boolean, slashesDenoteHost?: boolean): Url;
+    export function format(url: Url): string;
+    export function resolve(from: string, to: string): string;
+}
+
+declare module "dns" {
+    export interface MxRecord {
+        exchange: string,
+        priority: number
+    }
+
+    export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) => void): string;
+    export function lookup(domain: string, callback: (err: Error, address: string, family: number) => void): string;
+    export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolve(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolve4(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolve6(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolveMx(domain: string, callback: (err: Error, addresses: MxRecord[]) =>void ): string[];
+    export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) => void): string[];
+    export function reverse(ip: string, callback: (err: Error, domains: string[]) => void): string[];
+    export function setServers(servers: string[]): void;
+
+    //Error codes
+    export var NODATA: string;
+    export var FORMERR: string;
+    export var SERVFAIL: string;
+    export var NOTFOUND: string;
+    export var NOTIMP: string;
+    export var REFUSED: string;
+    export var BADQUERY: string;
+    export var BADNAME: string;
+    export var BADFAMILY: string;
+    export var BADRESP: string;
+    export var CONNREFUSED: string;
+    export var TIMEOUT: string;
+    export var EOF: string;
+    export var FILE: string;
+    export var NOMEM: string;
+    export var DESTRUCTION: string;
+    export var BADSTR: string;
+    export var BADFLAGS: string;
+    export var NONAME: string;
+    export var BADHINTS: string;
+    export var NOTINITIALIZED: string;
+    export var LOADIPHLPAPI: string;
+    export var ADDRGETNETWORKPARAMS: string;
+    export var CANCELLED: string;
+}
+
+declare module "net" {
+    import * as stream from "stream";
+
+    export interface Socket extends stream.Duplex {
+        // Extended base methods
+        write(buffer: Buffer): boolean;
+        write(buffer: Buffer, cb?: Function): boolean;
+        write(str: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, cb?: Function): boolean;
+        write(str: string, encoding?: string, fd?: string): boolean;
+
+        connect(port: number, host?: string, connectionListener?: Function): void;
+        connect(path: string, connectionListener?: Function): void;
+        bufferSize: number;
+        setEncoding(encoding?: string): void;
+        write(data: any, encoding?: string, callback?: Function): void;
+        destroy(): void;
+        pause(): Socket;
+        resume(): Socket;
+        setTimeout(timeout: number, callback?: Function): void;
+        setNoDelay(noDelay?: boolean): void;
+        setKeepAlive(enable?: boolean, initialDelay?: number): void;
+        address(): { port: number; family: string; address: string; };
+        unref(): void;
+        ref(): void;
+
+        remoteAddress: string;
+        remoteFamily: string;
+        remotePort: number;
+        localAddress: string;
+        localPort: number;
+        bytesRead: number;
+        bytesWritten: number;
+
+        // Extended base methods
+        end(): void;
+        end(buffer: Buffer, cb?: Function): void;
+        end(str: string, cb?: Function): void;
+        end(str: string, encoding?: string, cb?: Function): void;
+        end(data?: any, encoding?: string): void;
+    }
+
+    export var Socket: {
+        new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket;
+    };
+
+    export interface ListenOptions {
+        port?: number;
+        host?: string;
+        backlog?: number;
+        path?: string;
+        exclusive?: boolean;
+    }
+
+    export interface Server extends Socket {
+        listen(port: number, hostname?: string, backlog?: number, listeningListener?: Function): Server;
+        listen(port: number, hostname?: string, listeningListener?: Function): Server;
+        listen(port: number, backlog?: number, listeningListener?: Function): Server;
+        listen(port: number, listeningListener?: Function): Server;
+        listen(path: string, backlog?: number, listeningListener?: Function): Server;
+        listen(path: string, listeningListener?: Function): Server;
+        listen(handle: any, backlog?: number, listeningListener?: Function): Server;
+        listen(handle: any, listeningListener?: Function): Server;
+        listen(options: ListenOptions, listeningListener?: Function): Server;
+        close(callback?: Function): Server;
+        address(): { port: number; family: string; address: string; };
+        getConnections(cb: (error: Error, count: number) => void): void;
+        ref(): Server;
+        unref(): Server;
+        maxConnections: number;
+        connections: number;
+    }
+    export function createServer(connectionListener?: (socket: Socket) => void): Server;
+    export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) => void): Server;
+    export function connect(options: { port: number, host?: string, localAddress?: string, localPort?: string, family?: number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket;
+    export function connect(port: number, host?: string, connectionListener?: Function): Socket;
+    export function connect(path: string, connectionListener?: Function): Socket;
+    export function createConnection(options: { port: number, host?: string, localAddress?: string, localPort?: string, family?: number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket;
+    export function createConnection(port: number, host?: string, connectionListener?: Function): Socket;
+    export function createConnection(path: string, connectionListener?: Function): Socket;
+    export function isIP(input: string): number;
+    export function isIPv4(input: string): boolean;
+    export function isIPv6(input: string): boolean;
+}
+
+declare module "dgram" {
+    import * as events from "events";
+
+    interface RemoteInfo {
+        address: string;
+        port: number;
+        size: number;
+    }
+
+    interface AddressInfo {
+        address: string;
+        family: string;
+        port: number;
+    }
+
+    interface BindOptions {
+        port: number;
+        address?: string;
+        exclusive?: boolean;
+    }
+
+    interface SocketOptions {
+        type: "udp4" | "udp6";
+        reuseAddr?: boolean;
+    }
+
+    export function createSocket(type: string, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+    export function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+
+    export interface Socket extends events.EventEmitter {
+        send(msg: Buffer | String | any[], port: number, address: string, callback?: (error: Error, bytes: number) => void): void;
+        send(msg: Buffer | String | any[], offset: number, length: number, port: number, address: string, callback?: (error: Error, bytes: number) => void): void;
+        bind(port?: number, address?: string, callback?: () => void): void;
+        bind(options: BindOptions, callback?: Function): void;
+        close(callback?: any): void;
+        address(): AddressInfo;
+        setBroadcast(flag: boolean): void;
+        setTTL(ttl: number): void;
+        setMulticastTTL(ttl: number): void;
+        setMulticastLoopback(flag: boolean): void;
+        addMembership(multicastAddress: string, multicastInterface?: string): void;
+        dropMembership(multicastAddress: string, multicastInterface?: string): void;
+        ref(): void;
+        unref(): void;
+    }
+}
+
+declare module "fs" {
+    import * as stream from "stream";
+    import * as events from "events";
+
+    interface Stats {
+        isFile(): boolean;
+        isDirectory(): boolean;
+        isBlockDevice(): boolean;
+        isCharacterDevice(): boolean;
+        isSymbolicLink(): boolean;
+        isFIFO(): boolean;
+        isSocket(): boolean;
+        dev: number;
+        ino: number;
+        mode: number;
+        nlink: number;
+        uid: number;
+        gid: number;
+        rdev: number;
+        size: number;
+        blksize: number;
+        blocks: number;
+        atime: Date;
+        mtime: Date;
+        ctime: Date;
+        birthtime: Date;
+    }
+
+    interface FSWatcher extends events.EventEmitter {
+        close(): void;
+        
+        /**
+         * events.EventEmitter
+         *   1. change
+         *   2. error
+         */
+        addListener(event: string, listener: Function): this;
+        addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        addListener(event: "error", listener: (code: number, signal: string) => void): this;
+        
+        on(event: string, listener: Function): this;
+        on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        on(event: "error", listener: (code: number, signal: string) => void): this;
+        
+        once(event: string, listener: Function): this;
+        once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        once(event: "error", listener: (code: number, signal: string) => void): this;
+        
+        prependListener(event: string, listener: Function): this;
+        prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        prependListener(event: "error", listener: (code: number, signal: string) => void): this;
+        
+        prependOnceListener(event: string, listener: Function): this;
+        prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        prependOnceListener(event: "error", listener: (code: number, signal: string) => void): this;
+    }
+
+    export interface ReadStream extends stream.Readable {
+        close(): void;
+        destroy(): void;
+        
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         */
+        addListener(event: string, listener: Function): this;
+        addListener(event: "open", listener: (fd: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        
+        on(event: string, listener: Function): this;
+        on(event: "open", listener: (fd: number) => void): this;
+        on(event: "close", listener: () => void): this;
+        
+        once(event: string, listener: Function): this;
+        once(event: "open", listener: (fd: number) => void): this;
+        once(event: "close", listener: () => void): this;
+        
+        prependListener(event: string, listener: Function): this;
+        prependListener(event: "open", listener: (fd: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        
+        prependOnceListener(event: string, listener: Function): this;
+        prependOnceListener(event: "open", listener: (fd: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+    }
+
+    export interface WriteStream extends stream.Writable {
+        close(): void;
+        bytesWritten: number;
+        path: string | Buffer;
+        
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         */
+        addListener(event: string, listener: Function): this;
+        addListener(event: "open", listener: (fd: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        
+        on(event: string, listener: Function): this;
+        on(event: "open", listener: (fd: number) => void): this;
+        on(event: "close", listener: () => void): this;
+        
+        once(event: string, listener: Function): this;
+        once(event: "open", listener: (fd: number) => void): this;
+        once(event: "close", listener: () => void): this;
+        
+        prependListener(event: string, listener: Function): this;
+        prependListener(event: "open", listener: (fd: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        
+        prependOnceListener(event: string, listener: Function): this;
+        prependOnceListener(event: "open", listener: (fd: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+    }
+
+    /**
+     * Asynchronous rename.
+     * @param oldPath
+     * @param newPath
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /**
+     * Synchronous rename
+     * @param oldPath
+     * @param newPath
+     */
+    export function renameSync(oldPath: string, newPath: string): void;
+    export function truncate(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function truncate(path: string | Buffer, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function truncateSync(path: string | Buffer, len?: number): void;
+    export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function ftruncateSync(fd: number, len?: number): void;
+    export function chown(path: string | Buffer, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function chownSync(path: string | Buffer, uid: number, gid: number): void;
+    export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function fchownSync(fd: number, uid: number, gid: number): void;
+    export function lchown(path: string | Buffer, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function lchownSync(path: string | Buffer, uid: number, gid: number): void;
+    export function chmod(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function chmod(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function chmodSync(path: string | Buffer, mode: number): void;
+    export function chmodSync(path: string | Buffer, mode: string): void;
+    export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function fchmodSync(fd: number, mode: number): void;
+    export function fchmodSync(fd: number, mode: string): void;
+    export function lchmod(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function lchmod(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function lchmodSync(path: string | Buffer, mode: number): void;
+    export function lchmodSync(path: string | Buffer, mode: string): void;
+    export function stat(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void;
+    export function lstat(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void;
+    export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void;
+    export function statSync(path: string | Buffer): Stats;
+    export function lstatSync(path: string | Buffer): Stats;
+    export function fstatSync(fd: number): Stats;
+    export function link(srcpath: string | Buffer, dstpath: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function linkSync(srcpath: string | Buffer, dstpath: string | Buffer): void;
+    export function symlink(srcpath: string | Buffer, dstpath: string | Buffer, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function symlinkSync(srcpath: string | Buffer, dstpath: string | Buffer, type?: string): void;
+    export function readlink(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void;
+    export function readlinkSync(path: string | Buffer): string;
+    export function realpath(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void;
+    export function realpath(path: string | Buffer, cache: { [path: string]: string }, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void;
+    export function realpathSync(path: string | Buffer, cache?: { [path: string]: string }): string;
+    /*
+     * Asynchronous unlink - deletes the file specified in {path}
+     *
+     * @param path
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function unlink(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /*
+     * Synchronous unlink - deletes the file specified in {path}
+     *
+     * @param path
+     */
+    export function unlinkSync(path: string | Buffer): void;
+    /*
+     * Asynchronous rmdir - removes the directory specified in {path}
+     *
+     * @param path
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function rmdir(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /*
+     * Synchronous rmdir - removes the directory specified in {path}
+     *
+     * @param path
+     */
+    export function rmdirSync(path: string | Buffer): void;
+    /*
+     * Asynchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.
+     *
+     * @param path
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function mkdir(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /*
+     * Asynchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.
+     *
+     * @param path
+     * @param mode
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function mkdir(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /*
+     * Asynchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.
+     *
+     * @param path
+     * @param mode
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function mkdir(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    /*
+     * Synchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.
+     *
+     * @param path
+     * @param mode
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function mkdirSync(path: string | Buffer, mode?: number): void;
+    /*
+     * Synchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.
+     *
+     * @param path
+     * @param mode
+     * @param callback No arguments other than a possible exception are given to the completion callback.
+     */
+    export function mkdirSync(path: string | Buffer, mode?: string): void;
+    /*
+     * Asynchronous mkdtemp - Creates a unique temporary directory. Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     *
+     * @param prefix
+     * @param callback The created folder path is passed as a string to the callback's second parameter.
+     */
+    export function mkdtemp(prefix: string, callback?: (err: NodeJS.ErrnoException, folder: string) => void): void;
+    /*
+     * Synchronous mkdtemp - Creates a unique temporary directory. Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     *
+     * @param prefix
+     * @returns Returns the created folder path.
+     */
+    export function mkdtempSync(prefix: string): string;
+    export function readdir(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void;
+    export function readdirSync(path: string | Buffer): string[];
+    export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function closeSync(fd: number): void;
+    export function open(path: string | Buffer, flags: string | number, callback: (err: NodeJS.ErrnoException, fd: number) => void): void;
+    export function open(path: string | Buffer, flags: string | number, mode: number, callback: (err: NodeJS.ErrnoException, fd: number) => void): void;
+    export function openSync(path: string | Buffer, flags: string | number, mode?: number): number;
+    export function utimes(path: string | Buffer, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function utimes(path: string | Buffer, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function utimesSync(path: string | Buffer, atime: number, mtime: number): void;
+    export function utimesSync(path: string | Buffer, atime: Date, mtime: Date): void;
+    export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function futimesSync(fd: number, atime: number, mtime: number): void;
+    export function futimesSync(fd: number, atime: Date, mtime: Date): void;
+    export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void;
+    export function fsyncSync(fd: number): void;
+    export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void;
+    export function write(fd: number, buffer: Buffer, offset: number, length: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void;
+    export function write(fd: number, data: any, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void;
+    export function write(fd: number, data: any, offset: number, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void;
+    export function write(fd: number, data: any, offset: number, encoding: string, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void;
+    export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position?: number): number;
+    export function writeSync(fd: number, data: any, position?: number, enconding?: string): number;
+    export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void;
+    export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number;
+    /*
+     * Asynchronous readFile - Asynchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param encoding
+     * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file.
+     */
+    export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void;
+    /*
+     * Asynchronous readFile - Asynchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param options An object with optional {encoding} and {flag} properties.  If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer.
+     * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file.
+     */
+    export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void;
+    /*
+     * Asynchronous readFile - Asynchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param options An object with optional {encoding} and {flag} properties.  If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer.
+     * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file.
+     */
+    export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void;
+    /*
+     * Asynchronous readFile - Asynchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file.
+     */
+    export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void;
+    /*
+     * Synchronous readFile - Synchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param encoding
+     */
+    export function readFileSync(filename: string, encoding: string): string;
+    /*
+     * Synchronous readFile - Synchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param options An object with optional {encoding} and {flag} properties.  If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer.
+     */
+    export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string;
+    /*
+     * Synchronous readFile - Synchronously reads the entire contents of a file.
+     *
+     * @param fileName
+     * @param options An object with optional {encoding} and {flag} properties.  If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer.
+     */
+    export function readFileSync(filename: string, options?: { flag?: string; }): Buffer;
+    export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void;
+    export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void;
+    export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void;
+    export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void;
+    export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void;
+    export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void;
+    export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void;
+    export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void;
+    export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher;
+    export function watch(filename: string, encoding: string, listener?: (event: string, filename: string | Buffer) => any): FSWatcher;
+    export function watch(filename: string, options: { persistent?: boolean; recursive?: boolean; encoding?: string }, listener?: (event: string, filename: string | Buffer) => any): FSWatcher;
+    export function exists(path: string | Buffer, callback?: (exists: boolean) => void): void;
+    export function existsSync(path: string | Buffer): boolean;
+
+    interface Constants {
+        /** Constant for fs.access(). File is visible to the calling process. */
+        F_OK: number;
+
+        /** Constant for fs.access(). File can be read by the calling process. */
+        R_OK: number;
+
+        /** Constant for fs.access(). File can be written by the calling process. */
+        W_OK: number;
+
+        /** Constant for fs.access(). File can be executed by the calling process. */
+        X_OK: number;
+    }
+
+    export const constants: Constants;
+
+    /** Tests a user's permissions for the file specified by path. */
+    export function access(path: string | Buffer, callback: (err: NodeJS.ErrnoException) => void): void;
+    export function access(path: string | Buffer, mode: number, callback: (err: NodeJS.ErrnoException) => void): void;
+    /** Synchronous version of fs.access. This throws if any accessibility checks fail, and does nothing otherwise. */
+    export function accessSync(path: string | Buffer, mode?: number): void;
+    export function createReadStream(path: string | Buffer, options?: {
+        flags?: string;
+        encoding?: string;
+        fd?: number;
+        mode?: number;
+        autoClose?: boolean;
+        start?: number;
+        end?: number;
+    }): ReadStream;
+    export function createWriteStream(path: string | Buffer, options?: {
+        flags?: string;
+        encoding?: string;
+        fd?: number;
+        mode?: number;
+    }): WriteStream;
+    export function fdatasync(fd: number, callback: Function): void;
+    export function fdatasyncSync(fd: number): void;
+}
+
+declare module "path" {
+
+    /**
+     * A parsed path object generated by path.parse() or consumed by path.format().
+     */
+    export interface ParsedPath {
+        /**
+         * The root of the path such as '/' or 'c:\'
+         */
+        root: string;
+        /**
+         * The full directory path such as '/home/user/dir' or 'c:\path\dir'
+         */
+        dir: string;
+        /**
+         * The file name including extension (if any) such as 'index.html'
+         */
+        base: string;
+        /**
+         * The file extension (if any) such as '.html'
+         */
+        ext: string;
+        /**
+         * The file name without extension (if any) such as 'index'
+         */
+        name: string;
+    }
+
+    /**
+     * Normalize a string path, reducing '..' and '.' parts.
+     * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.
+     *
+     * @param p string path to normalize.
+     */
+    export function normalize(p: string): string;
+    /**
+     * Join all arguments together and normalize the resulting path.
+     * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
+     *
+     * @param paths string paths to join.
+     */
+    export function join(...paths: any[]): string;
+    /**
+     * Join all arguments together and normalize the resulting path.
+     * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
+     *
+     * @param paths string paths to join.
+     */
+    export function join(...paths: string[]): string;
+    /**
+     * The right-most parameter is considered {to}.  Other parameters are considered an array of {from}.
+     *
+     * Starting from leftmost {from} paramter, resolves {to} to an absolute path.
+     *
+     * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.
+     *
+     * @param pathSegments string paths to join.  Non-string arguments are ignored.
+     */
+    export function resolve(...pathSegments: any[]): string;
+    /**
+     * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory.
+     *
+     * @param path path to test.
+     */
+    export function isAbsolute(path: string): boolean;
+    /**
+     * Solve the relative path from {from} to {to}.
+     * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.
+     *
+     * @param from
+     * @param to
+     */
+    export function relative(from: string, to: string): string;
+    /**
+     * Return the directory name of a path. Similar to the Unix dirname command.
+     *
+     * @param p the path to evaluate.
+     */
+    export function dirname(p: string): string;
+    /**
+     * Return the last portion of a path. Similar to the Unix basename command.
+     * Often used to extract the file name from a fully qualified path.
+     *
+     * @param p the path to evaluate.
+     * @param ext optionally, an extension to remove from the result.
+     */
+    export function basename(p: string, ext?: string): string;
+    /**
+     * Return the extension of the path, from the last '.' to end of string in the last portion of the path.
+     * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string
+     *
+     * @param p the path to evaluate.
+     */
+    export function extname(p: string): string;
+    /**
+     * The platform-specific file separator. '\\' or '/'.
+     */
+    export var sep: string;
+    /**
+     * The platform-specific file delimiter. ';' or ':'.
+     */
+    export var delimiter: string;
+    /**
+     * Returns an object from a path string - the opposite of format().
+     *
+     * @param pathString path to evaluate.
+     */
+    export function parse(pathString: string): ParsedPath;
+    /**
+     * Returns a path string from an object - the opposite of parse().
+     *
+     * @param pathString path to evaluate.
+     */
+    export function format(pathObject: ParsedPath): string;
+
+    export module posix {
+        export function normalize(p: string): string;
+        export function join(...paths: any[]): string;
+        export function resolve(...pathSegments: any[]): string;
+        export function isAbsolute(p: string): boolean;
+        export function relative(from: string, to: string): string;
+        export function dirname(p: string): string;
+        export function basename(p: string, ext?: string): string;
+        export function extname(p: string): string;
+        export var sep: string;
+        export var delimiter: string;
+        export function parse(p: string): ParsedPath;
+        export function format(pP: ParsedPath): string;
+    }
+
+    export module win32 {
+        export function normalize(p: string): string;
+        export function join(...paths: any[]): string;
+        export function resolve(...pathSegments: any[]): string;
+        export function isAbsolute(p: string): boolean;
+        export function relative(from: string, to: string): string;
+        export function dirname(p: string): string;
+        export function basename(p: string, ext?: string): string;
+        export function extname(p: string): string;
+        export var sep: string;
+        export var delimiter: string;
+        export function parse(p: string): ParsedPath;
+        export function format(pP: ParsedPath): string;
+    }
+}
+
+declare module "string_decoder" {
+    export interface NodeStringDecoder {
+        write(buffer: Buffer): string;
+        end(buffer?: Buffer): string;
+    }
+    export var StringDecoder: {
+        new (encoding?: string): NodeStringDecoder;
+    };
+}
+
+declare module "tls" {
+    import * as crypto from "crypto";
+    import * as net from "net";
+    import * as stream from "stream";
+
+    var CLIENT_RENEG_LIMIT: number;
+    var CLIENT_RENEG_WINDOW: number;
+
+    export interface Certificate {
+        /**
+         * Country code.
+         */
+        C: string;
+        /**
+         * Street.
+         */
+        ST: string;
+        /**
+         * Locality.
+         */
+        L: string;
+        /**
+         * Organization.
+         */
+        O: string;
+        /**
+         * Organizational unit.
+         */
+        OU: string;
+        /**
+         * Common name.
+         */
+        CN: string;
+    }
+
+    export interface CipherNameAndProtocol {
+        /**
+         * The cipher name.
+         */
+        name: string;
+        /**
+         * SSL/TLS protocol version.
+         */
+        version: string;
+    }
+
+    export class TLSSocket extends stream.Duplex {
+        /**
+         * Returns the bound address, the address family name and port of the underlying socket as reported by
+         * the operating system.
+         * @returns {any} - An object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' }.
+         */
+        address(): { port: number; family: string; address: string };
+        /**
+         * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false.
+         */
+        authorized: boolean;
+        /**
+         * The reason why the peer's certificate has not been verified.
+         * This property becomes available only when tlsSocket.authorized === false.
+         */
+        authorizationError: Error;
+        /**
+         * Static boolean value, always true.
+         * May be used to distinguish TLS sockets from regular ones.
+         */
+        encrypted: boolean;
+        /**
+         * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection.
+         * @returns {CipherNameAndProtocol} - Returns an object representing the cipher name
+         * and the SSL/TLS protocol version of the current connection.
+         */
+        getCipher(): CipherNameAndProtocol;
+        /**
+         * Returns an object representing the peer's certificate.
+         * The returned object has some properties corresponding to the field of the certificate.
+         * If detailed argument is true the full chain with issuer property will be returned,
+         * if false only the top certificate without issuer property.
+         * If the peer does not provide a certificate, it returns null or an empty object.
+         * @param {boolean} detailed - If true; the full chain with issuer property will be returned.
+         * @returns {any} - An object representing the peer's certificate.
+         */
+        getPeerCertificate(detailed?: boolean): {
+            subject: Certificate;
+            issuerInfo: Certificate;
+            issuer: Certificate;
+            raw: any;
+            valid_from: string;
+            valid_to: string;
+            fingerprint: string;
+            serialNumber: string;
+        };
+        /**
+         * Could be used to speed up handshake establishment when reconnecting to the server.
+         * @returns {any} - ASN.1 encoded TLS session or undefined if none was negotiated.
+         */
+        getSession(): any;
+        /**
+         * NOTE: Works only with client TLS sockets.
+         * Useful only for debugging, for session reuse provide session option to tls.connect().
+         * @returns {any} - TLS session ticket or undefined if none was negotiated.
+         */
+        getTLSTicket(): any;
+        /**
+         * The string representation of the local IP address.
+         */
+        localAddress: string;
+        /**
+         * The numeric representation of the local port.
+         */
+        localPort: string;
+        /**
+         * The string representation of the remote IP address.
+         * For example, '74.125.127.100' or '2001:4860:a005::68'.
+         */
+        remoteAddress: string;
+        /**
+         * The string representation of the remote IP family. 'IPv4' or 'IPv6'.
+         */
+        remoteFamily: string;
+        /**
+         * The numeric representation of the remote port. For example, 443.
+         */
+        remotePort: number;
+        /**
+         * Initiate TLS renegotiation process.
+         *
+         * NOTE: Can be used to request peer's certificate after the secure connection has been established.
+         * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout.
+         * @param {TlsOptions} options - The options may contain the following fields: rejectUnauthorized,
+         * requestCert (See tls.createServer() for details).
+         * @param {Function} callback - callback(err) will be executed with null as err, once the renegotiation
+         * is successfully completed.
+         */
+        renegotiate(options: TlsOptions, callback: (err: Error) => any): any;
+        /**
+         * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512).
+         * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by
+         * the TLS layer until the entire fragment is received and its integrity is verified;
+         * large fragments can span multiple roundtrips, and their processing can be delayed due to packet
+         * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead,
+         * which may decrease overall server throughput.
+         * @param {number} size - TLS fragment size (default and maximum value is: 16384, minimum is: 512).
+         * @returns {boolean} - Returns true on success, false otherwise.
+         */
+        setMaxSendFragment(size: number): boolean;
+    }
+
+    export interface TlsOptions {
+        host?: string;
+        port?: number;
+        pfx?: string | Buffer[];
+        key?: string | string[] | Buffer | any[];
+        passphrase?: string;
+        cert?: string | string[] | Buffer | Buffer[];
+        ca?: string | string[] | Buffer | Buffer[];
+        crl?: string | string[];
+        ciphers?: string;
+        honorCipherOrder?: boolean;
+        requestCert?: boolean;
+        rejectUnauthorized?: boolean;
+        NPNProtocols?: string[] | Buffer;
+        SNICallback?: (servername: string, cb: (err: Error, ctx: SecureContext) => any) => any;
+        ecdhCurve?: string;
+        dhparam?: string | Buffer;
+        handshakeTimeout?: number;
+        ALPNProtocols?: string[] | Buffer;
+        sessionTimeout?: number;
+        ticketKeys?: any;
+        sessionIdContext?: string;
+        secureProtocol?: string;
+    }
+
+    export interface ConnectionOptions {
+        host?: string;
+        port?: number;
+        socket?: net.Socket;
+        pfx?: string | Buffer
+        key?: string | string[] | Buffer | Buffer[];
+        passphrase?: string;
+        cert?: string | string[] | Buffer | Buffer[];
+        ca?: string | Buffer | (string | Buffer)[];
+        rejectUnauthorized?: boolean;
+        NPNProtocols?: (string | Buffer)[];
+        servername?: string;
+        path?: string;
+        ALPNProtocols?: (string | Buffer)[];
+        checkServerIdentity?: (servername: string, cert: string | Buffer | (string | Buffer)[]) => any;
+        secureProtocol?: string;
+        secureContext?: Object;
+        session?: Buffer;
+        minDHSize?: number;
+    }
+
+    export interface Server extends net.Server {
+        close(): Server;
+        address(): { port: number; family: string; address: string; };
+        addContext(hostName: string, credentials: {
+            key: string;
+            cert: string;
+            ca: string;
+        }): void;
+        maxConnections: number;
+        connections: number;
+    }
+
+    export interface ClearTextStream extends stream.Duplex {
+        authorized: boolean;
+        authorizationError: Error;
+        getPeerCertificate(): any;
+        getCipher: {
+            name: string;
+            version: string;
+        };
+        address: {
+            port: number;
+            family: string;
+            address: string;
+        };
+        remoteAddress: string;
+        remotePort: number;
+    }
+
+    export interface SecurePair {
+        encrypted: any;
+        cleartext: any;
+    }
+
+    export interface SecureContextOptions {
+        pfx?: string | Buffer;
+        key?: string | Buffer;
+        passphrase?: string;
+        cert?: string | Buffer;
+        ca?: string | Buffer;
+        crl?: string | string[]
+        ciphers?: string;
+        honorCipherOrder?: boolean;
+    }
+
+    export interface SecureContext {
+        context: any;
+    }
+
+    export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) => void): Server;
+    export function connect(options: ConnectionOptions, secureConnectionListener?: () => void): ClearTextStream;
+    export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): ClearTextStream;
+    export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): ClearTextStream;
+    export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair;
+    export function createSecureContext(details: SecureContextOptions): SecureContext;
+}
+
+declare module "crypto" {
+    export interface Certificate {
+        exportChallenge(spkac: string | Buffer): Buffer;
+        exportPublicKey(spkac: string | Buffer): Buffer;
+        verifySpkac(spkac: Buffer): boolean;
+    }
+    export var Certificate: {
+        new (): Certificate;
+        (): Certificate;
+    }
+
+    export var fips: boolean;
+
+    export interface CredentialDetails {
+        pfx: string;
+        key: string;
+        passphrase: string;
+        cert: string;
+        ca: string | string[];
+        crl: string | string[];
+        ciphers: string;
+    }
+    export interface Credentials { context?: any; }
+    export function createCredentials(details: CredentialDetails): Credentials;
+    export function createHash(algorithm: string): Hash;
+    export function createHmac(algorithm: string, key: string | Buffer): Hmac;
+
+    type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1";
+    type HexBase64Latin1Encoding = "latin1" | "hex" | "base64";
+    type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary";
+    type HexBase64BinaryEncoding = "binary" | "base64" | "hex";
+    type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
+
+    export interface Hash extends NodeJS.ReadWriteStream {
+        update(data: string | Buffer): Hash;
+        update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hash;
+        digest(): Buffer;
+        digest(encoding: HexBase64Latin1Encoding): string;
+    }
+    export interface Hmac extends NodeJS.ReadWriteStream {
+        update(data: string | Buffer): Hmac;
+        update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hmac;
+        digest(): Buffer;
+        digest(encoding: HexBase64Latin1Encoding): string;
+    }
+    export function createCipher(algorithm: string, password: any): Cipher;
+    export function createCipheriv(algorithm: string, key: any, iv: any): Cipher;
+    export interface Cipher extends NodeJS.ReadWriteStream {
+        update(data: Buffer): Buffer;
+        update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer;
+        update(data: Buffer, input_encoding: any, output_encoding: HexBase64BinaryEncoding): string;
+        update(data: string, input_encoding: Utf8AsciiBinaryEncoding, output_encoding: HexBase64BinaryEncoding): string;
+        final(): Buffer;
+        final(output_encoding: string): string;
+        setAutoPadding(auto_padding?: boolean): void;
+        getAuthTag(): Buffer;
+        setAAD(buffer: Buffer): void;
+    }
+    export function createDecipher(algorithm: string, password: any): Decipher;
+    export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher;
+    export interface Decipher extends NodeJS.ReadWriteStream {
+        update(data: Buffer): Buffer;
+        update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer;
+        update(data: Buffer, input_encoding: any, output_encoding: Utf8AsciiBinaryEncoding): string;
+        update(data: string, input_encoding: HexBase64BinaryEncoding, output_encoding: Utf8AsciiBinaryEncoding): string;
+        final(): Buffer;
+        final(output_encoding: string): string;
+        setAutoPadding(auto_padding?: boolean): void;
+        setAuthTag(tag: Buffer): void;
+        setAAD(buffer: Buffer): void;
+    }
+    export function createSign(algorithm: string): Signer;
+    export interface Signer extends NodeJS.WritableStream {
+        update(data: string | Buffer): Signer;
+        update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Signer;
+        sign(private_key: string | { key: string; passphrase: string }): Buffer;
+        sign(private_key: string | { key: string; passphrase: string }, output_format: HexBase64Latin1Encoding): string;
+    }
+    export function createVerify(algorith: string): Verify;
+    export interface Verify extends NodeJS.WritableStream {
+        update(data: string | Buffer): Verify;
+        update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Verify;
+        verify(object: string, signature: Buffer): boolean;
+        verify(object: string, signature: string, signature_format: HexBase64Latin1Encoding): boolean;
+    }
+    export function createDiffieHellman(prime_length: number, generator?: number): DiffieHellman;
+    export function createDiffieHellman(prime: Buffer): DiffieHellman;
+    export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman;
+    export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | Buffer): DiffieHellman;
+    export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman;
+    export interface DiffieHellman {
+        generateKeys(): Buffer;
+        generateKeys(encoding: HexBase64Latin1Encoding): string;
+        computeSecret(other_public_key: Buffer): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+        getPrime(): Buffer;
+        getPrime(encoding: HexBase64Latin1Encoding): string;
+        getGenerator(): Buffer;
+        getGenerator(encoding: HexBase64Latin1Encoding): string;
+        getPublicKey(): Buffer;
+        getPublicKey(encoding: HexBase64Latin1Encoding): string;
+        getPrivateKey(): Buffer;
+        getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+        setPublicKey(public_key: Buffer): void;
+        setPublicKey(public_key: string, encoding: string): void;
+        setPrivateKey(private_key: Buffer): void;
+        setPrivateKey(private_key: string, encoding: string): void;
+        verifyError: number;
+    }
+    export function getDiffieHellman(group_name: string): DiffieHellman;
+    export function pbkdf2(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string, callback: (err: Error, derivedKey: Buffer) => any): void;
+    export function pbkdf2Sync(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string): Buffer;
+    export function randomBytes(size: number): Buffer;
+    export function randomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void;
+    export function pseudoRandomBytes(size: number): Buffer;
+    export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void;
+    export interface RsaPublicKey {
+        key: string;
+        padding?: number;
+    }
+    export interface RsaPrivateKey {
+        key: string;
+        passphrase?: string,
+        padding?: number;
+    }
+    export function publicEncrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer
+    export function privateDecrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer
+    export function privateEncrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer
+    export function publicDecrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer
+    export function getCiphers(): string[];
+    export function getCurves(): string[];
+    export function getHashes(): string[];
+    export interface ECDH {
+        generateKeys(): Buffer;
+        generateKeys(encoding: HexBase64Latin1Encoding): string;
+        generateKeys(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string;
+        computeSecret(other_public_key: Buffer): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+        getPrivateKey(): Buffer;
+        getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+        getPublicKey(): Buffer;
+        getPublicKey(encoding: HexBase64Latin1Encoding): string;
+        getPublicKey(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string;
+        setPrivateKey(private_key: Buffer): void;
+        setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void;
+    }
+    export function createECDH(curve_name: string): ECDH;
+    export var DEFAULT_ENCODING: string;
+}
+
+declare module "stream" {
+    import * as events from "events";
+
+    class internal extends events.EventEmitter {
+        pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
+    }
+    namespace internal {
+
+        export class Stream extends internal { }
+
+        export interface ReadableOptions {
+            highWaterMark?: number;
+            encoding?: string;
+            objectMode?: boolean;
+            read?: (size?: number) => any;
+        }
+
+        export class Readable extends events.EventEmitter implements NodeJS.ReadableStream {
+            readable: boolean;
+            constructor(opts?: ReadableOptions);
+            _read(size: number): void;
+            read(size?: number): any;
+            setEncoding(encoding: string): void;
+            pause(): Readable;
+            resume(): Readable;
+            pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
+            unpipe<T extends NodeJS.WritableStream>(destination?: T): void;
+            unshift(chunk: any): void;
+            wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream;
+            push(chunk: any, encoding?: string): boolean;
+
+            /**
+             * Event emitter
+             * The defined events on documents including:
+             *   1. close
+             *   2. data
+             *   3. end
+             *   4. readable
+             *   5. error
+             **/
+            addListener(event: string, listener: Function): this;
+            addListener(event: string, listener: Function): this;
+            addListener(event: "close", listener: () => void): this;
+            addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+            addListener(event: "end", listener: () => void): this;
+            addListener(event: "readable", listener: () => void): this;
+            addListener(event: "error", listener: (err: Error) => void): this;
+
+            emit(event: string, ...args: any[]): boolean;
+            emit(event: "close"): boolean;
+            emit(event: "data", chunk: Buffer | string): boolean;
+            emit(event: "end"): boolean;
+            emit(event: "readable"): boolean;
+            emit(event: "error", err: Error): boolean;
+
+            on(event: string, listener: Function): this;
+            on(event: "close", listener: () => void): this;
+            on(event: "data", listener: (chunk: Buffer | string) => void): this;
+            on(event: "end", listener: () => void): this;
+            on(event: "readable", listener: () => void): this;
+            on(event: "error", listener: (err: Error) => void): this;
+
+            once(event: string, listener: Function): this;
+            once(event: "close", listener: () => void): this;
+            once(event: "data", listener: (chunk: Buffer | string) => void): this;
+            once(event: "end", listener: () => void): this;
+            once(event: "readable", listener: () => void): this;
+            once(event: "error", listener: (err: Error) => void): this;
+
+            prependListener(event: string, listener: Function): this;
+            prependListener(event: "close", listener: () => void): this;
+            prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+            prependListener(event: "end", listener: () => void): this;
+            prependListener(event: "readable", listener: () => void): this;
+            prependListener(event: "error", listener: (err: Error) => void): this;
+
+            prependOnceListener(event: string, listener: Function): this;
+            prependOnceListener(event: "close", listener: () => void): this;
+            prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+            prependOnceListener(event: "end", listener: () => void): this;
+            prependOnceListener(event: "readable", listener: () => void): this;
+            prependOnceListener(event: "error", listener: (err: Error) => void): this;
+
+            removeListener(event: string, listener: Function): this;
+            removeListener(event: "close", listener: () => void): this;
+            removeListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+            removeListener(event: "end", listener: () => void): this;
+            removeListener(event: "readable", listener: () => void): this;
+            removeListener(event: "error", listener: (err: Error) => void): this;
+        }
+
+        export interface WritableOptions {
+            highWaterMark?: number;
+            decodeStrings?: boolean;
+            objectMode?: boolean;
+            write?: (chunk: string | Buffer, encoding: string, callback: Function) => any;
+            writev?: (chunks: { chunk: string | Buffer, encoding: string }[], callback: Function) => any;
+        }
+
+        export class Writable extends events.EventEmitter implements NodeJS.WritableStream {
+            writable: boolean;
+            constructor(opts?: WritableOptions);
+            _write(chunk: any, encoding: string, callback: Function): void;
+            write(chunk: any, cb?: Function): boolean;
+            write(chunk: any, encoding?: string, cb?: Function): boolean;
+            end(): void;
+            end(chunk: any, cb?: Function): void;
+            end(chunk: any, encoding?: string, cb?: Function): void;
+
+            /**
+             * Event emitter
+             * The defined events on documents including:
+             *   1. close
+             *   2. drain
+             *   3. error
+             *   4. finish
+             *   5. pipe
+             *   6. unpipe
+             **/
+            addListener(event: string, listener: Function): this;
+            addListener(event: "close", listener: () => void): this;
+            addListener(event: "drain", listener: () => void): this;
+            addListener(event: "error", listener: (err: Error) => void): this;
+            addListener(event: "finish", listener: () => void): this;
+            addListener(event: "pipe", listener: (src: Readable) => void): this;
+            addListener(event: "unpipe", listener: (src: Readable) => void): this;
+
+            emit(event: string, ...args: any[]): boolean;
+            emit(event: "close"): boolean;
+            emit(event: "drain", chunk: Buffer | string): boolean;
+            emit(event: "error", err: Error): boolean;
+            emit(event: "finish"): boolean;
+            emit(event: "pipe", src: Readable): boolean;
+            emit(event: "unpipe", src: Readable): boolean;
+
+            on(event: string, listener: Function): this;
+            on(event: "close", listener: () => void): this;
+            on(event: "drain", listener: () => void): this;
+            on(event: "error", listener: (err: Error) => void): this;
+            on(event: "finish", listener: () => void): this;
+            on(event: "pipe", listener: (src: Readable) => void): this;
+            on(event: "unpipe", listener: (src: Readable) => void): this;
+
+            once(event: string, listener: Function): this;
+            once(event: "close", listener: () => void): this;
+            once(event: "drain", listener: () => void): this;
+            once(event: "error", listener: (err: Error) => void): this;
+            once(event: "finish", listener: () => void): this;
+            once(event: "pipe", listener: (src: Readable) => void): this;
+            once(event: "unpipe", listener: (src: Readable) => void): this;
+
+            prependListener(event: string, listener: Function): this;
+            prependListener(event: "close", listener: () => void): this;
+            prependListener(event: "drain", listener: () => void): this;
+            prependListener(event: "error", listener: (err: Error) => void): this;
+            prependListener(event: "finish", listener: () => void): this;
+            prependListener(event: "pipe", listener: (src: Readable) => void): this;
+            prependListener(event: "unpipe", listener: (src: Readable) => void): this;
+
+            prependOnceListener(event: string, listener: Function): this;
+            prependOnceListener(event: "close", listener: () => void): this;
+            prependOnceListener(event: "drain", listener: () => void): this;
+            prependOnceListener(event: "error", listener: (err: Error) => void): this;
+            prependOnceListener(event: "finish", listener: () => void): this;
+            prependOnceListener(event: "pipe", listener: (src: Readable) => void): this;
+            prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this;
+
+            removeListener(event: string, listener: Function): this;
+            removeListener(event: "close", listener: () => void): this;
+            removeListener(event: "drain", listener: () => void): this;
+            removeListener(event: "error", listener: (err: Error) => void): this;
+            removeListener(event: "finish", listener: () => void): this;
+            removeListener(event: "pipe", listener: (src: Readable) => void): this;
+            removeListener(event: "unpipe", listener: (src: Readable) => void): this;
+        }
+
+        export interface DuplexOptions extends ReadableOptions, WritableOptions {
+            allowHalfOpen?: boolean;
+            readableObjectMode?: boolean;
+            writableObjectMode?: boolean;
+        }
+
+        // Note: Duplex extends both Readable and Writable.
+        export class Duplex extends Readable implements NodeJS.ReadWriteStream {
+            // Readable
+            pause(): Duplex;
+            resume(): Duplex;
+            // Writeable
+            writable: boolean;
+            constructor(opts?: DuplexOptions);
+            _write(chunk: any, encoding: string, callback: Function): void;
+            write(chunk: any, cb?: Function): boolean;
+            write(chunk: any, encoding?: string, cb?: Function): boolean;
+            end(): void;
+            end(chunk: any, cb?: Function): void;
+            end(chunk: any, encoding?: string, cb?: Function): void;
+        }
+
+        export interface TransformOptions extends ReadableOptions, WritableOptions {
+            transform?: (chunk: string | Buffer, encoding: string, callback: Function) => any;
+            flush?: (callback: Function) => any;
+        }
+
+        // Note: Transform lacks the _read and _write methods of Readable/Writable.
+        export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream {
+            readable: boolean;
+            writable: boolean;
+            constructor(opts?: TransformOptions);
+            _transform(chunk: any, encoding: string, callback: Function): void;
+            _flush(callback: Function): void;
+            read(size?: number): any;
+            setEncoding(encoding: string): void;
+            pause(): Transform;
+            resume(): Transform;
+            pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
+            unpipe<T extends NodeJS.WritableStream>(destination?: T): void;
+            unshift(chunk: any): void;
+            wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream;
+            push(chunk: any, encoding?: string): boolean;
+            write(chunk: any, cb?: Function): boolean;
+            write(chunk: any, encoding?: string, cb?: Function): boolean;
+            end(): void;
+            end(chunk: any, cb?: Function): void;
+            end(chunk: any, encoding?: string, cb?: Function): void;
+        }
+
+        export class PassThrough extends Transform { }
+    }
+
+    export = internal;
+}
+
+declare module "util" {
+    export interface InspectOptions {
+        showHidden?: boolean;
+        depth?: number;
+        colors?: boolean;
+        customInspect?: boolean;
+    }
+
+    export function format(format: any, ...param: any[]): string;
+    export function debug(string: string): void;
+    export function error(...param: any[]): void;
+    export function puts(...param: any[]): void;
+    export function print(...param: any[]): void;
+    export function log(string: string): void;
+    export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string;
+    export function inspect(object: any, options: InspectOptions): string;
+    export function isArray(object: any): boolean;
+    export function isRegExp(object: any): boolean;
+    export function isDate(object: any): boolean;
+    export function isError(object: any): boolean;
+    export function inherits(constructor: any, superConstructor: any): void;
+    export function debuglog(key: string): (msg: string, ...param: any[]) => void;
+    export function isBoolean(object: any): boolean;
+    export function isBuffer(object: any): boolean;
+    export function isFunction(object: any): boolean;
+    export function isNull(object: any): boolean;
+    export function isNullOrUndefined(object: any): boolean;
+    export function isNumber(object: any): boolean;
+    export function isObject(object: any): boolean;
+    export function isPrimitive(object: any): boolean;
+    export function isString(object: any): boolean;
+    export function isSymbol(object: any): boolean;
+    export function isUndefined(object: any): boolean;
+    export function deprecate(fn: Function, message: string): Function;
+}
+
+declare module "assert" {
+    function internal(value: any, message?: string): void;
+    namespace internal {
+        export class AssertionError implements Error {
+            name: string;
+            message: string;
+            actual: any;
+            expected: any;
+            operator: string;
+            generatedMessage: boolean;
+
+            constructor(options?: {
+                message?: string; actual?: any; expected?: any;
+                operator?: string; stackStartFunction?: Function
+            });
+        }
+
+        export function fail(actual: any, expected: any, message: string, operator: string): void;
+        export function ok(value: any, message?: string): void;
+        export function equal(actual: any, expected: any, message?: string): void;
+        export function notEqual(actual: any, expected: any, message?: string): void;
+        export function deepEqual(actual: any, expected: any, message?: string): void;
+        export function notDeepEqual(acutal: any, expected: any, message?: string): void;
+        export function strictEqual(actual: any, expected: any, message?: string): void;
+        export function notStrictEqual(actual: any, expected: any, message?: string): void;
+        export function deepStrictEqual(actual: any, expected: any, message?: string): void;
+        export function notDeepStrictEqual(actual: any, expected: any, message?: string): void;
+        export var throws: {
+            (block: Function, message?: string): void;
+            (block: Function, error: Function, message?: string): void;
+            (block: Function, error: RegExp, message?: string): void;
+            (block: Function, error: (err: any) => boolean, message?: string): void;
+        };
+
+        export var doesNotThrow: {
+            (block: Function, message?: string): void;
+            (block: Function, error: Function, message?: string): void;
+            (block: Function, error: RegExp, message?: string): void;
+            (block: Function, error: (err: any) => boolean, message?: string): void;
+        };
+
+        export function ifError(value: any): void;
+    }
+
+    export = internal;
+}
+
+declare module "tty" {
+    import * as net from "net";
+
+    export function isatty(fd: number): boolean;
+    export interface ReadStream extends net.Socket {
+        isRaw: boolean;
+        setRawMode(mode: boolean): void;
+        isTTY: boolean;
+    }
+    export interface WriteStream extends net.Socket {
+        columns: number;
+        rows: number;
+        isTTY: boolean;
+    }
+}
+
+declare module "domain" {
+    import * as events from "events";
+
+    export class Domain extends events.EventEmitter implements NodeJS.Domain {
+        run(fn: Function): void;
+        add(emitter: events.EventEmitter): void;
+        remove(emitter: events.EventEmitter): void;
+        bind(cb: (err: Error, data: any) => any): any;
+        intercept(cb: (data: any) => any): any;
+        dispose(): void;
+        members: any[];
+        enter(): void;
+        exit(): void;
+    }
+
+    export function create(): Domain;
+}
+
+declare module "constants" {
+    export var E2BIG: number;
+    export var EACCES: number;
+    export var EADDRINUSE: number;
+    export var EADDRNOTAVAIL: number;
+    export var EAFNOSUPPORT: number;
+    export var EAGAIN: number;
+    export var EALREADY: number;
+    export var EBADF: number;
+    export var EBADMSG: number;
+    export var EBUSY: number;
+    export var ECANCELED: number;
+    export var ECHILD: number;
+    export var ECONNABORTED: number;
+    export var ECONNREFUSED: number;
+    export var ECONNRESET: number;
+    export var EDEADLK: number;
+    export var EDESTADDRREQ: number;
+    export var EDOM: number;
+    export var EEXIST: number;
+    export var EFAULT: number;
+    export var EFBIG: number;
+    export var EHOSTUNREACH: number;
+    export var EIDRM: number;
+    export var EILSEQ: number;
+    export var EINPROGRESS: number;
+    export var EINTR: number;
+    export var EINVAL: number;
+    export var EIO: number;
+    export var EISCONN: number;
+    export var EISDIR: number;
+    export var ELOOP: number;
+    export var EMFILE: number;
+    export var EMLINK: number;
+    export var EMSGSIZE: number;
+    export var ENAMETOOLONG: number;
+    export var ENETDOWN: number;
+    export var ENETRESET: number;
+    export var ENETUNREACH: number;
+    export var ENFILE: number;
+    export var ENOBUFS: number;
+    export var ENODATA: number;
+    export var ENODEV: number;
+    export var ENOENT: number;
+    export var ENOEXEC: number;
+    export var ENOLCK: number;
+    export var ENOLINK: number;
+    export var ENOMEM: number;
+    export var ENOMSG: number;
+    export var ENOPROTOOPT: number;
+    export var ENOSPC: number;
+    export var ENOSR: number;
+    export var ENOSTR: number;
+    export var ENOSYS: number;
+    export var ENOTCONN: number;
+    export var ENOTDIR: number;
+    export var ENOTEMPTY: number;
+    export var ENOTSOCK: number;
+    export var ENOTSUP: number;
+    export var ENOTTY: number;
+    export var ENXIO: number;
+    export var EOPNOTSUPP: number;
+    export var EOVERFLOW: number;
+    export var EPERM: number;
+    export var EPIPE: number;
+    export var EPROTO: number;
+    export var EPROTONOSUPPORT: number;
+    export var EPROTOTYPE: number;
+    export var ERANGE: number;
+    export var EROFS: number;
+    export var ESPIPE: number;
+    export var ESRCH: number;
+    export var ETIME: number;
+    export var ETIMEDOUT: number;
+    export var ETXTBSY: number;
+    export var EWOULDBLOCK: number;
+    export var EXDEV: number;
+    export var WSAEINTR: number;
+    export var WSAEBADF: number;
+    export var WSAEACCES: number;
+    export var WSAEFAULT: number;
+    export var WSAEINVAL: number;
+    export var WSAEMFILE: number;
+    export var WSAEWOULDBLOCK: number;
+    export var WSAEINPROGRESS: number;
+    export var WSAEALREADY: number;
+    export var WSAENOTSOCK: number;
+    export var WSAEDESTADDRREQ: number;
+    export var WSAEMSGSIZE: number;
+    export var WSAEPROTOTYPE: number;
+    export var WSAENOPROTOOPT: number;
+    export var WSAEPROTONOSUPPORT: number;
+    export var WSAESOCKTNOSUPPORT: number;
+    export var WSAEOPNOTSUPP: number;
+    export var WSAEPFNOSUPPORT: number;
+    export var WSAEAFNOSUPPORT: number;
+    export var WSAEADDRINUSE: number;
+    export var WSAEADDRNOTAVAIL: number;
+    export var WSAENETDOWN: number;
+    export var WSAENETUNREACH: number;
+    export var WSAENETRESET: number;
+    export var WSAECONNABORTED: number;
+    export var WSAECONNRESET: number;
+    export var WSAENOBUFS: number;
+    export var WSAEISCONN: number;
+    export var WSAENOTCONN: number;
+    export var WSAESHUTDOWN: number;
+    export var WSAETOOMANYREFS: number;
+    export var WSAETIMEDOUT: number;
+    export var WSAECONNREFUSED: number;
+    export var WSAELOOP: number;
+    export var WSAENAMETOOLONG: number;
+    export var WSAEHOSTDOWN: number;
+    export var WSAEHOSTUNREACH: number;
+    export var WSAENOTEMPTY: number;
+    export var WSAEPROCLIM: number;
+    export var WSAEUSERS: number;
+    export var WSAEDQUOT: number;
+    export var WSAESTALE: number;
+    export var WSAEREMOTE: number;
+    export var WSASYSNOTREADY: number;
+    export var WSAVERNOTSUPPORTED: number;
+    export var WSANOTINITIALISED: number;
+    export var WSAEDISCON: number;
+    export var WSAENOMORE: number;
+    export var WSAECANCELLED: number;
+    export var WSAEINVALIDPROCTABLE: number;
+    export var WSAEINVALIDPROVIDER: number;
+    export var WSAEPROVIDERFAILEDINIT: number;
+    export var WSASYSCALLFAILURE: number;
+    export var WSASERVICE_NOT_FOUND: number;
+    export var WSATYPE_NOT_FOUND: number;
+    export var WSA_E_NO_MORE: number;
+    export var WSA_E_CANCELLED: number;
+    export var WSAEREFUSED: number;
+    export var SIGHUP: number;
+    export var SIGINT: number;
+    export var SIGILL: number;
+    export var SIGABRT: number;
+    export var SIGFPE: number;
+    export var SIGKILL: number;
+    export var SIGSEGV: number;
+    export var SIGTERM: number;
+    export var SIGBREAK: number;
+    export var SIGWINCH: number;
+    export var SSL_OP_ALL: number;
+    export var SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+    export var SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+    export var SSL_OP_CISCO_ANYCONNECT: number;
+    export var SSL_OP_COOKIE_EXCHANGE: number;
+    export var SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+    export var SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+    export var SSL_OP_EPHEMERAL_RSA: number;
+    export var SSL_OP_LEGACY_SERVER_CONNECT: number;
+    export var SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+    export var SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+    export var SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+    export var SSL_OP_NETSCAPE_CA_DN_BUG: number;
+    export var SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+    export var SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+    export var SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+    export var SSL_OP_NO_COMPRESSION: number;
+    export var SSL_OP_NO_QUERY_MTU: number;
+    export var SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+    export var SSL_OP_NO_SSLv2: number;
+    export var SSL_OP_NO_SSLv3: number;
+    export var SSL_OP_NO_TICKET: number;
+    export var SSL_OP_NO_TLSv1: number;
+    export var SSL_OP_NO_TLSv1_1: number;
+    export var SSL_OP_NO_TLSv1_2: number;
+    export var SSL_OP_PKCS1_CHECK_1: number;
+    export var SSL_OP_PKCS1_CHECK_2: number;
+    export var SSL_OP_SINGLE_DH_USE: number;
+    export var SSL_OP_SINGLE_ECDH_USE: number;
+    export var SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+    export var SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+    export var SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+    export var SSL_OP_TLS_D5_BUG: number;
+    export var SSL_OP_TLS_ROLLBACK_BUG: number;
+    export var ENGINE_METHOD_DSA: number;
+    export var ENGINE_METHOD_DH: number;
+    export var ENGINE_METHOD_RAND: number;
+    export var ENGINE_METHOD_ECDH: number;
+    export var ENGINE_METHOD_ECDSA: number;
+    export var ENGINE_METHOD_CIPHERS: number;
+    export var ENGINE_METHOD_DIGESTS: number;
+    export var ENGINE_METHOD_STORE: number;
+    export var ENGINE_METHOD_PKEY_METHS: number;
+    export var ENGINE_METHOD_PKEY_ASN1_METHS: number;
+    export var ENGINE_METHOD_ALL: number;
+    export var ENGINE_METHOD_NONE: number;
+    export var DH_CHECK_P_NOT_SAFE_PRIME: number;
+    export var DH_CHECK_P_NOT_PRIME: number;
+    export var DH_UNABLE_TO_CHECK_GENERATOR: number;
+    export var DH_NOT_SUITABLE_GENERATOR: number;
+    export var NPN_ENABLED: number;
+    export var RSA_PKCS1_PADDING: number;
+    export var RSA_SSLV23_PADDING: number;
+    export var RSA_NO_PADDING: number;
+    export var RSA_PKCS1_OAEP_PADDING: number;
+    export var RSA_X931_PADDING: number;
+    export var RSA_PKCS1_PSS_PADDING: number;
+    export var POINT_CONVERSION_COMPRESSED: number;
+    export var POINT_CONVERSION_UNCOMPRESSED: number;
+    export var POINT_CONVERSION_HYBRID: number;
+    export var O_RDONLY: number;
+    export var O_WRONLY: number;
+    export var O_RDWR: number;
+    export var S_IFMT: number;
+    export var S_IFREG: number;
+    export var S_IFDIR: number;
+    export var S_IFCHR: number;
+    export var S_IFBLK: number;
+    export var S_IFIFO: number;
+    export var S_IFSOCK: number;
+    export var S_IRWXU: number;
+    export var S_IRUSR: number;
+    export var S_IWUSR: number;
+    export var S_IXUSR: number;
+    export var S_IRWXG: number;
+    export var S_IRGRP: number;
+    export var S_IWGRP: number;
+    export var S_IXGRP: number;
+    export var S_IRWXO: number;
+    export var S_IROTH: number;
+    export var S_IWOTH: number;
+    export var S_IXOTH: number;
+    export var S_IFLNK: number;
+    export var O_CREAT: number;
+    export var O_EXCL: number;
+    export var O_NOCTTY: number;
+    export var O_DIRECTORY: number;
+    export var O_NOATIME: number;
+    export var O_NOFOLLOW: number;
+    export var O_SYNC: number;
+    export var O_SYMLINK: number;
+    export var O_DIRECT: number;
+    export var O_NONBLOCK: number;
+    export var O_TRUNC: number;
+    export var O_APPEND: number;
+    export var F_OK: number;
+    export var R_OK: number;
+    export var W_OK: number;
+    export var X_OK: number;
+    export var UV_UDP_REUSEADDR: number;
+    export var SIGQUIT: number;
+    export var SIGTRAP: number;
+    export var SIGIOT: number;
+    export var SIGBUS: number;
+    export var SIGUSR1: number;
+    export var SIGUSR2: number;
+    export var SIGPIPE: number;
+    export var SIGALRM: number;
+    export var SIGCHLD: number;
+    export var SIGSTKFLT: number;
+    export var SIGCONT: number;
+    export var SIGSTOP: number;
+    export var SIGTSTP: number;
+    export var SIGTTIN: number;
+    export var SIGTTOU: number;
+    export var SIGURG: number;
+    export var SIGXCPU: number;
+    export var SIGXFSZ: number;
+    export var SIGVTALRM: number;
+    export var SIGPROF: number;
+    export var SIGIO: number;
+    export var SIGPOLL: number;
+    export var SIGPWR: number;
+    export var SIGSYS: number;
+    export var SIGUNUSED: number;
+    export var defaultCoreCipherList: string;
+    export var defaultCipherList: string;
+    export var ENGINE_METHOD_RSA: number;
+    export var ALPN_ENABLED: number;
+}
+
+declare module "process" {
+    export = process;
+}
+
+declare module "v8" {
+    interface HeapSpaceInfo {
+        space_name: string;
+        space_size: number;
+        space_used_size: number;
+        space_available_size: number;
+        physical_space_size: number;
+    }
+    export function getHeapStatistics(): { total_heap_size: number, total_heap_size_executable: number, total_physical_size: number, total_avaialble_size: number, used_heap_size: number, heap_size_limit: number };
+    export function getHeapSpaceStatistics(): HeapSpaceInfo[];
+    export function setFlagsFromString(flags: string): void;
+}
+
+declare module "timers" {
+    export function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
+    export function clearTimeout(timeoutId: NodeJS.Timer): void;
+    export function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
+    export function clearInterval(intervalId: NodeJS.Timer): void;
+    export function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any;
+    export function clearImmediate(immediateId: any): void;
+}
+
+declare module "console" {
+    export = console;
+}
diff --git a/doc/-_FeatureLayerProperties.html b/doc/-_FeatureLayerProperties.html
deleted file mode 100644
index eb94539..0000000
--- a/doc/-_FeatureLayerProperties.html
+++ /dev/null
@@ -1,346 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: _FeatureLayerProperties</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: _FeatureLayerProperties</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>_FeatureLayerProperties</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="_FeatureLayerProperties"><span class="type-signature"></span>new _FeatureLayerProperties<span class="signature">(feature, layer, layerIndex, selectionLayer, esriLayerName<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>feature</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Feature</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the feature</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>layer</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the layer in the popup</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>layerIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">index of the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selectionLayer</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.layer.Vector</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the ol selection layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>esriLayerName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">esri layer name</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line25">line 25</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/-_Slider.html b/doc/-_Slider.html
deleted file mode 100644
index 88a9a42..0000000
--- a/doc/-_Slider.html
+++ /dev/null
@@ -1,1272 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: _Slider</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: _Slider</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>_Slider</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="_Slider"><span class="type-signature"></span>new _Slider<span class="signature">(name, selections, wgt, selected)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Slider constructor
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the slider name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selections</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the selection</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>wgt</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">weight</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selected</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if selected</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line17">line 17</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="locked"><span class="type-signature"></span>locked<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line148">line 148</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="locked"><span class="type-signature"></span>locked<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line140">line 140</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="max"><span class="type-signature"></span>max<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line181">line 181</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="max"><span class="type-signature"></span>max<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="min"><span class="type-signature"></span>min<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="min"><span class="type-signature"></span>min<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line159">line 159</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="weight"><span class="type-signature"></span>weight<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="weight"><span class="type-signature"></span>weight<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line211">line 211</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="addToDom"><span class="type-signature"></span>addToDom<span class="signature">($container)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add html to dom
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>$container</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">container element</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line70">line 70</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="increment"><span class="type-signature"></span>increment<span class="signature">(delta)</span><span class="type-signature"> &rarr; {number}</span></h4>
-
-    
-
-
-
-<div class="description">
-    increment the slider
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>delta</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">change delta</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line85">line 85</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the remainder not able to be allocated to this slider
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">number</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="reset"><span class="type-signature"></span>reset<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    reset to the original values
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line112">line 112</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="setValAndDropDown"><span class="type-signature"></span>setValAndDropDown<span class="signature">(newVal, selectedParam)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    set the value and drop down
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>newVal</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the new value</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selectedParam</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the selected parameter</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line126">line 126</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/CommonSymbol.html b/doc/CommonSymbol.html
deleted file mode 100644
index 7f8c1fe..0000000
--- a/doc/CommonSymbol.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: CommonSymbol</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: CommonSymbol</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>CommonSymbol</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="CommonSymbol"><span class="type-signature"></span>new CommonSymbol<span class="signature">(symbolObj, opacity)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>symbolObj</code></td>
-            
-
-            <td class="type">
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line52">line 52</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/DayRange.html b/doc/DayRange.html
deleted file mode 100644
index a2c00d5..0000000
--- a/doc/DayRange.html
+++ /dev/null
@@ -1,234 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: DayRange</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: DayRange</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>DayRange</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="DayRange"><span class="type-signature"></span>new DayRange<span class="signature">(dayRange, jQueryRef)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    constructor for the date range
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dayRange</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">number of days</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>jQueryRef</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">reference to the jquery element</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery-plugin_day-range.js.html">jquery-plugin/day-range.js</a>, <a href="jquery-plugin_day-range.js.html#line15">line 15</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/ItsLayerCollection.html b/doc/ItsLayerCollection.html
deleted file mode 100644
index d987d3c..0000000
--- a/doc/ItsLayerCollection.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: ItsLayerCollection</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: ItsLayerCollection</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>ItsLayerCollection</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="ItsLayerCollection"><span class="type-signature"></span>new ItsLayerCollection<span class="signature">(theMap, exclude<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Create a collection of all ITS layers
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theMap</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the openlayers map</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>exclude</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">array of Its layer identifiers to exclude

BLUE Bluetooth Detector - Bluetooth Detector
CABINET Cabinets - The cabinets
CCTV Camera - Traffic Cameras
HUT Communication Hut - Communication Hut
VAULT Communication Vault - The communication vaults
HAR Highway Advisory Radio - Advisory Radios
LIGHT Lighting - Lighting
LOOP Loop Detectors - Loop Detectors
DMS Message Board - Message Boards and Signs
MICROWAVE Microwave Detector - Microwave Detectors
PULL Pull Box - A pull box
RWIS RWIS - Road weather information system
GATE Ramp Gate - The ramp Gates
METER Ramp Meter - The ramp meters
SIGNAL Signal - Traffic Signal
TOWER Tower - The towers
TRENCH</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_ItsLayerCollection.js.html">collections/ItsLayerCollection.js</a>, <a href="collections_ItsLayerCollection.js.html#line125">line 125</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="layers"><span class="type-signature"></span>layers<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Return the array of layers in this collection
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_ItsLayerCollection.js.html">collections/ItsLayerCollection.js</a>, <a href="collections_ItsLayerCollection.js.html#line156">line 156</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerBase.html b/doc/LayerBase.html
deleted file mode 100644
index 41825e1..0000000
--- a/doc/LayerBase.html
+++ /dev/null
@@ -1,2605 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerBase</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerBase</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerBase</h2>
-        
-            <div class="class-description">The base layer class</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerBase"><span class="type-signature">(abstract) </span>new LayerBase<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The base layer for all others
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">url for source</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    makeGuid()
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line11">line 11</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature">(protected) </span>_olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature">(protected) </span>legendContent<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    set the legend content directly
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line212">line 212</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    set the layer name
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line326">line 326</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line367">line 367</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Set the layer opacity
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line307">line 307</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature">(protected) </span>params<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    set the map get params
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line229">line 229</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Set the layer visibility
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line285">line 285</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer visibility
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line277">line 277</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    set the z index
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line358">line 358</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base load function, sets _loaded = true if it is not already
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line99">line 99</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent=<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent=</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">additonal content to add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line145">line 145</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerBaseVector.html b/doc/LayerBaseVector.html
deleted file mode 100644
index f32916e..0000000
--- a/doc/LayerBaseVector.html
+++ /dev/null
@@ -1,3962 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerBaseVector</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerBaseVector</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerBaseVector</h2>
-        
-            <div class="class-description">The Vector layer base</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerBaseVector"><span class="type-signature">(abstract) </span>new LayerBaseVector<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The base vector layer
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">pass an empty string to prevent default load and add from a json source</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>autoLoad</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should auto load if not visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer style, use openlayers default style if not defined</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemand</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded by extent on map move</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemandDelay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    300
-                
-                </td>
-            
-
-            <td class="description last">delay before the map move callback should be called</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveMakeGetParams</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#mapMoveMakeGetParams">mapMoveMakeGetParams</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    function(lyr, extent, zoomLevel){}
-                
-                </td>
-            
-
-            <td class="description last">function to create additional map move params</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveObj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    mapMove
-                
-                </td>
-            
-
-            <td class="description last">alternate map move object for use with multi map pages</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line27">line 27</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBase.html">LayerBase</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature"></span>_olLayer<span class="type-signature"> :ol.layer.Vector|ol.layer.Base</span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">ol.layer.Base</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#_olLayer">LayerBase#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="autoLoad"><span class="type-signature"></span>autoLoad<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    get if the layer is autoloaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line185">line 185</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="features"><span class="type-signature"></span>features<span class="type-signature"> :Array.&lt;ol.Feature></span></h4>
-
-
-
-
-<div class="description">
-    array of ol features
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line268">line 268</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapCrs"><span class="type-signature"></span>mapCrs<span class="type-signature"> :string|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map CRS if it is defined by the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line210">line 210</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMove"><span class="type-signature"></span>mapMove<span class="type-signature"> :<a href="MapMoveCls.html">MapMoveCls</a>|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line222">line 222</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMoveParams"><span class="type-signature"></span>mapMoveParams<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    map move params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line230">line 230</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#olLayer">LayerBase#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line276">line 276</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="onDemandDelay"><span class="type-signature"></span>onDemandDelay<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get on demand delay in miliseconds
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line177">line 177</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    set the style
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line201">line 201</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"> :ol.Style|<a href="global.html#styleFunc">styleFunc</a></span></h4>
-
-
-
-
-<div class="description">
-    get the style definition
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.Style</span>
-|
-
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line193">line 193</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Set the layer visibility
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#visible">LayerBase#visible</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line285">line 285</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base load function, sets _loaded = true if it is not already
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_load">LayerBase#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line99">line 99</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addFeatures"><span class="type-signature"></span>addFeatures<span class="signature">(featureCollection)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    dummy to be overridden
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureCollection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">geojson or esrijson object</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent=<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent=</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">additonal content to add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line145">line 145</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    clear features in the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveBefore"><span class="type-signature"></span>mapMoveBefore<span class="signature">(zoom, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Before call to map move callback, can prevent call by returning false
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line123">line 123</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if the call should proceed
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveCallback"><span class="type-signature"></span>mapMoveCallback<span class="signature">(d)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback function on map move
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>d</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the json response</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line148">line 148</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerBaseVectorEsri.html b/doc/LayerBaseVectorEsri.html
deleted file mode 100644
index dfeef9c..0000000
--- a/doc/LayerBaseVectorEsri.html
+++ /dev/null
@@ -1,4135 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerBaseVectorEsri</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerBaseVectorEsri</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerBaseVectorEsri</h2>
-        
-            <div class="class-description">Base layer for esri vector layers</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerBaseVectorEsri"><span class="type-signature"></span>new LayerBaseVectorEsri<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The base vector layer
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">url for source</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>autoLoad</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should auto load if not visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer style, use openlayers default style if not defined</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemand</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded by extent on map move</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemandDelay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    300
-                
-                </td>
-            
-
-            <td class="description last">delay before the map move callback should be called</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveObj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    mapMove
-                
-                </td>
-            
-
-            <td class="description last">alternate map move object for use with multi map pages</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>where</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1=1
-                
-                </td>
-            
-
-            <td class="description last">the layer filter clause</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>outFields</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    *
-                
-                </td>
-            
-
-            <td class="description last">comma separated list of output fields, defaults to all</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>format</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    pjson
-                
-                </td>
-            
-
-            <td class="description last">the format the retrieve the data</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>outSR</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    3857
-                
-                </td>
-            
-
-            <td class="description last">the output spatial reference, defaults to web mercator</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>useEsriStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the map service style should be used</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>collapseLegend</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveMakeGetParams</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    function(extent, zoomLevel){}
-                
-                </td>
-            
-
-            <td class="description last">function to create additional map move params</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line17">line 17</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseVector.html">LayerBaseVector</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature"></span>_olLayer<span class="type-signature"> :ol.layer.Vector|ol.layer.Base</span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">ol.layer.Base</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_olLayer">LayerBaseVector#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="autoLoad"><span class="type-signature"></span>autoLoad<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    get if the layer is autoloaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#autoLoad">LayerBaseVector#autoLoad</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line185">line 185</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="features"><span class="type-signature"></span>features<span class="type-signature"> :Array.&lt;ol.Feature></span></h4>
-
-
-
-
-<div class="description">
-    array of ol features
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#features">LayerBaseVector#features</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line268">line 268</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapCrs"><span class="type-signature"></span>mapCrs<span class="type-signature"> :string|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map CRS if it is defined by the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapCrs">LayerBaseVector#mapCrs</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line210">line 210</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMove"><span class="type-signature"></span>mapMove<span class="type-signature"> :<a href="MapMoveCls.html">MapMoveCls</a>|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMove">LayerBaseVector#mapMove</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line222">line 222</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMoveParams"><span class="type-signature"></span>mapMoveParams<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    map move params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveParams">LayerBaseVector#mapMoveParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line230">line 230</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#olLayer">LayerBaseVector#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line276">line 276</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="onDemandDelay"><span class="type-signature"></span>onDemandDelay<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get on demand delay in miliseconds
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#onDemandDelay">LayerBaseVector#onDemandDelay</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line177">line 177</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"> :ol.Style|<a href="global.html#styleFunc">styleFunc</a></span></h4>
-
-
-
-
-<div class="description">
-    get the style definition
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.Style</span>
-|
-
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#style">LayerBaseVector#style</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line193">line 193</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    trigger load features
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_load">LayerBaseVector#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line119">line 119</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addFeatures"><span class="type-signature"></span>addFeatures<span class="signature">(featureCollection)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add feature collection
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureCollection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">features as esrijson</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#addFeatures">LayerBaseVector#addFeatures</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line109">line 109</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#addLegendContent">LayerBaseVector#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line86">line 86</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    clear features in the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#clear">LayerBaseVector#clear</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveBefore"><span class="type-signature"></span>mapMoveBefore<span class="signature">(zoom, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Before call to map move callback, can prevent call by returning false
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveBefore">LayerBaseVector#mapMoveBefore</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line160">line 160</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if the call should proceed
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveCallback"><span class="type-signature"></span>mapMoveCallback<span class="signature">(d)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback function on map move
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>d</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the json response</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveCallback">LayerBaseVector#mapMoveCallback</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line174">line 174</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveMakeGetParams">LayerBaseVector#mapMoveMakeGetParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorEsri.js.html">layers/LayerBaseVectorEsri.js</a>, <a href="layers_LayerBaseVectorEsri.js.html#line142">line 142</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerBaseVectorGeoJson.html b/doc/LayerBaseVectorGeoJson.html
deleted file mode 100644
index 28e50fb..0000000
--- a/doc/LayerBaseVectorGeoJson.html
+++ /dev/null
@@ -1,4020 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerBaseVectorGeoJson</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerBaseVectorGeoJson</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerBaseVectorGeoJson</h2>
-        
-            <div class="class-description">The Vector GeoJson Layer</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerBaseVectorGeoJson"><span class="type-signature"></span>new LayerBaseVectorGeoJson<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-|
-
-<span class="param-type">undefined</span>
-|
-
-<span class="param-type">null</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">resource url, set to '' to make blank layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>autoLoad</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should auto load if not visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer style, use openlayers default style if not defined</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemand</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded by extent on map move</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemandDelay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    300
-                
-                </td>
-            
-
-            <td class="description last">delay before the map move callback should be called</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>transform</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">SR transform, set as false for no transform
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dataProjection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-                <td class="default">
-                
-                    EPSG:4326
-                
-                </td>
-            
-
-            <td class="description last">the data CRS</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>featureProjection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-                <td class="default">
-                
-                    EPSG:3857
-                
-                </td>
-            
-
-            <td class="description last">the feature/map CRS</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveMakeGetParams</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#mapMoveMakeGetParams">mapMoveMakeGetParams</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    function(lyr, extent, zoomLevel){}
-                
-                </td>
-            
-
-            <td class="description last">function to create additional map move params</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveObj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    mapMove
-                
-                </td>
-            
-
-            <td class="description last">alternate map move object for use with multi map pages</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line15">line 15</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseVector.html">LayerBaseVector</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature"></span>_olLayer<span class="type-signature"> :ol.layer.Vector|ol.layer.Base</span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">ol.layer.Base</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_olLayer">LayerBaseVector#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="autoLoad"><span class="type-signature"></span>autoLoad<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    get if the layer is autoloaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#autoLoad">LayerBaseVector#autoLoad</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line185">line 185</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="features"><span class="type-signature"></span>features<span class="type-signature"> :Array.&lt;ol.Feature></span></h4>
-
-
-
-
-<div class="description">
-    array of ol features
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#features">LayerBaseVector#features</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line268">line 268</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapCrs"><span class="type-signature"></span>mapCrs<span class="type-signature"> :string|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map CRS if it is defined by the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapCrs">LayerBaseVector#mapCrs</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line210">line 210</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMove"><span class="type-signature"></span>mapMove<span class="type-signature"> :<a href="MapMoveCls.html">MapMoveCls</a>|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMove">LayerBaseVector#mapMove</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line222">line 222</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMoveParams"><span class="type-signature"></span>mapMoveParams<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    map move params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveParams">LayerBaseVector#mapMoveParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line230">line 230</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#olLayer">LayerBaseVector#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line276">line 276</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="onDemandDelay"><span class="type-signature"></span>onDemandDelay<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get on demand delay in miliseconds
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#onDemandDelay">LayerBaseVector#onDemandDelay</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line177">line 177</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"> :ol.Style|<a href="global.html#styleFunc">styleFunc</a></span></h4>
-
-
-
-
-<div class="description">
-    get the style definition
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.Style</span>
-|
-
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#style">LayerBaseVector#style</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line193">line 193</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    trigger load features
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_load">LayerBaseVector#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line76">line 76</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addFeatures"><span class="type-signature"></span>addFeatures<span class="signature">(featureCollection)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add feature collection
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureCollection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">as geojson object</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#addFeatures">LayerBaseVector#addFeatures</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line63">line 63</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent=<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent=</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">additonal content to add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line145">line 145</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    clear features in the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#clear">LayerBaseVector#clear</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveBefore"><span class="type-signature"></span>mapMoveBefore<span class="signature">(zoom, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Before call to map move callback, can prevent call by returning false
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveBefore">LayerBaseVector#mapMoveBefore</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line123">line 123</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if the call should proceed
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveCallback"><span class="type-signature"></span>mapMoveCallback<span class="signature">(d)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback function on map move
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>d</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the json response</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveCallback">LayerBaseVector#mapMoveCallback</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveMakeGetParams">LayerBaseVector#mapMoveMakeGetParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line148">line 148</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerBaseXyzTile.html b/doc/LayerBaseXyzTile.html
deleted file mode 100644
index 4153112..0000000
--- a/doc/LayerBaseXyzTile.html
+++ /dev/null
@@ -1,2370 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerBaseXyzTile</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerBaseXyzTile</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerBaseXyzTile</h2>
-        
-            <div class="class-description">XYZ tile</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerBaseXyzTile"><span class="type-signature"></span>new LayerBaseXyzTile<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The XYZ tile layer
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">url for source</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>useEsriStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the map service style should be used</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line15">line 15</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBase.html">LayerBase</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature">(protected) </span>_olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#_olLayer">LayerBase#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#olLayer">LayerBase#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line100">line 100</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line92">line 92</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer visibility
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#visible">LayerBase#visible</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line277">line 277</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base load function, sets _loaded = true if it is not already
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_load">LayerBase#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line99">line 99</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional content for legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerEsriMapServer.html b/doc/LayerEsriMapServer.html
deleted file mode 100644
index 2846e40..0000000
--- a/doc/LayerEsriMapServer.html
+++ /dev/null
@@ -1,2388 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerEsriMapServer</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerEsriMapServer</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerEsriMapServer</h2>
-        
-            <div class="class-description">esri mapserver layer</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerEsriMapServer"><span class="type-signature"></span>new LayerEsriMapServer<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The base layer for all others
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">resource url</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>addPopup</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if a popup should be added</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>showLayers</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">undefined</span>
-|
-
-<span class="param-type">Array.&lt;number></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">if a popup should be added</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriMapServer.js.html">layers/LayerEsriMapServer.js</a>, <a href="layers_LayerEsriMapServer.js.html#line16">line 16</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBase.html">LayerBase</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature">(protected) </span>_olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#_olLayer">LayerBase#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#olLayer">LayerBase#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriMapServer.js.html">layers/LayerEsriMapServer.js</a>, <a href="layers_LayerEsriMapServer.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriMapServer.js.html">layers/LayerEsriMapServer.js</a>, <a href="layers_LayerEsriMapServer.js.html#line150">line 150</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer visibility
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#visible">LayerBase#visible</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line277">line 277</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    overwrite the base load
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#_load">LayerBase#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriMapServer.js.html">layers/LayerEsriMapServer.js</a>, <a href="layers_LayerEsriMapServer.js.html#line143">line 143</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional content for legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriMapServer.js.html">layers/LayerEsriMapServer.js</a>, <a href="layers_LayerEsriMapServer.js.html#line70">line 70</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerEsriTile.html b/doc/LayerEsriTile.html
deleted file mode 100644
index 5fe3fcb..0000000
--- a/doc/LayerEsriTile.html
+++ /dev/null
@@ -1,2370 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerEsriTile</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerEsriTile</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerEsriTile</h2>
-        
-            <div class="class-description">Esri tile</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerEsriTile"><span class="type-signature"></span>new LayerEsriTile<span class="signature">(url, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The Esri tile layer
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>url</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">url for source</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>useEsriStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the map service style should be used</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerEsriTile.js.html">layers/LayerEsriTile.js</a>, <a href="layers_LayerEsriTile.js.html#line14">line 14</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature">(protected) </span>_olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_olLayer">LayerBase#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#olLayer">LayerBaseXyzTile#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line100">line 100</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#source">LayerBaseXyzTile#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line92">line 92</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer visibility
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#visible">LayerBase#visible</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line277">line 277</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base load function, sets _loaded = true if it is not already
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_load">LayerBase#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line99">line 99</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional content for legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#addLegendContent">LayerBaseXyzTile#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerGroup.html b/doc/LayerGroup.html
deleted file mode 100644
index 4eff6d1..0000000
--- a/doc/LayerGroup.html
+++ /dev/null
@@ -1,1067 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerGroup</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerGroup</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerGroup</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="LayerGroup"><span class="type-signature"></span>new LayerGroup<span class="signature">(groupConfig<span class="signature-attributes">opt</span>, parent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>groupConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">group configuration object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>groupName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the group name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>collapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the group should be collapsed initially</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>addCheck</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the group should have a checkbox controlling visibility of all layers</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>parent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerGroup.html">LayerGroup</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the parent group</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_LayerLegend.js.html">collections/LayerLegend.js</a>, <a href="collections_LayerLegend.js.html#line20">line 20</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_buildLegend"><span class="type-signature"></span>_buildLegend<span class="signature">(itemIds, theGroup, layerDivClasses<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>itemIds</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the items to process</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>theGroup</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerGroup.html">LayerGroup</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">new group</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>layerDivClasses</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">optional classes to apply to the layer divs</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_LayerLegend.js.html">collections/LayerLegend.js</a>, <a href="collections_LayerLegend.js.html#line140">line 140</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addGroup"><span class="type-signature"></span>addGroup<span class="signature">(groupConfig, parents)</span><span class="type-signature"> &rarr; {<a href="LayerGroup.html">LayerGroup</a>}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>groupConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">configuration object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>groupName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the group name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>collapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if the group should be collapsed initially</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>addCheck</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if the group should have a checkbox controlling visibility of all layers</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>parents</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array.&lt;<a href="LayerGroup.html">LayerGroup</a>></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">parent groups</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_LayerLegend.js.html">collections/LayerLegend.js</a>, <a href="collections_LayerLegend.js.html#line56">line 56</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the layer group just added
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type"><a href="LayerGroup.html">LayerGroup</a></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendLayer"><span class="type-signature"></span>addLegendLayer<span class="signature">(newLayer, parents)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>newLayer</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBase.html">LayerBase</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the layer to be added</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>parents</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">array</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_LayerLegend.js.html">collections/LayerLegend.js</a>, <a href="collections_LayerLegend.js.html#line90">line 90</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerItsInventory.html b/doc/LayerItsInventory.html
deleted file mode 100644
index aab4ae7..0000000
--- a/doc/LayerItsInventory.html
+++ /dev/null
@@ -1,4553 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerItsInventory</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerItsInventory</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerItsInventory</h2>
-        
-            <div class="class-description">Its Layer class</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerItsInventory"><span class="type-signature"></span>new LayerItsInventory<span class="signature">(options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>autoLoad</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should auto load if not visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer style, use openlayers default style if not defined</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemand</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded by extent on map move</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemandDelay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    300
-                
-                </td>
-            
-
-            <td class="description last">delay before the map move callback should be called</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveObj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    mapMove
-                
-                </td>
-            
-
-            <td class="description last">alternate map move object for use with multi map pages</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>addPopup</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the popup should be added automatically</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">A single line style
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>color</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the line color as rgb or hex</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>width</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5
-                
-                </td>
-            
-
-            <td class="description last">the line width</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIconConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The icon subtype configuration
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default icon to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>iconArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, img]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Other
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultColor</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    red
-                
-                </td>
-            
-
-            <td class="description last">The default line color to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultWidth</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default line width to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>lineArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, color, optional width = 5]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerItsInventory.js.html">layers/LayerItsInventory.js</a>, <a href="layers_LayerItsInventory.js.html#line226">line 226</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature"></span>_olLayer<span class="type-signature"> :ol.layer.Vector|ol.layer.Base</span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">ol.layer.Base</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_olLayer">LayerBaseVector#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="autoLoad"><span class="type-signature"></span>autoLoad<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    get if the layer is autoloaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#autoLoad">LayerBaseVector#autoLoad</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line185">line 185</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="features"><span class="type-signature"></span>features<span class="type-signature"> :Array.&lt;ol.Feature></span></h4>
-
-
-
-
-<div class="description">
-    array of ol features
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#features">LayerBaseVector#features</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line268">line 268</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapCrs"><span class="type-signature"></span>mapCrs<span class="type-signature"> :string|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map CRS if it is defined by the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapCrs">LayerBaseVector#mapCrs</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line210">line 210</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMove"><span class="type-signature"></span>mapMove<span class="type-signature"> :<a href="MapMoveCls.html">MapMoveCls</a>|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMove">LayerBaseVector#mapMove</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line222">line 222</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMoveParams"><span class="type-signature"></span>mapMoveParams<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    map move params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveParams">LayerBaseVector#mapMoveParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line230">line 230</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#olLayer">LayerBaseVector#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line276">line 276</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="onDemandDelay"><span class="type-signature"></span>onDemandDelay<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get on demand delay in miliseconds
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#onDemandDelay">LayerBaseVector#onDemandDelay</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line177">line 177</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"> :ol.Style|<a href="global.html#styleFunc">styleFunc</a></span></h4>
-
-
-
-
-<div class="description">
-    get the style definition
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.Style</span>
-|
-
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#style">LayerBaseVector#style</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line193">line 193</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    trigger load features
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVectorGeoJson.html#_load">LayerBaseVectorGeoJson#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line76">line 76</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addFeatures"><span class="type-signature"></span>addFeatures<span class="signature">(featureCollection)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add feature collection
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureCollection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">as geojson object</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVectorGeoJson.html#addFeatures">LayerBaseVectorGeoJson#addFeatures</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line63">line 63</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent=<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent=</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">additonal content to add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line145">line 145</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    clear features in the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#clear">LayerBaseVector#clear</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveBefore"><span class="type-signature"></span>mapMoveBefore<span class="signature">(zoom, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Before call to map move callback, can prevent call by returning false
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveBefore">LayerBaseVector#mapMoveBefore</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line123">line 123</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if the call should proceed
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveCallback"><span class="type-signature"></span>mapMoveCallback<span class="signature">(d)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback function on map move
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>d</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the json response</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveCallback">LayerBaseVector#mapMoveCallback</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="LayerBaseVectorGeoJson.html#mapMoveMakeGetParams">LayerBaseVectorGeoJson#mapMoveMakeGetParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line148">line 148</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerLegend.html b/doc/LayerLegend.html
deleted file mode 100644
index 45b1dbe..0000000
--- a/doc/LayerLegend.html
+++ /dev/null
@@ -1,404 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerLegend</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerLegend</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerLegend</h2>
-        
-            <div class="class-description">a wrapper to make a legend</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerLegend"><span class="type-signature"></span>new LayerLegend<span class="signature">(legendItems, divId, options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>legendItems</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>divId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the div where the legend should be added</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">for legend
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>layerDivClasses</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">optional array of classes to be applied to the layer legend divs for custom styling</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendTitle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Legend
-                
-                </td>
-            
-
-            <td class="description last">the legend title</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>scaleDependent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">bool</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if legend display is scale dependent</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_LayerLegend.js.html">collections/LayerLegend.js</a>, <a href="collections_LayerLegend.js.html#line194">line 194</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerRealEarthTile.html b/doc/LayerRealEarthTile.html
deleted file mode 100644
index c538ea4..0000000
--- a/doc/LayerRealEarthTile.html
+++ /dev/null
@@ -1,2421 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerRealEarthTile</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerRealEarthTile</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerRealEarthTile</h2>
-        
-            <div class="class-description">Real earth tile</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerRealEarthTile"><span class="type-signature"></span>new LayerRealEarthTile<span class="signature">(options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The base layer for all others
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>products</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the products to request</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>hasTimes</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">If the layer is time dependent, fixed set of dates</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>animate</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be animated</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerRealEarthTile.js.html">layers/LayerRealEarthTile.js</a>, <a href="layers_LayerRealEarthTile.js.html#line16">line 16</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature">(protected) </span>_olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_olLayer">LayerBase#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#olLayer">LayerBaseXyzTile#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line100">line 100</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#source">LayerBaseXyzTile#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line92">line 92</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="visible"><span class="type-signature"></span>visible<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer visibility
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#visible">LayerBase#visible</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line277">line 277</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base load function, sets _loaded = true if it is not already
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#_load">LayerBase#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line99">line 99</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional content for legend</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseXyzTile.html#addLegendContent">LayerBaseXyzTile#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseXyzTile.js.html">layers/LayerBaseXyzTile.js</a>, <a href="layers_LayerBaseXyzTile.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerSwipe.html b/doc/LayerSwipe.html
deleted file mode 100644
index a4ac049..0000000
--- a/doc/LayerSwipe.html
+++ /dev/null
@@ -1,666 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerSwipe</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerSwipe</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerSwipe</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="LayerSwipe"><span class="type-signature"></span>new LayerSwipe<span class="signature">(map, sliderContent<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>map</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the map</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>sliderContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    ''
-                
-                </td>
-            
-
-            <td class="description last">additional html to be added inside the slider div</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_layerSwipe.js.html">olHelpers/layerSwipe.js</a>, <a href="olHelpers_layerSwipe.js.html#line19">line 19</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="leftLayers"><span class="type-signature"></span>leftLayers<span class="type-signature"> :Array.&lt;<a href="LayerBase.html">LayerBase</a>></span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;<a href="LayerBase.html">LayerBase</a>></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_layerSwipe.js.html">olHelpers/layerSwipe.js</a>, <a href="olHelpers_layerSwipe.js.html#line26">line 26</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="rightLayers"><span class="type-signature"></span>rightLayers<span class="type-signature"> :Array.&lt;<a href="LayerBase.html">LayerBase</a>></span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;<a href="LayerBase.html">LayerBase</a>></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_layerSwipe.js.html">olHelpers/layerSwipe.js</a>, <a href="olHelpers_layerSwipe.js.html#line32">line 32</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLeftLayer"><span class="type-signature"></span>addLeftLayer<span class="signature">(lyr)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBase.html">LayerBase</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer to be added to left side</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_layerSwipe.js.html">olHelpers/layerSwipe.js</a>, <a href="olHelpers_layerSwipe.js.html#line78">line 78</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addRightLayer"><span class="type-signature"></span>addRightLayer<span class="signature">(lyr)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBase.html">LayerBase</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer to be added to right side</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_layerSwipe.js.html">olHelpers/layerSwipe.js</a>, <a href="olHelpers_layerSwipe.js.html#line107">line 107</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/LayerVectorRealEarth.html b/doc/LayerVectorRealEarth.html
deleted file mode 100644
index f104b2d..0000000
--- a/doc/LayerVectorRealEarth.html
+++ /dev/null
@@ -1,4030 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: LayerVectorRealEarth</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: LayerVectorRealEarth</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>LayerVectorRealEarth</h2>
-        
-            <div class="class-description">Vector real earth vector</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="LayerVectorRealEarth"><span class="type-signature"></span>new LayerVectorRealEarth<span class="signature">(options)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Real Earth vector layer
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">config
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>id</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>name</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Unnamed Layer
-                
-                </td>
-            
-
-            <td class="description last">layer name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>opacity</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    1
-                
-                </td>
-            
-
-            <td class="description last">opacity</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>visible</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">default visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom level, 0 - 28</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>params</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the get parameters to include to retrieve the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zIndex</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    0
-                
-                </td>
-            
-
-            <td class="description last">the z index for the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>loadCallback</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">function to call on load, context this is the layer object</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCollapse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should be initially collapsed</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendCheckbox</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the legend item should have a checkbox for visibility</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legendContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">additional content to add to the legend</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>autoLoad</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should auto load if not visible</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer style, use openlayers default style if not defined</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemand</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded by extent on map move</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>onDemandDelay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    300
-                
-                </td>
-            
-
-            <td class="description last">delay before the map move callback should be called</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMoveObj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    mapMove
-                
-                </td>
-            
-
-            <td class="description last">alternate map move object for use with multi map pages</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>transform</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">SR transform, set as false for no transform
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dataProjection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-                <td class="default">
-                
-                    EPSG:4326
-                
-                </td>
-            
-
-            <td class="description last">the data CRS</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>featureProjection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-                <td class="default">
-                
-                    EPSG:3857
-                
-                </td>
-            
-
-            <td class="description last">the feature/map CRS</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>products</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">real earth products identifier</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>animate</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be animated</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerRealEarthVector.js.html">layers/LayerRealEarthVector.js</a>, <a href="layers_LayerRealEarthVector.js.html#line15">line 15</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_olLayer"><span class="type-signature"></span>_olLayer<span class="type-signature"> :ol.layer.Vector|ol.layer.Base</span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">ol.layer.Base</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#_olLayer">LayerBaseVector#_olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="autoLoad"><span class="type-signature"></span>autoLoad<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    get if the layer is autoloaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#autoLoad">LayerBaseVector#autoLoad</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line185">line 185</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="features"><span class="type-signature"></span>features<span class="type-signature"> :Array.&lt;ol.Feature></span></h4>
-
-
-
-
-<div class="description">
-    array of ol features
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#features">LayerBaseVector#features</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line268">line 268</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="legendContent"><span class="type-signature"></span>legendContent<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the legend content
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#legendContent">LayerBase#legendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line203">line 203</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="loaded"><span class="type-signature"></span>loaded<span class="type-signature"> :boolean</span></h4>
-
-
-
-
-<div class="description">
-    Check if the layer is loaded
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">boolean</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#loaded">LayerBase#loaded</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line334">line 334</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapCrs"><span class="type-signature"></span>mapCrs<span class="type-signature"> :string|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map CRS if it is defined by the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapCrs">LayerBaseVector#mapCrs</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line210">line 210</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMove"><span class="type-signature"></span>mapMove<span class="type-signature"> :<a href="MapMoveCls.html">MapMoveCls</a>|*</span></h4>
-
-
-
-
-<div class="description">
-    get the map move object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMove">LayerBaseVector#mapMove</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line222">line 222</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapMoveParams"><span class="type-signature"></span>mapMoveParams<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    map move params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveParams">LayerBaseVector#mapMoveParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line230">line 230</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxResolution"><span class="type-signature"></span>maxResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the maximum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxResolution">LayerBase#maxResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line245">line 245</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="maxZoom"><span class="type-signature"></span>maxZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get max zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#maxZoom">LayerBase#maxZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line261">line 261</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minResolution"><span class="type-signature"></span>minResolution<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get the minimum resolution
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minResolution">LayerBase#minResolution</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line237">line 237</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="minZoom"><span class="type-signature"></span>minZoom<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get min zoom
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#minZoom">LayerBase#minZoom</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line253">line 253</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer name
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#name">LayerBase#name</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line318">line 318</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="olLayer"><span class="type-signature"></span>olLayer<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#olLayer">LayerBaseVector#olLayer</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line276">line 276</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="onDemandDelay"><span class="type-signature"></span>onDemandDelay<span class="type-signature"> :number|*</span></h4>
-
-
-
-
-<div class="description">
-    get on demand delay in miliseconds
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#onDemandDelay">LayerBaseVector#onDemandDelay</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line177">line 177</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="opacity"><span class="type-signature"></span>opacity<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    Get the layer opacity
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#opacity">LayerBase#opacity</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line299">line 299</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="params"><span class="type-signature"></span>params<span class="type-signature"> :object</span></h4>
-
-
-
-
-<div class="description">
-    get the map get params
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#params">LayerBase#params</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line220">line 220</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="source"><span class="type-signature"></span>source<span class="type-signature"> :*</span></h4>
-
-
-
-
-<div class="description">
-    get the layer source
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">*</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#source">LayerBase#source</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line342">line 342</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="style"><span class="type-signature"></span>style<span class="type-signature"> :ol.Style|<a href="global.html#styleFunc">styleFunc</a></span></h4>
-
-
-
-
-<div class="description">
-    get the style definition
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">ol.Style</span>
-|
-
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#style">LayerBaseVector#style</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line193">line 193</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4>
-
-
-
-
-<div class="description">
-    get the url
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">string</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#url">LayerBase#url</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line269">line 269</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="zIndex"><span class="type-signature"></span>zIndex<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    get the z index
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#zIndex">LayerBase#zIndex</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line350">line 350</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_load"><span class="type-signature">(protected) </span>_load<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    trigger load features
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVectorGeoJson.html#_load">LayerBaseVectorGeoJson#_load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line76">line 76</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if already loaded
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addFeatures"><span class="type-signature"></span>addFeatures<span class="signature">(featureCollection)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add feature collection
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureCollection</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">as geojson object</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVectorGeoJson.html#addFeatures">LayerBaseVectorGeoJson#addFeatures</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVectorGeoJson.js.html">layers/LayerBaseVectorGeoJson.js</a>, <a href="layers_LayerBaseVectorGeoJson.js.html#line63">line 63</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addLegendContent"><span class="type-signature"></span>addLegendContent<span class="signature">(additionalContent=<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add additional content to the legend
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>additionalContent=</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">additonal content to add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#addLegendContent">LayerBase#addLegendContent</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line145">line 145</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    clear features in the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#clear">LayerBaseVector#clear</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line167">line 167</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getLegendDiv"><span class="type-signature"></span>getLegendDiv<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the legend html, be sure to only add to the DOM once
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#getLegendDiv">LayerBase#getLegendDiv</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html for layer wrapped in a div
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveBefore"><span class="type-signature"></span>mapMoveBefore<span class="signature">(zoom, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Before call to map move callback, can prevent call by returning false
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveBefore">LayerBaseVector#mapMoveBefore</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line123">line 123</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if the call should proceed
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveCallback"><span class="type-signature"></span>mapMoveCallback<span class="signature">(d)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback function on map move
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>d</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the json response</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveCallback">LayerBaseVector#mapMoveCallback</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBaseVector.html#mapMoveMakeGetParams">LayerBaseVector#mapMoveMakeGetParams</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line148">line 148</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="refresh"><span class="type-signature"></span>refresh<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trick to refresh the layer
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="LayerBase.html#refresh">LayerBase#refresh</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBase.js.html">layers/LayerBase.js</a>, <a href="layers_LayerBase.js.html#line189">line 189</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/MapInteractionBase.html b/doc/MapInteractionBase.html
deleted file mode 100644
index 75a6340..0000000
--- a/doc/MapInteractionBase.html
+++ /dev/null
@@ -1,664 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: MapInteractionBase</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: MapInteractionBase</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>MapInteractionBase</h2>
-        
-            <div class="class-description">base interaction</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="MapInteractionBase"><span class="type-signature"></span>new MapInteractionBase<span class="signature">(subtype)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    map interaction base
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>subtype</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the interaction subtype</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line11">line 11</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="initialized"><span class="type-signature"></span>initialized<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get if is initialized
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line51">line 51</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="map"><span class="type-signature"></span>map<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get reference to the ol map object
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line43">line 43</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_checkInit"><span class="type-signature">(protected) </span>_checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="checkInit"><span class="type-signature"></span>checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line71">line 71</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="init"><span class="type-signature"></span>init<span class="signature">(theMap)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    base initializer, returns true for already initialized
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theMap</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the ol Map</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line28">line 28</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true for already initialized
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/MapMoveCls.html b/doc/MapMoveCls.html
deleted file mode 100644
index 42cfb27..0000000
--- a/doc/MapMoveCls.html
+++ /dev/null
@@ -1,1600 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: MapMoveCls</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: MapMoveCls</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>MapMoveCls</h2>
-        
-            <div class="class-description">assists with map move interactions, trigger callback functions</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="MapMoveCls"><span class="type-signature"></span>new MapMoveCls<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    constructor called implicitly
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line17">line 17</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="MapInteractionBase.html">MapInteractionBase</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="initialized"><span class="type-signature"></span>initialized<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get if is initialized
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#initialized">MapInteractionBase#initialized</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line51">line 51</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="map"><span class="type-signature"></span>map<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get reference to the ol map object
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#map">MapInteractionBase#map</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line43">line 43</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="mapExtent"><span class="type-signature"></span>mapExtent<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    return the map extent
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line83">line 83</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_checkInit"><span class="type-signature">(protected) </span>_checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#_checkInit">MapInteractionBase#_checkInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addCallback"><span class="type-signature"></span>addCallback<span class="signature">(func, context, delay<span class="signature-attributes">opt</span>, triggerOnAdd<span class="signature-attributes">opt</span>, functionId<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    add a callback to the map move event
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>func</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#mapMoveCallbackFunction">mapMoveCallbackFunction</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">callback function</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>context</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the context to use for this function</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>delay</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    50
-                
-                </td>
-            
-
-            <td class="description last">the delay before call load</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>triggerOnAdd</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded on add to mapMove</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>functionId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">optional id to reference the function later for outside triggering</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line252">line 252</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addVectorLayer"><span class="type-signature"></span>addVectorLayer<span class="signature">(lyr, triggerOnAdd<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Add a layer to the interaction
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">layer to add</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>triggerOnAdd</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if the layer should be loaded on add</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line209">line 209</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="checkInit"><span class="type-signature"></span>checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#checkInit">MapInteractionBase#checkInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line71">line 71</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="init"><span class="type-signature"></span>init<span class="signature">(theMap)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    initialize the map move object
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theMap</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the ol map</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#init">MapInteractionBase#init</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line43">line 43</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="triggerLyrLoad"><span class="type-signature"></span>triggerLyrLoad<span class="signature">(lyr, index<span class="signature-attributes">opt</span>, eventType<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Trigger the layer load
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the layer being acted on</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>index</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">index of the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>eventType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the event triggering the load, as 'change:center' or 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line97">line 97</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="triggerMoveCallback"><span class="type-signature"></span>triggerMoveCallback<span class="signature">(ind, eventType<span class="signature-attributes">opt</span>, functionId<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    trigger the map move call back at the given index
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>ind</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the index of the layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>eventType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the event triggering the load as 'change:center' or 'change:resolution'</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>functionId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the function id used to reference the added callback function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line166">line 166</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/MapPopupCls.html b/doc/MapPopupCls.html
deleted file mode 100644
index ccd5b10..0000000
--- a/doc/MapPopupCls.html
+++ /dev/null
@@ -1,2092 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: MapPopupCls</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: MapPopupCls</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>MapPopupCls</h2>
-        
-            <div class="class-description">map popup class</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="MapPopupCls"><span class="type-signature"></span>new MapPopupCls<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    map popup constructor
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line47">line 47</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="MapInteractionBase.html">MapInteractionBase</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="_passThroughLayerFeatureArray"><span class="type-signature"></span>_passThroughLayerFeatureArray<span class="type-signature"> :Array.&lt;<a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a>></span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;<a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a>></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line173">line 173</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="_passThroughLayerFeatureArray"><span class="type-signature"></span>_passThroughLayerFeatureArray<span class="type-signature"> :Array.&lt;<a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a>></span></h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">Array.&lt;<a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a>></span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line102">line 102</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="initialized"><span class="type-signature"></span>initialized<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get if is initialized
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#initialized">MapInteractionBase#initialized</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line51">line 51</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="map"><span class="type-signature"></span>map<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    get reference to the ol map object
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#map">MapInteractionBase#map</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line43">line 43</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_checkInit"><span class="type-signature">(protected) </span>_checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#_checkInit">MapInteractionBase#_checkInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line59">line 59</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addMapClickFunction"><span class="type-signature"></span>addMapClickFunction<span class="signature">(func)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Add a function to be called when the map is clicked but before any popups are implemented
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>func</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the map click function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line486">line 486</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addMapServicePopup"><span class="type-signature"></span>addMapServicePopup<span class="signature">(lyr, selectionStyle<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {object}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">map server layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selectionStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the selection style configuration
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>color</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    rgba(255,170,0,0.5)
-                
-                </td>
-            
-
-            <td class="description last">the selection color</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>width</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    10
-                
-                </td>
-            
-
-            <td class="description last">the selection width for linear features</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>olStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-|
-
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">an openlayers style object or function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line465">line 465</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    a reference to the ol selection layer
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">object</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addMapServicePopupContent"><span class="type-signature"></span>addMapServicePopupContent<span class="signature">(feature, lyr, popupContent, esriName)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>feature</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Feature</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the ol feature</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the map server layer</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>popupContent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">popup content</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>esriName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">esri layer name</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line296">line 296</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addPopupChangedFunction"><span class="type-signature"></span>addPopupChangedFunction<span class="signature">(chgFunction)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>chgFunction</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#popupChangedFunction">popupChangedFunction</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">popup change function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line352">line 352</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="addVectorPopup"><span class="type-signature"></span>addVectorPopup<span class="signature">(lyr, popupContentFunction, selectionStyle<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {object}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Add popup to the map
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBase.html">LayerBase</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The layer that the popup with act on</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>popupContentFunction</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#popupCallback">popupCallback</a></span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">popup content function that makes popup info</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>selectionStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">the selection style configuration
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>color</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    rgba(255,170,0,0.5)
-                
-                </td>
-            
-
-            <td class="description last">the selection color</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>width</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    10
-                
-                </td>
-            
-
-            <td class="description last">the selection width for linear features</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>olStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-|
-
-<span class="param-type">function</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">an openlayers style object or function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line427">line 427</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    a reference to the ol selection layer
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">object</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="checkInit"><span class="type-signature"></span>checkInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Check the initialization status and throw exception if not valid yet
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#checkInit">MapInteractionBase#checkInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapInteractionBase.js.html">olHelpers/mapInteractionBase.js</a>, <a href="olHelpers_mapInteractionBase.js.html#line71">line 71</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="init"><span class="type-signature"></span>init<span class="signature">(theMap)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    map popup initialization
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theMap</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the ol map</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="MapInteractionBase.html#init">MapInteractionBase#init</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line113">line 113</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="removeVectorPopup"><span class="type-signature"></span>removeVectorPopup<span class="signature">(lyr)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBase.html">LayerBase</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line442">line 442</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/RealEarthAnimate.html b/doc/RealEarthAnimate.html
deleted file mode 100644
index c027a35..0000000
--- a/doc/RealEarthAnimate.html
+++ /dev/null
@@ -1,794 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: RealEarthAnimate</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: RealEarthAnimate</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>RealEarthAnimate</h2>
-        
-            <div class="class-description">Mixin to get the product times
Be sure to call getTimeInit after the mixin has been applied</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="RealEarthAnimate"><span class="type-signature"></span>new RealEarthAnimate<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line20">line 20</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="animationEnabled"><span class="type-signature"></span>animationEnabled<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line65">line 65</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadDates"><span class="type-signature">(protected) </span>_loadDates<span class="signature">(inString)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Given the raw time string, add to the arrays to keep track of dates and cache
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>inString</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input string to parse</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line75">line 75</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the converted string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadLatest"><span class="type-signature">(protected) </span>_loadLatest<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line100">line 100</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    if should continue
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="load"><span class="type-signature"></span>load<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    override base layer load
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line25">line 25</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="setLayerTime"><span class="type-signature"></span>setLayerTime<span class="signature">(theTime)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theTime</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the time</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line116">line 116</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true if new index, false if the same or below lowest value
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="timeInit"><span class="type-signature"></span>timeInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Call this after the mixin has been applied
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line30">line 30</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/RealEarthAnimateTile.html b/doc/RealEarthAnimateTile.html
deleted file mode 100644
index 1b91956..0000000
--- a/doc/RealEarthAnimateTile.html
+++ /dev/null
@@ -1,813 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: RealEarthAnimateTile</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: RealEarthAnimateTile</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>RealEarthAnimateTile</h2>
-        
-            <div class="class-description">Animate real earth tile</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="RealEarthAnimateTile"><span class="type-signature"></span>new RealEarthAnimateTile<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateTile.js.html">mixin/RealEarthAnimateTile.js</a>, <a href="mixin_RealEarthAnimateTile.js.html#line12">line 12</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="animationEnabled"><span class="type-signature"></span>animationEnabled<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#animationEnabled">RealEarthAnimate#animationEnabled</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line65">line 65</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadDates"><span class="type-signature">(protected) </span>_loadDates<span class="signature">(inString)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Given the raw time string, add to the arrays to keep track of dates and cache
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>inString</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input string to parse</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#_loadDates">RealEarthAnimate#_loadDates</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line75">line 75</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the converted string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadLatest"><span class="type-signature">(protected) </span>_loadLatest<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#_loadLatest">RealEarthAnimate#_loadLatest</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateTile.js.html">mixin/RealEarthAnimateTile.js</a>, <a href="mixin_RealEarthAnimateTile.js.html#line37">line 37</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="load"><span class="type-signature"></span>load<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    override base layer load
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#load">RealEarthAnimate#load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateTile.js.html">mixin/RealEarthAnimateTile.js</a>, <a href="mixin_RealEarthAnimateTile.js.html#line17">line 17</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="setLayerTime"><span class="type-signature"></span>setLayerTime<span class="signature">(theTime)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theTime</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the time</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#setLayerTime">RealEarthAnimate#setLayerTime</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line116">line 116</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true if new index, false if the same or below lowest value
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="timeInit"><span class="type-signature"></span>timeInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Call this after the mixin has been applied
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#timeInit">RealEarthAnimate#timeInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line30">line 30</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/RealEarthAnimateVector.html b/doc/RealEarthAnimateVector.html
deleted file mode 100644
index 466ba71..0000000
--- a/doc/RealEarthAnimateVector.html
+++ /dev/null
@@ -1,791 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: RealEarthAnimateVector</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: RealEarthAnimateVector</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>RealEarthAnimateVector</h2>
-        
-            <div class="class-description">class mixin to animate RealEarth vector layers</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="RealEarthAnimateVector"><span class="type-signature"></span>new RealEarthAnimateVector<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateVector.js.html">mixin/RealEarthAnimateVector.js</a>, <a href="mixin_RealEarthAnimateVector.js.html#line14">line 14</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-        <h3 class="subsection-title">Extends</h3>
-
-        
-
-
-    <ul>
-        <li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li>
-    </ul>
-
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="animationEnabled"><span class="type-signature"></span>animationEnabled<span class="type-signature"></span></h4>
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-    <dt class="inherited-from">Inherited From:</dt>
-    <dd class="inherited-from"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#animationEnabled">RealEarthAnimate#animationEnabled</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line65">line 65</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadDates"><span class="type-signature">(protected) </span>_loadDates<span class="signature">(inString)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Given the raw time string, add to the arrays to keep track of dates and cache
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>inString</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input date string</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#_loadDates">RealEarthAnimate#_loadDates</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateVector.js.html">mixin/RealEarthAnimateVector.js</a>, <a href="mixin_RealEarthAnimateVector.js.html#line37">line 37</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="_loadLatest"><span class="type-signature">(protected) </span>_loadLatest<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#_loadLatest">RealEarthAnimate#_loadLatest</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateVector.js.html">mixin/RealEarthAnimateVector.js</a>, <a href="mixin_RealEarthAnimateVector.js.html#line46">line 46</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="load"><span class="type-signature"></span>load<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    override base layer load
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#load">RealEarthAnimate#load</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateVector.js.html">mixin/RealEarthAnimateVector.js</a>, <a href="mixin_RealEarthAnimateVector.js.html#line19">line 19</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="setLayerTime"><span class="type-signature"></span>setLayerTime<span class="signature">(theTime)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>theTime</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the time</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#setLayerTime">RealEarthAnimate#setLayerTime</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line116">line 116</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true if new index, false if the same or below lowest value
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="timeInit"><span class="type-signature"></span>timeInit<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Call this after the mixin has been applied
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-overrides">Overrides:</dt>
-    <dd class="tag-overrides"><ul class="dummy"><li>
-        <a href="RealEarthAnimate.html#timeInit">RealEarthAnimate#timeInit</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimateVector.js.html">mixin/RealEarthAnimateVector.js</a>, <a href="mixin_RealEarthAnimateVector.js.html#line26">line 26</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/SingleSymbol.html b/doc/SingleSymbol.html
deleted file mode 100644
index 1d80d81..0000000
--- a/doc/SingleSymbol.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: SingleSymbol</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: SingleSymbol</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>SingleSymbol</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="SingleSymbol"><span class="type-signature"></span>new SingleSymbol<span class="signature">(esriResponse, SymbolClass)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>esriResponse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer info</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>SymbolClass</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Constructor</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the symbol class to use</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line182">line 182</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/Sliders.html b/doc/Sliders.html
deleted file mode 100644
index 6532041..0000000
--- a/doc/Sliders.html
+++ /dev/null
@@ -1,655 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: Sliders</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: Sliders</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>Sliders</h2>
-        
-            <div class="class-description">class to make a slider group</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="Sliders"><span class="type-signature"></span>new Sliders<span class="signature">(paramList, divId)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>paramList</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">list of parameters</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>divId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the div id</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line232">line 232</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="getParams"><span class="type-signature"></span>getParams<span class="signature">()</span><span class="type-signature"> &rarr; {object}</span></h4>
-
-    
-
-
-
-<div class="description">
-    get the parameter weights
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line412">line 412</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    lookup with parameter weights
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">object</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getSum"><span class="type-signature"></span>getSum<span class="signature">()</span><span class="type-signature"> &rarr; {number}</span></h4>
-
-    
-
-
-
-<div class="description">
-    get the weight sum
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line398">line 398</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the weight sum
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">number</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="reset"><span class="type-signature"></span>reset<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    reset all
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line367">line 367</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="setValues"><span class="type-signature"></span>setValues<span class="signature">(keyValList)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>keyValList</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">key and value list</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="collections_Sliders.js.html">collections/Sliders.js</a>, <a href="collections_Sliders.js.html#line384">line 384</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/SortedFeatures.html b/doc/SortedFeatures.html
deleted file mode 100644
index fa77739..0000000
--- a/doc/SortedFeatures.html
+++ /dev/null
@@ -1,491 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: SortedFeatures</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: SortedFeatures</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>SortedFeatures</h2>
-        
-            <div class="class-description">take an array of features and sort by a given property name</div>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-    <h2>Constructor</h2>
-    
-
-    <h4 class="name" id="SortedFeatures"><span class="type-signature"></span>new SortedFeatures<span class="signature">(features, propertyName)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>features</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array.&lt;ol.Feature></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">array of ol features</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>propertyName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the property name to use for lookup</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_SortedFeatures.js.html">olHelpers/SortedFeatures.js</a>, <a href="olHelpers_SortedFeatures.js.html#line10">line 10</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="getFeature"><span class="type-signature"></span>getFeature<span class="signature">(propertyValue, exactMatch<span class="signature-attributes">opt</span>, sortedFeatures<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {ol.Feature|undefined}</span></h4>
-
-    
-
-
-
-<div class="description">
-    recursive search to find the value
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>propertyValue</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-|
-
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the property value to search for</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>exactMatch</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if only an exact match should be returned</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>sortedFeatures</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    this.sortedFeatures
-                
-                </td>
-            
-
-            <td class="description last">the candidate features</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_SortedFeatures.js.html">olHelpers/SortedFeatures.js</a>, <a href="olHelpers_SortedFeatures.js.html#line42">line 42</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the feature matching the lookup
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">ol.Feature</span>
-|
-
-<span class="param-type">undefined</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/UniqueValueSymbol.html b/doc/UniqueValueSymbol.html
deleted file mode 100644
index 6206eaa..0000000
--- a/doc/UniqueValueSymbol.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Class: UniqueValueSymbol</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Class: UniqueValueSymbol</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>UniqueValueSymbol</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-    
-
-    <h4 class="name" id="UniqueValueSymbol"><span class="type-signature"></span>new UniqueValueSymbol<span class="signature">(esriResponse, SymbolClass)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>esriResponse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer info</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>SymbolClass</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Constructor</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the Symbol class definition</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line197">line 197</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:35 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/collections_ItsLayerCollection.js.html b/doc/collections_ItsLayerCollection.js.html
deleted file mode 100644
index 132b77f..0000000
--- a/doc/collections_ItsLayerCollection.js.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: collections/ItsLayerCollection.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: collections/ItsLayerCollection.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import LayerItsInventory from '../layers/LayerItsInventory';
-import * as colors from '../util/colors';
-import provide from '../util/provide';
-let nm = provide('collections');
-
-let itsConfig = [
-    {
-        name: 'Camera',
-        itsType: 'cctv',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'owner',
-            defaultName: 'WisDOT',
-            defaultIcon: 'cctv.png',
-            iconArray: [
-                ['City of Madison', 'Madison', 'cctv-mad.png']
-            ]
-        }
-    },
-    {
-        name: 'Message Signs',
-        itsType: 'DMS',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'dmsType',
-            defaultName: 'DMS',
-            defaultIcon: 'dms.png',
-            iconArray: [
-                ['pcms', 'PCMS', 'pcms.png']
-            ]
-        }
-    },
-    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},
-    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},
-    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},
-    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},
-    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},
-    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},
-    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},
-    {
-        name: 'Loop Detectors',
-        itsType: 'loop',
-        legendCollapse: true,
-        minZoom: 14,
-        visible: false,
-        itsIconConfig: {
-            prop: 'dtctrType',
-            defaultName: 'Other',
-            defaultIcon: 'loopdetectorother.png',
-            iconArray: [
-                ['detector', 'Detector', 'loopdetector.png'],
-                ['long', 'Long', 'loopdetectorlong.png'],
-                ['zone', 'Zone', 'loopdetectorzone.png']
-            ]
-        },
-        onDemand: true
-    },
-    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},
-    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},
-    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},
-    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},
-    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},
-    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},
-    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},
-    {
-        name: 'Trench',
-        itsType: 'trench',
-        onDemand: true,
-        visible: false,
-        onDemandDelay: 500,
-        minZoom: 15,
-        legendCollapse: true,
-        itsLineConfig: {
-            prop: 'owner',
-            //defaultName: 'Other',
-            //defaultWidth: 7,
-            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-            lineArray: [
-                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],
-                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],
-                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],
-                ['AT&amp;T', 'AT&amp;T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],
-                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],
-                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],
-                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],
-                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],
-                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]
-            ]
-        }
-    }
-
-
-];
-
-
-class ItsLayerCollection {
-
-    /**
-     * Create a collection of all ITS layers
-     * @param {ol.Map} theMap the openlayers map
-     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
-     *
-     * BLUE Bluetooth Detector - Bluetooth Detector
-     * CABINET Cabinets - The cabinets
-     * CCTV Camera - Traffic Cameras
-     * HUT Communication Hut - Communication Hut
-     * VAULT Communication Vault - The communication vaults
-     * HAR Highway Advisory Radio - Advisory Radios
-     * LIGHT Lighting - Lighting
-     * LOOP Loop Detectors - Loop Detectors
-     * DMS Message Board - Message Boards and Signs
-     * MICROWAVE Microwave Detector - Microwave Detectors
-     * PULL Pull Box - A pull box
-     * RWIS RWIS - Road weather information system
-     * GATE Ramp Gate - The ramp Gates
-     * METER Ramp Meter - The ramp meters
-     * SIGNAL Signal - Traffic Signal
-     * TOWER Tower - The towers
-     * TRENCH
-     */
-    constructor(theMap, exclude) {
-
-        this.map = theMap;
-        this._layers = [];
-
-        exclude = typeof exclude == 'object' ? exclude : [];
-
-        for (let i = 0; i &lt; itsConfig.length; i++) {
-            let lyrConfig = itsConfig[i];
-            let addLayer = true;
-
-            for (let j = 0; j &lt; exclude.length; j++) {
-                if (exclude[j] == lyrConfig.itsType) {
-                    addLayer = false;
-                    break;
-                }
-            }
-
-            if (addLayer) {
-                let inventLyr = new LayerItsInventory(lyrConfig);
-                this['map'].addLayer(inventLyr.olLayer);
-                this._layers.push(inventLyr);
-
-            }
-        }
-    }
-
-    /**
-     * Return the array of layers in this collection
-     * @returns {Array&lt;LayerItsInventory>} an array of layers
-     */
-    get layers() {
-        return this._layers;
-    }
-}
-
-nm.ItsLayerCollection = ItsLayerCollection;
-export default ItsLayerCollection;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/collections_Sliders.js.html b/doc/collections_Sliders.js.html
deleted file mode 100644
index 5c01e0c..0000000
--- a/doc/collections_Sliders.js.html
+++ /dev/null
@@ -1,587 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: collections/Sliders.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: collections/Sliders.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/10/2015.
- */
-import provide from '../util/provide';
-let nm = provide('collections');
-import $ from '../jquery/jquery';
-
-class _Slider {
-
-    /**
-     * Slider constructor
-     * @param {string} name - the slider name
-     * @param {Array} selections - the selection
-     * @param {number} wgt - weight
-     * @param {boolean} selected - if selected
-     */
-    constructor(name, selections, wgt, selected) {
-        //let _this = this;
-        this.name = name;
-        this.domId = name.toLowerCase().replace(/ /g, '-');
-        this._weight = wgt;
-        this._weightDefault = this._weight;
-
-        this.selectedParam = null;
-        this.selectedParamDefault = null;
-
-        this._locked = false;
-
-        this._min = 0.0;
-        this._max = 100;
-
-        this.labelLow = null;
-        this.labelHigh = null;
-        this.labelVal = null;
-        this.slider = null;
-        this.chk = null;
-
-        this.atMin = this._weight == this._min;
-        this.atMax = this._weight == this._max;
-
-
-        let sel = `&lt;select class="${selections.length == 1 ? 'hidden-select' : 'show-select'}" id="${this.domId}_chg">`;
-        for (let i = 0; i &lt; selections.length; i++) {
-            let itm = selections[i][0];
-            let itmSelected = itm === selected;
-
-            sel += `&lt;option value="${itm}" ${itmSelected ? ' selected="selected"' : ''}>${selections[i][1]}&lt;/option>`;
-            if (itmSelected) {
-                this.selectedParam = itm;
-            }
-        }
-        sel += '&lt;/select>';
-
-        this.selectedParamDefault = this.selectedParam;
-
-        this.html = '&lt;div class="slider-div">' +
-            `&lt;label for="${this.domId}_chk" class="slider-label">${this.name}&lt;/label>` +
-            sel + `&lt;br>` +
-            `&lt;input id="${this.domId}_chk" type="checkbox" title="Lock/Unlock Slider">` +
-            `&lt;label id="${this.domId}_low" class="low-high">${this._min.toFixed(1)}&lt;/label>` +
-            `&lt;input id="${this.domId}" type="range" value="${this._weight.toFixed(1)}" min="0" max="100" step="0.1">` +
-            `&lt;label id="${this.domId}_high" class="low-high">${this._max.toFixed(1)}&lt;/label>` +
-            `&lt;label id="${this.domId}_lbl" for="${this.domId}" class="percent-label">${this._weight.toFixed(1)}%&lt;/label>&lt;/div>`;
-    }
-
-    /**
-     * add html to dom
-     * @param {jQuery} $container - container element
-     */
-    addToDom($container) {
-        $container.append(this.html);
-        this.labelLow = $(`#${this.domId}_low`);
-        this.labelHigh = $(`#${this.domId}_high`);
-        this.labelVal = $(`#${this.domId}_lbl`);
-        this.slider = $(`#${this.domId}`);
-        this.selectionBox = $(`#${this.domId}_chg`);
-        this.chk = $(`#${this.domId}_chk`);
-    }
-
-    /**
-     * increment the slider
-     * @param {number} delta change delta
-     * @returns {number} the remainder not able to be allocated to this slider
-     */
-    increment(delta) {
-        let remainder = 0;
-        delta = Number(delta.toFixed(1));
-
-        this._weight += delta;
-        if (this._weight &lt; this._min) {
-            remainder = this._min - this._weight;
-            this._weight = this._min;
-            this.atMin = true;
-        } else if (this._weight > this._max) {
-            remainder = this._max - this._weight;
-            this._weight = this._max;
-            this.atMax = true;
-        } else {
-            this.atMin = false;
-            this.atMax = false;
-        }
-
-        this.slider.val(this._weight.toFixed(1));
-        this.labelVal.html(this._weight.toFixed(1) + '%');
-
-        return remainder;
-    }
-
-    /**
-     * reset to the original values
-     */
-    reset() {
-        this.weight = this._weightDefault;
-        this.slider.val(this._weightDefault.toFixed(1));
-        this.selectionBox.val(this.selectedParamDefault);
-        this.chk.attr('checked', false);
-        //let event = new CustomEvent('change');
-        //this.chk[0].dispatchEvent(event);
-    }
-
-    /**
-     * set the value and drop down
-     * @param {number} newVal the new value
-     * @param {string} selectedParam the selected parameter
-     */
-    setValAndDropDown(newVal, selectedParam) {
-        this.weight = newVal;
-        this.min = 0;
-        this.max = 100;
-        this.slider.val(newVal.toFixed(1));
-        this.selectionBox.val(selectedParam);
-        this.selectedParam = selectedParam;
-        this.locked = true;
-    }
-
-    /**
-     *
-     * @returns {boolean} if locked
-     */
-    get locked() {
-        return this._locked;
-    }
-
-    /**
-     *
-     * @param {boolean} val if locked
-     */
-    set locked(val) {
-        this._locked = val;
-        this.slider.prop('disabled', this._locked);
-        this.selectionBox.prop('disabled', this._locked);
-        this.chk.prop('checked', !this._locked);
-    }
-
-    /**
-     *
-     * @returns {number} the minimum
-     */
-    get min() {
-        return this._min;
-    }
-
-    /**
-     *
-     * @param {number} newVal new minimum
-     */
-    set min(newVal) {
-        this._min = Number(newVal.toFixed(1));
-        if (this._min &lt; 0) {
-            this._min = 0;
-        }
-        this.labelLow.html(this._min.toFixed(1));
-        this.slider.attr('min', this._min.toFixed(1));
-        this.atMin = this._weight == this._min;
-    }
-
-    /**
-     *
-     * @returns {number} the maximum
-     */
-    get max() {
-        return this._max;
-    }
-
-    /**
-     *
-     * @param {number} newVal the maximum
-     */
-    set max(newVal) {
-        this._max = Number(newVal.toFixed(1));
-        if (this._max > 100) {
-            this._max = 100.0;
-        }
-        this.labelHigh.html(this._max.toFixed(1));
-        this.slider.attr('max', this._max.toFixed(1));
-        this.atMax = this._weight == this._max;
-    }
-
-    /**
-     *
-     * @returns {number} the weight
-     */
-    get weight() {
-        return this._weight;
-    }
-
-    /**
-     *
-     * @param {number} newVal the weight
-     */
-    set weight(newVal) {
-        this._weight = Number(newVal.toFixed(1));
-        this.labelVal.html(this._weight.toFixed(1) + '%');
-        if (this._weight &lt;= this._min) {
-            this.atMin = true;
-            this.atMax = false;
-        } else if (this._weight >= this._max) {
-            this.atMin = false;
-            this.atMax = true;
-        } else {
-            this.atMin = false;
-            this.atMax = false;
-        }
-    }
-}
-
-nm._Slider = _Slider;
-
-/**
- * class to make a slider group
- */
-class Sliders {
-    /**
-     *
-     * @param {Array} paramList list of parameters
-     * @param {string} divId the div id
-     */
-    constructor(paramList, divId) {
-        this.resetting = false;
-        this._slideFinishedFunctions = [];
-        this.reservedPercent = 0.0;
-        this.$container = $('#' + divId);
-        this.$container.addClass('slider-container');
-
-        this.sliderList = [];
-        this.sliderLookup = {};
-
-        this.total = 0;
-
-        for (let i = 0; i &lt; paramList.length; i++) {
-            let p = paramList[i];
-
-            let sld = new _Slider(p[0], p[1], p[2], p[3]);
-            this.sliderList.push(sld);
-            this.sliderLookup[sld.domId] = sld;
-            sld.addToDom(this.$container);
-            this.total += sld._weight;
-        }
-
-        if (this.total != 100) {
-            alert('total not equal to 100');
-        }
-
-        this.lockedList = [];
-        this.inRangeList = [];
-        this.atMinList = [];
-        this.atMaxList = [];
-
-        this.lockedCount = 0;
-        this.notLockedCount = 0;
-
-        this._splitSliderArray();
-        this._addEventListeners();
-
-    }
-    
-    addSlideFinishedFunction (finishedFunction){
-        this._slideFinishedFunctions.push(finishedFunction);
-    }
-
-    /**
-     * split array into subarrays holding the sliders
-     * @private
-     */
-    _splitSliderArray() {
-        this.lockedList = [];
-        this.inRangeList = [];
-        this.atMinList = [];
-        this.atMaxList = [];
-
-        for (let i = 0; i &lt; this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-
-            if (sld.locked) {
-                this.lockedList.push(sld);
-            } else if (sld.atMin) {
-                this.atMinList.push(sld);
-            } else if (sld.atMax) {
-                this.atMaxList.push(sld);
-            } else {
-                this.inRangeList.push(sld);
-            }
-        }
-        this.lockedCount = this.lockedList.length;
-        this.notLockedCount = this.sliderList.length - this.lockedCount;
-    }
-
-    /**
-     * handle remainder, recursive to take care of min max overshoots
-     * @param {number} remain the remainder
-     * @param {string} skipDomId - this dom id
-     * @private
-     */
-    _handleRemainder(remain, skipDomId) {
-
-        remain = Number(remain.toFixed(1));
-        if (remain == 0) {
-            return;
-        }
-
-        this._splitSliderArray();
-
-        let canChangeArray = [];
-        for (let i = 0; i &lt; this.inRangeList.length; i++) {
-            let sld = this.inRangeList[i];
-            if (sld.domId == skipDomId) {
-                continue;
-            }
-            canChangeArray.push(sld);
-        }
-
-        if (remain > 0) {
-            for (let i = 0; i &lt; this.atMaxList.length; i++) {
-                let sld = this.atMaxList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        } else {
-            for (let i = 0; i &lt; this.atMinList.length; i++) {
-                let sld = this.atMinList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        }
-
-        if (canChangeArray.length == 0) {
-            return;
-        }
-
-        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
-
-        let newRemainder = 0;
-        for (let i = 0; i &lt; canChangeArray.length; i++) {
-            newRemainder += canChangeArray[i].increment(inc);
-        }
-
-        this._handleRemainder(newRemainder, skipDomId);
-    }
-
-    /**
-     * reset all
-     */
-    reset() {
-        this.resetting = true;
-        for (let i = 0; i &lt; this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            sld.reset();
-        }
-        this.resetting = false;
-
-        if (this._slideFinishedFunctions != null) {
-            this._slideFinishedFunctions();
-        }
-    }
-
-    /**
-     *
-     * @param {object} keyValList key and value list
-     */
-    setValues(keyValList) {
-        this.resetting = true;
-        for (let k in keyValList) {
-            if (keyValList.hasOwnProperty(k)) {
-                this.sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
-            }
-        }
-        this.resetting = false;
-    }
-
-    /**
-     * get the weight sum
-     * @returns {number} the weight sum
-     */
-    getSum () {
-        let total = 0;
-        for (let i = 0; i &lt; this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            total += Number(sld.weight.toFixed(1));
-        }
-
-        return total;
-    }
-
-    /**
-     * get the parameter weights
-     * @returns {object} lookup with parameter weights
-     */
-    getParams  () {
-        let paramWeights = {};
-        for (let i = 0; i &lt; this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
-        }
-
-        return paramWeights;
-    }
-
-    _addEventListeners() {
-        let _this = this;
-
-        //change function
-        this.$container.find('input[type="range"]').change(function () {
-                if (_this.resetting) {
-                    return;
-                }
-
-                let $this = $(this);
-                let domId = this['id'];
-                let sldr = _this.sliderLookup[domId];
-
-                let newValue = parseFloat($this.val());
-
-                let oldValue = sldr.weight;
-                let diff = newValue - oldValue;
-                diff = Number(diff.toFixed(1));
-
-                sldr.weight = Number(newValue.toFixed(1));
-
-                _this._handleRemainder(diff, domId);
-
-                //cleanup, make sure the sum is still 100
-                let sum = Number(_this.getSum().toFixed(1));
-
-                if (sum > 100) {
-                    loop1:
-                        while (true) {
-                            for (let i = 0; i &lt; _this.sliderList.length; i++) {
-                                let sld = _this.sliderList[i];
-                                if (sld.domId == domId || sld.locked || sld.atMin) {
-                                    continue;
-                                }
-                                sld.increment(-0.1);
-                                sum -= 0.1;
-                                if (sum.toFixed(1) == '100.0') {
-                                    break loop1;
-                                }
-                            }
-                        }
-                } else if (sum &lt; 100) {
-                    loop1:
-                        while (true) {
-                            for (let i = 0; i &lt; _this.sliderList.length; i++) {
-                                let sld = _this.sliderList[i];
-                                if (sld.domId == domId || sld.locked || sld.atMax) {
-                                    continue;
-                                }
-                                sld.increment(0.1);
-                                sum += 0.1;
-                                if (sum.toFixed(1) == '100.0') {
-                                    break loop1;
-                                }
-                            }
-                        }
-                }
-
-                for (let i = 0; i &lt; _this._slideFinishedFunctions.length; i++) {
-                    _this._slideFinishedFunctions[i]();
-                }
-            }
-        );
-
-        //update the selected parameter when the selection is changed
-        $('.show-select').change(function () {
-            if (_this.resetting) {
-                return;
-            }
-            _this.sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
-        });
-
-        //lock the slider and update the reserved percent
-        this.$container.find('input[type="checkbox"]').change(function () {
-            let domEl = this;
-
-            _this.sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
-            _this.reservedPercent = 0.0;
-            _this.notLockedCount = 0;
-
-            let notLockedSliders = [];
-
-            for (let i = 0; i &lt; _this.sliderList.length; i++) {
-                let sld = _this.sliderList[i];
-                if (sld.locked) {
-                    _this.reservedPercent += sld.weight;
-                    continue;
-                }
-                notLockedSliders.push(sld);
-                _this.notLockedCount++;
-            }
-
-            for (let i = 0; i &lt; _this.sliderList.length; i++) {
-                let sld = _this.sliderList[i];
-                if (sld.locked) {
-                    continue;
-                }
-                sld.max = 100 - _this.reservedPercent;
-            }
-
-            if (notLockedSliders.length == 1) {
-                notLockedSliders[0].min = notLockedSliders[0].weight;
-            } else {
-                for (let i = 0; i &lt; notLockedSliders.length; i++) {
-                    notLockedSliders[i].min = 0;
-                }
-            }
-        });
-
-    }
-}
-
-nm.Sliders = Sliders;
-window.gv['collections'].Sliders = Sliders;
-export default Sliders;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/fonts/OpenSans-Bold-webfont.eot b/doc/fonts/OpenSans-Bold-webfont.eot
deleted file mode 100644
index 5d20d916338a5890a033952e2e07ba7380f5a7d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19544
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

diff --git a/doc/fonts/OpenSans-Bold-webfont.svg b/doc/fonts/OpenSans-Bold-webfont.svg
deleted file mode 100644
index 3ed7be4..0000000
--- a/doc/fonts/OpenSans-Bold-webfont.svg
+++ /dev/null
@@ -1,1830 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sansbold" horiz-adv-x="1169" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1417" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM940 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM1258 0h-305v1118 h305v-1118z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1417" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1258 0h-305v1556h305v-1556z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="2208" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1571 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224 q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1730 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM2048 0h-305v1118h305v-1118z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="2208" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1571 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224 q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM2048 0h-305v1556h305v-1556z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="586" d="M416 485h-244l-51 977h346zM117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" />
-<glyph unicode="&#x22;" horiz-adv-x="967" d="M412 1462l-41 -528h-197l-41 528h279zM834 1462l-41 -528h-197l-41 528h279z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M999 844l-47 -232h258v-206h-297l-77 -406h-220l78 406h-194l-76 -406h-215l74 406h-238v206h277l47 232h-252v209h289l77 407h219l-77 -407h198l78 407h215l-78 -407h240v-209h-279zM539 612h196l47 232h-196z" />
-<glyph unicode="$" d="M1092 457q0 -159 -115 -255.5t-322 -115.5v-205h-137v201q-244 5 -428 86v264q87 -43 209.5 -76t218.5 -39v310l-67 26q-198 78 -280.5 169.5t-82.5 226.5q0 145 113.5 238.5t316.5 113.5v153h137v-149q229 -10 414 -92l-94 -234q-156 64 -320 78v-295 q195 -75 277.5 -130t121 -121t38.5 -154zM791 442q0 42 -34 71t-102 60v-249q136 23 136 118zM389 1049q0 -44 30.5 -72.5t98.5 -58.5v235q-129 -19 -129 -104z" />
-<glyph unicode="%" horiz-adv-x="1845" d="M315 1024q0 -127 22.5 -189.5t72.5 -62.5q96 0 96 252q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM758 1026q0 -230 -89 -345.5t-261 -115.5q-165 0 -255 118.5t-90 342.5q0 457 345 457q169 0 259.5 -118.5t90.5 -338.5zM1446 1462l-811 -1462h-240l811 1462h240z M1339 440q0 -127 22.5 -189.5t72.5 -62.5q96 0 96 252q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM1782 442q0 -229 -89 -344.5t-261 -115.5q-165 0 -255 118.5t-90 341.5q0 457 345 457q169 0 259.5 -118.5t90.5 -338.5z" />
-<glyph unicode="&#x26;" horiz-adv-x="1536" d="M1536 0h-377l-115 113q-191 -133 -432 -133q-244 0 -387 112t-143 303q0 137 60.5 233.5t207.5 180.5q-75 86 -109 164.5t-34 171.5q0 152 116.5 245t311.5 93q186 0 297.5 -86.5t111.5 -231.5q0 -119 -69 -217.5t-223 -187.5l284 -277q71 117 123 301h318 q-36 -135 -99 -263.5t-143 -227.5zM403 424q0 -86 64.5 -137t165.5 -51q126 0 227 61l-332 330q-58 -44 -91.5 -92t-33.5 -111zM762 1133q0 53 -36 83.5t-93 30.5q-67 0 -105.5 -32t-38.5 -91q0 -88 95 -194q86 48 132 94.5t46 108.5z" />
-<glyph unicode="'" horiz-adv-x="545" d="M412 1462l-41 -528h-197l-41 528h279z" />
-<glyph unicode="(" horiz-adv-x="694" d="M82 561q0 265 77.5 496t223.5 405h250q-141 -193 -213 -424t-72 -475q0 -245 73.5 -473.5t209.5 -413.5h-248q-147 170 -224 397t-77 488z" />
-<glyph unicode=")" horiz-adv-x="694" d="M612 561q0 -263 -77.5 -490t-223.5 -395h-248q135 184 209 412.5t74 474.5q0 244 -72 475t-213 424h250q147 -175 224 -406.5t77 -494.5z" />
-<glyph unicode="*" horiz-adv-x="1116" d="M688 1556l-41 -368l373 104l33 -252l-340 -24l223 -297l-227 -121l-156 313l-137 -311l-236 119l221 297l-338 26l39 250l365 -104l-41 368h262z" />
-<glyph unicode="+" d="M475 612h-387v219h387v390h219v-390h387v-219h-387v-385h-219v385z" />
-<glyph unicode="," horiz-adv-x="594" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280z" />
-<glyph unicode="-" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
-<glyph unicode="." horiz-adv-x="584" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" />
-<glyph unicode="/" horiz-adv-x="846" d="M836 1462l-545 -1462h-277l545 1462h277z" />
-<glyph unicode="0" d="M1096 731q0 -383 -125.5 -567t-386.5 -184q-253 0 -381.5 190t-128.5 561q0 387 125 570.5t385 183.5q253 0 382.5 -192t129.5 -562zM381 731q0 -269 46.5 -385.5t156.5 -116.5q108 0 156 118t48 384q0 269 -48.5 386.5t-155.5 117.5q-109 0 -156 -117.5t-47 -386.5z" />
-<glyph unicode="1" d="M846 0h-309v846l3 139l5 152q-77 -77 -107 -101l-168 -135l-149 186l471 375h254v-1462z" />
-<glyph unicode="2" d="M1104 0h-1022v215l367 371q163 167 213 231.5t72 119.5t22 114q0 88 -48.5 131t-129.5 43q-85 0 -165 -39t-167 -111l-168 199q108 92 179 130t155 58.5t188 20.5q137 0 242 -50t163 -140t58 -206q0 -101 -35.5 -189.5t-110 -181.5t-262.5 -265l-188 -177v-14h637v-260z " />
-<glyph unicode="3" d="M1047 1135q0 -137 -83 -233t-233 -132v-6q177 -22 268 -107.5t91 -230.5q0 -211 -153 -328.5t-437 -117.5q-238 0 -422 79v263q85 -43 187 -70t202 -27q153 0 226 52t73 167q0 103 -84 146t-268 43h-111v237h113q170 0 248.5 44.5t78.5 152.5q0 166 -208 166 q-72 0 -146.5 -24t-165.5 -83l-143 213q200 144 477 144q227 0 358.5 -92t131.5 -256z" />
-<glyph unicode="4" d="M1137 303h-176v-303h-302v303h-624v215l641 944h285v-919h176v-240zM659 543v248q0 62 5 180t8 137h-8q-37 -82 -89 -160l-268 -405h352z" />
-<glyph unicode="5" d="M614 934q212 0 337.5 -119t125.5 -326q0 -245 -151 -377t-432 -132q-244 0 -394 79v267q79 -42 184 -68.5t199 -26.5q283 0 283 232q0 221 -293 221q-53 0 -117 -10.5t-104 -22.5l-123 66l55 745h793v-262h-522l-27 -287l35 7q61 14 151 14z" />
-<glyph unicode="6" d="M72 621q0 434 183.5 646t549.5 212q125 0 196 -15v-247q-89 20 -176 20q-159 0 -259.5 -48t-150.5 -142t-59 -267h13q99 170 317 170q196 0 307 -123t111 -340q0 -234 -132 -370.5t-366 -136.5q-162 0 -282.5 75t-186 219t-65.5 347zM600 227q99 0 152 66.5t53 189.5 q0 107 -49.5 168.5t-149.5 61.5q-94 0 -160.5 -61t-66.5 -142q0 -119 62.5 -201t158.5 -82z" />
-<glyph unicode="7" d="M227 0l549 1200h-721v260h1049v-194l-553 -1266h-324z" />
-<glyph unicode="8" d="M586 1481q210 0 338.5 -95.5t128.5 -257.5q0 -112 -62 -199.5t-200 -156.5q164 -88 235.5 -183.5t71.5 -209.5q0 -180 -141 -289.5t-371 -109.5q-240 0 -377 102t-137 289q0 125 66.5 222t213.5 171q-125 79 -180 169t-55 197q0 157 130 254t339 97zM358 389 q0 -86 60 -134t164 -48q115 0 172 49.5t57 130.5q0 67 -56.5 125.5t-183.5 124.5q-213 -98 -213 -248zM584 1255q-79 0 -127.5 -40.5t-48.5 -108.5q0 -60 38.5 -107.5t139.5 -97.5q98 46 137 94t39 111q0 69 -50 109t-128 40z" />
-<glyph unicode="9" d="M1098 838q0 -432 -182 -645t-551 -213q-130 0 -197 14v248q84 -21 176 -21q155 0 255 45.5t153 143t61 268.5h-12q-58 -94 -134 -132t-190 -38q-191 0 -301 122.5t-110 340.5q0 235 133.5 371.5t363.5 136.5q162 0 283.5 -76t186.5 -220.5t65 -344.5zM569 1231 q-96 0 -150 -66t-54 -190q0 -106 49 -168t149 -62q94 0 161 61.5t67 141.5q0 119 -62.5 201t-159.5 82z" />
-<glyph unicode=":" horiz-adv-x="584" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5zM117 969q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" />
-<glyph unicode=";" horiz-adv-x="594" d="M444 238l15 -23q-52 -202 -176 -479h-220q65 266 101 502h280zM117 969q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" />
-<glyph unicode="&#x3c;" d="M1081 203l-993 438v143l993 496v-240l-684 -317l684 -281v-239z" />
-<glyph unicode="=" d="M88 805v219h993v-219h-993zM88 418v219h993v-219h-993z" />
-<glyph unicode="&#x3e;" d="M88 442l684 281l-684 317v240l993 -496v-143l-993 -438v239z" />
-<glyph unicode="?" horiz-adv-x="977" d="M276 485v74q0 96 41 167t150 151q105 75 138.5 122t33.5 105q0 65 -48 99t-134 34q-150 0 -342 -98l-109 219q223 125 473 125q206 0 327.5 -99t121.5 -264q0 -110 -50 -190t-190 -180q-96 -71 -121.5 -108t-25.5 -97v-60h-265zM244 143q0 84 45 127t131 43 q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" />
-<glyph unicode="@" horiz-adv-x="1837" d="M1735 752q0 -144 -46 -263.5t-130 -187.5t-195 -68q-74 0 -131 35.5t-82 93.5h-16q-108 -129 -275 -129q-177 0 -279 106.5t-102 291.5q0 211 134 340t350 129q86 0 189.5 -16.5t170.5 -39.5l-23 -489q0 -139 76 -139q64 0 102 93.5t38 244.5q0 161 -67 284.5 t-188.5 188.5t-277.5 65q-202 0 -351 -83t-228.5 -239.5t-79.5 -361.5q0 -276 147.5 -423.5t427.5 -147.5q106 0 233 23.5t250 68.5v-192q-214 -91 -475 -91q-380 0 -592.5 200t-212.5 556q0 247 108.5 448.5t309 316t461.5 114.5q220 0 393 -90t267 -256t94 -383zM711 627 q0 -211 172 -211q90 0 137 63.5t57 206.5l13 221q-51 11 -115 11q-125 0 -194.5 -78t-69.5 -213z" />
-<glyph unicode="A" horiz-adv-x="1413" d="M1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381z" />
-<glyph unicode="B" horiz-adv-x="1376" d="M184 1462h455q311 0 451.5 -88.5t140.5 -281.5q0 -131 -61.5 -215t-163.5 -101v-10q139 -31 200.5 -116t61.5 -226q0 -200 -144.5 -312t-392.5 -112h-547v1462zM494 883h180q126 0 182.5 39t56.5 129q0 84 -61.5 120.5t-194.5 36.5h-163v-325zM494 637v-381h202 q128 0 189 49t61 150q0 182 -260 182h-192z" />
-<glyph unicode="C" horiz-adv-x="1305" d="M805 1225q-175 0 -271 -131.5t-96 -366.5q0 -489 367 -489q154 0 373 77v-260q-180 -75 -402 -75q-319 0 -488 193.5t-169 555.5q0 228 83 399.5t238.5 263t364.5 91.5q213 0 428 -103l-100 -252q-82 39 -165 68t-163 29z" />
-<glyph unicode="D" horiz-adv-x="1516" d="M1397 745q0 -361 -205.5 -553t-593.5 -192h-414v1462h459q358 0 556 -189t198 -528zM1075 737q0 471 -416 471h-165v-952h133q448 0 448 481z" />
-<glyph unicode="E" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256z" />
-<glyph unicode="F" horiz-adv-x="1124" d="M489 0h-305v1462h838v-254h-533v-377h496v-253h-496v-578z" />
-<glyph unicode="G" horiz-adv-x="1483" d="M739 821h580v-758q-141 -46 -265.5 -64.5t-254.5 -18.5q-331 0 -505.5 194.5t-174.5 558.5q0 354 202.5 552t561.5 198q225 0 434 -90l-103 -248q-160 80 -333 80q-201 0 -322 -135t-121 -363q0 -238 97.5 -363.5t283.5 -125.5q97 0 197 20v305h-277v258z" />
-<glyph unicode="H" horiz-adv-x="1567" d="M1382 0h-309v631h-579v-631h-310v1462h310v-573h579v573h309v-1462z" />
-<glyph unicode="I" horiz-adv-x="678" d="M184 0v1462h310v-1462h-310z" />
-<glyph unicode="J" horiz-adv-x="678" d="M31 -430q-105 0 -183 22v258q80 -20 146 -20q102 0 146 63.5t44 198.5v1370h310v-1368q0 -256 -117 -390t-346 -134z" />
-<glyph unicode="K" horiz-adv-x="1360" d="M1360 0h-352l-383 616l-131 -94v-522h-310v1462h310v-669l122 172l396 497h344l-510 -647z" />
-<glyph unicode="L" horiz-adv-x="1157" d="M184 0v1462h310v-1206h593v-256h-903z" />
-<glyph unicode="M" horiz-adv-x="1931" d="M803 0l-352 1147h-9q19 -350 19 -467v-680h-277v1462h422l346 -1118h6l367 1118h422v-1462h-289v692q0 49 1.5 113t13.5 340h-9l-377 -1145h-284z" />
-<glyph unicode="N" horiz-adv-x="1665" d="M1481 0h-394l-636 1106h-9q19 -293 19 -418v-688h-277v1462h391l635 -1095h7q-15 285 -15 403v692h279v-1462z" />
-<glyph unicode="O" horiz-adv-x="1630" d="M1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5z" />
-<glyph unicode="P" horiz-adv-x="1286" d="M494 774h102q143 0 214 56.5t71 164.5q0 109 -59.5 161t-186.5 52h-141v-434zM1194 1006q0 -236 -147.5 -361t-419.5 -125h-133v-520h-310v1462h467q266 0 404.5 -114.5t138.5 -341.5z" />
-<glyph unicode="Q" horiz-adv-x="1630" d="M1511 733q0 -258 -91.5 -432.5t-268.5 -255.5l352 -393h-397l-268 328h-23q-336 0 -516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5z" />
-<glyph unicode="R" horiz-adv-x="1352" d="M494 813h100q147 0 217 49t70 154q0 104 -71.5 148t-221.5 44h-94v-395zM494 561v-561h-310v1462h426q298 0 441 -108.5t143 -329.5q0 -129 -71 -229.5t-201 -157.5q330 -493 430 -637h-344l-349 561h-165z" />
-<glyph unicode="S" horiz-adv-x="1128" d="M1047 406q0 -198 -142.5 -312t-396.5 -114q-234 0 -414 88v288q148 -66 250.5 -93t187.5 -27q102 0 156.5 39t54.5 116q0 43 -24 76.5t-70.5 64.5t-189.5 99q-134 63 -201 121t-107 135t-40 180q0 194 131.5 305t363.5 111q114 0 217.5 -27t216.5 -76l-100 -241 q-117 48 -193.5 67t-150.5 19q-88 0 -135 -41t-47 -107q0 -41 19 -71.5t60.5 -59t196.5 -102.5q205 -98 281 -196.5t76 -241.5z" />
-<glyph unicode="T" horiz-adv-x="1186" d="M748 0h-310v1204h-397v258h1104v-258h-397v-1204z" />
-<glyph unicode="U" horiz-adv-x="1548" d="M1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309z" />
-<glyph unicode="V" horiz-adv-x="1331" d="M1018 1462h313l-497 -1462h-338l-496 1462h313l275 -870q23 -77 47.5 -179.5t30.5 -142.5q11 92 75 322z" />
-<glyph unicode="W" horiz-adv-x="1980" d="M1608 0h-353l-198 768q-11 41 -37.5 169.5t-30.5 172.5q-6 -54 -30 -173.5t-37 -170.5l-197 -766h-352l-373 1462h305l187 -798q49 -221 71 -383q6 57 27.5 176.5t40.5 185.5l213 819h293l213 -819q14 -55 35 -168t32 -194q10 78 32 194.5t40 188.5l186 798h305z" />
-<glyph unicode="X" horiz-adv-x="1366" d="M1366 0h-354l-340 553l-340 -553h-332l485 754l-454 708h342l315 -526l309 526h334l-459 -725z" />
-<glyph unicode="Y" horiz-adv-x="1278" d="M639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336z" />
-<glyph unicode="Z" horiz-adv-x="1186" d="M1137 0h-1088v201l701 1005h-682v256h1050v-200l-700 -1006h719v-256z" />
-<glyph unicode="[" horiz-adv-x="678" d="M627 -324h-484v1786h484v-211h-224v-1364h224v-211z" />
-<glyph unicode="\" horiz-adv-x="846" d="M289 1462l545 -1462h-277l-545 1462h277z" />
-<glyph unicode="]" horiz-adv-x="678" d="M51 -113h223v1364h-223v211h484v-1786h-484v211z" />
-<glyph unicode="^" horiz-adv-x="1090" d="M8 520l438 950h144l495 -950h-239l-322 643l-280 -643h-236z" />
-<glyph unicode="_" horiz-adv-x="842" d="M846 -324h-850v140h850v-140z" />
-<glyph unicode="`" horiz-adv-x="1243" d="M707 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="a" horiz-adv-x="1237" d="M870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48t-65 -134 q0 -129 148 -129q106 0 169.5 61t63.5 162v92z" />
-<glyph unicode="b" horiz-adv-x="1296" d="M782 1139q198 0 310 -154.5t112 -423.5q0 -277 -115.5 -429t-314.5 -152q-197 0 -309 143h-21l-51 -123h-233v1556h305v-362q0 -69 -12 -221h12q107 166 317 166zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q94 0 149.5 86.5t55.5 251.5 t-56 247.5t-153 82.5z" />
-<glyph unicode="c" horiz-adv-x="1053" d="M614 -20q-522 0 -522 573q0 285 142 435.5t407 150.5q194 0 348 -76l-90 -236q-72 29 -134 47.5t-124 18.5q-238 0 -238 -338q0 -328 238 -328q88 0 163 23.5t150 73.5v-261q-74 -47 -149.5 -65t-190.5 -18z" />
-<glyph unicode="d" horiz-adv-x="1296" d="M514 -20q-197 0 -309.5 153t-112.5 424q0 275 114.5 428.5t315.5 153.5q211 0 322 -164h10q-23 125 -23 223v358h306v-1556h-234l-59 145h-13q-104 -165 -317 -165zM621 223q117 0 171.5 68t59.5 231v33q0 180 -55.5 258t-180.5 78q-102 0 -158.5 -86.5t-56.5 -251.5 t57 -247.5t163 -82.5z" />
-<glyph unicode="e" horiz-adv-x="1210" d="M623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z" />
-<glyph unicode="f" horiz-adv-x="793" d="M778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229z" />
-<glyph unicode="g" horiz-adv-x="1157" d="M1133 1118v-155l-175 -45q48 -75 48 -168q0 -180 -125.5 -280.5t-348.5 -100.5l-55 3l-45 5q-47 -36 -47 -80q0 -66 168 -66h190q184 0 280.5 -79t96.5 -232q0 -196 -163.5 -304t-469.5 -108q-234 0 -357.5 81.5t-123.5 228.5q0 101 63 169t185 97q-47 20 -82 65.5 t-35 96.5q0 64 37 106.5t107 83.5q-88 38 -139.5 122t-51.5 198q0 183 119 283t340 100q47 0 111.5 -8.5t82.5 -12.5h390zM270 -158q0 -63 60.5 -99t169.5 -36q164 0 257 45t93 123q0 63 -55 87t-170 24h-158q-84 0 -140.5 -39.5t-56.5 -104.5zM381 752q0 -91 41.5 -144 t126.5 -53q86 0 126 53t40 144q0 202 -166 202q-168 0 -168 -202z" />
-<glyph unicode="h" horiz-adv-x="1346" d="M1192 0h-305v653q0 242 -180 242q-128 0 -185 -87t-57 -282v-526h-305v1556h305v-317q0 -37 -7 -174l-7 -90h16q102 164 324 164q197 0 299 -106t102 -304v-729z" />
-<glyph unicode="i" horiz-adv-x="625" d="M147 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM465 0h-305v1118h305v-1118z" />
-<glyph unicode="j" horiz-adv-x="625" d="M70 -492q-117 0 -201 25v240q70 -19 143 -19q77 0 112.5 43t35.5 127v1194h305v-1239q0 -178 -103 -274.5t-292 -96.5zM147 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150z" />
-<glyph unicode="k" horiz-adv-x="1270" d="M453 608l133 170l313 340h344l-444 -485l471 -633h-352l-322 453l-131 -105v-348h-305v1556h305v-694l-16 -254h4z" />
-<glyph unicode="l" horiz-adv-x="625" d="M465 0h-305v1556h305v-1556z" />
-<glyph unicode="m" horiz-adv-x="2011" d="M1161 0h-305v653q0 121 -40.5 181.5t-127.5 60.5q-117 0 -170 -86t-53 -283v-526h-305v1118h233l41 -143h17q45 77 130 120.5t195 43.5q251 0 340 -164h27q45 78 132.5 121t197.5 43q190 0 287.5 -97.5t97.5 -312.5v-729h-306v653q0 121 -40.5 181.5t-127.5 60.5 q-112 0 -167.5 -80t-55.5 -254v-561z" />
-<glyph unicode="n" horiz-adv-x="1346" d="M1192 0h-305v653q0 121 -43 181.5t-137 60.5q-128 0 -185 -85.5t-57 -283.5v-526h-305v1118h233l41 -143h17q51 81 140.5 122.5t203.5 41.5q195 0 296 -105.5t101 -304.5v-729z" />
-<glyph unicode="o" horiz-adv-x="1268" d="M403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z" />
-<glyph unicode="p" horiz-adv-x="1296" d="M774 -20q-197 0 -309 143h-16q16 -140 16 -162v-453h-305v1610h248l43 -145h14q107 166 317 166q198 0 310 -153t112 -425q0 -179 -52.5 -311t-149.5 -201t-228 -69zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q205 0 205 338 q0 165 -50.5 247.5t-158.5 82.5z" />
-<glyph unicode="q" horiz-adv-x="1296" d="M623 219q116 0 170 66.5t59 232.5v37q0 180 -55.5 258t-178.5 78q-215 0 -215 -338q0 -168 53.5 -251t166.5 -83zM514 -20q-198 0 -310 152.5t-112 424.5q0 274 114.5 428t313.5 154q106 0 185 -40t139 -124h8l27 143h258v-1610h-306v469q0 61 13 168h-13 q-49 -81 -130 -123t-187 -42z" />
-<glyph unicode="r" horiz-adv-x="930" d="M784 1139q62 0 103 -9l-23 -286q-37 10 -90 10q-146 0 -227.5 -75t-81.5 -210v-569h-305v1118h231l45 -188h15q52 94 140.5 151.5t192.5 57.5z" />
-<glyph unicode="s" horiz-adv-x="1018" d="M940 332q0 -172 -119.5 -262t-357.5 -90q-122 0 -208 16.5t-161 48.5v252q85 -40 191.5 -67t187.5 -27q166 0 166 96q0 36 -22 58.5t-76 51t-144 66.5q-129 54 -189.5 100t-88 105.5t-27.5 146.5q0 149 115.5 230.5t327.5 81.5q202 0 393 -88l-92 -220q-84 36 -157 59 t-149 23q-135 0 -135 -73q0 -41 43.5 -71t190.5 -89q131 -53 192 -99t90 -106t29 -143z" />
-<glyph unicode="t" horiz-adv-x="889" d="M631 223q80 0 192 35v-227q-114 -51 -280 -51q-183 0 -266.5 92.5t-83.5 277.5v539h-146v129l168 102l88 236h195v-238h313v-229h-313v-539q0 -65 36.5 -96t96.5 -31z" />
-<glyph unicode="u" horiz-adv-x="1346" d="M952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234z" />
-<glyph unicode="v" horiz-adv-x="1165" d="M426 0l-426 1118h319l216 -637q36 -121 45 -229h6q5 96 45 229l215 637h319l-426 -1118h-313z" />
-<glyph unicode="w" horiz-adv-x="1753" d="M1079 0l-86 391l-116 494h-7l-204 -885h-328l-318 1118h304l129 -495q31 -133 63 -367h6q4 76 35 241l16 85l138 536h336l131 -536q4 -22 12.5 -65t16.5 -91.5t14.5 -95t7.5 -74.5h6q9 72 32 197.5t33 169.5l134 495h299l-322 -1118h-332z" />
-<glyph unicode="x" horiz-adv-x="1184" d="M389 571l-360 547h346l217 -356l219 356h346l-364 -547l381 -571h-347l-235 383l-236 -383h-346z" />
-<glyph unicode="y" horiz-adv-x="1165" d="M0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55z" />
-<glyph unicode="z" horiz-adv-x="999" d="M938 0h-883v180l518 705h-487v233h834v-198l-504 -687h522v-233z" />
-<glyph unicode="{" horiz-adv-x="807" d="M287 270q0 87 -65.5 133t-190.5 46v239q126 0 191 44t65 126v8v318q0 153 97 215.5t341 62.5v-225q-99 -3 -136.5 -38t-37.5 -103v-299q-6 -188 -234 -222v-12q234 -35 234 -212v-9v-299q0 -68 37 -103t137 -38v-226q-244 0 -341 62.5t-97 216.5v315z" />
-<glyph unicode="|" horiz-adv-x="1128" d="M455 1550h219v-2015h-219v2015z" />
-<glyph unicode="}" horiz-adv-x="807" d="M520 -45q0 -112 -41 -169t-135.5 -83.5t-261.5 -26.5v226q99 2 136.5 36t37.5 105v299v11q0 86 59 139.5t174 70.5v12q-227 34 -233 222v299q0 70 -37 104t-137 37v225q167 0 262 -26.5t135.5 -84t40.5 -167.5v-318v-10q0 -84 61.5 -126t194.5 -42v-239 q-125 0 -190.5 -41t-65.5 -138v-315z" />
-<glyph unicode="~" d="M322 672q-55 0 -117.5 -33.5t-116.5 -87.5v231q103 109 256 109q73 0 137.5 -16t139.5 -48q129 -55 227 -55q53 0 116 32t117 89v-231q-101 -109 -256 -109q-66 0 -126 13t-150 50q-131 56 -227 56z" />
-<glyph unicode="&#xa1;" horiz-adv-x="586" d="M168 606h244l51 -975h-346zM467 948q0 -84 -45 -127t-131 -43q-83 0 -128.5 44t-45.5 126q0 81 46.5 125.5t127.5 44.5q84 0 130 -44t46 -126z" />
-<glyph unicode="&#xa2;" d="M563 176q-420 59 -420 565q0 261 104.5 403t315.5 173v166h178v-158q166 -9 299 -74l-90 -235q-72 29 -134 47t-124 18q-121 0 -179 -83.5t-58 -254.5q0 -327 237 -327q82 0 148 15.5t166 60.5v-254q-127 -61 -265 -70v-188h-178v196z" />
-<glyph unicode="&#xa3;" d="M700 1483q195 0 390 -82l-93 -230q-157 64 -272 64q-78 0 -120 -44.5t-42 -127.5v-193h375v-219h-375v-143q0 -170 -151 -248h718v-260h-1048v248q103 44 141.5 101t38.5 157v145h-178v219h178v195q0 201 114.5 309.5t323.5 108.5z" />
-<glyph unicode="&#xa4;" d="M188 723q0 102 54 197l-129 127l147 147l127 -127q91 53 197 53q105 0 196 -55l127 129l150 -143l-129 -129q53 -89 53 -199q0 -107 -53 -199l125 -125l-146 -145l-127 125q-95 -51 -196 -51q-115 0 -199 51l-125 -123l-145 145l127 125q-54 93 -54 197zM395 723 q0 -77 54.5 -132.5t134.5 -55.5q81 0 136.5 55t55.5 133q0 80 -56.5 135t-135.5 55q-78 0 -133.5 -56t-55.5 -134z" />
-<glyph unicode="&#xa5;" d="M584 860l264 602h313l-383 -747h195v-178h-246v-138h246v-178h-246v-221h-287v221h-247v178h247v138h-247v178h190l-377 747h316z" />
-<glyph unicode="&#xa6;" horiz-adv-x="1128" d="M455 1550h219v-815h-219v815zM455 350h219v-815h-219v815z" />
-<glyph unicode="&#xa7;" horiz-adv-x="995" d="M121 805q0 79 36 144.5t97 105.5q-133 84 -133 233q0 131 111.5 210t293.5 79q170 0 363 -84l-82 -190q-68 32 -138.5 57.5t-148.5 25.5q-81 0 -118 -23t-37 -71q0 -49 49.5 -86t163.5 -82q163 -64 240 -148.5t77 -193.5q0 -177 -125 -260q62 -40 93.5 -92.5t31.5 -126.5 q0 -148 -119.5 -235.5t-320.5 -87.5q-203 0 -349 79v207q81 -41 180 -69.5t169 -28.5q194 0 194 117q0 39 -18.5 63t-63.5 49.5t-125 59.5q-183 74 -252 152.5t-69 195.5zM344 827q0 -67 65 -119t181 -98q78 57 78 146q0 68 -50.5 115t-183.5 96q-37 -14 -63.5 -53.5 t-26.5 -86.5z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1243" d="M279 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM682 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M895 1010q-97 0 -150 -74t-53 -205q0 -280 203 -280q57 0 123 15t123 44v-191q-120 -57 -252 -57q-204 0 -316 125t-112 346q0 220 110.5 342.5t309.5 122.5q149 0 305 -78l-74 -168q-113 58 -217 58zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM242 731q0 -164 82 -305.5t224 -223t304 -81.5q164 0 305.5 82t223 224t81.5 304q0 164 -82 305.5t-224 223t-304 81.5q-164 0 -305.5 -82t-223 -224t-81.5 -304z" />
-<glyph unicode="&#xaa;" horiz-adv-x="784" d="M561 764l-31 110q-43 -58 -105 -90t-136 -32q-117 0 -179.5 58.5t-62.5 164.5q0 109 82.5 163.5t267.5 63.5l99 4q0 117 -127 117q-81 0 -217 -61l-66 135q66 32 145.5 57t178.5 25q137 0 211.5 -71t74.5 -202v-442h-135zM252 977q0 -38 23 -56t55 -18q77 0 121.5 41.5 t44.5 106.5v36l-99 -6q-145 -10 -145 -104z" />
-<glyph unicode="&#xab;" horiz-adv-x="1260" d="M82 573l371 455l219 -119l-279 -348l279 -348l-219 -119l-371 453v26zM588 573l370 455l220 -119l-279 -348l279 -348l-220 -119l-370 453v26z" />
-<glyph unicode="&#xac;" d="M1081 248h-219v364h-774v219h993v-583z" />
-<glyph unicode="&#xad;" horiz-adv-x="659" d="M61 424zM61 424v250h537v-250h-537z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M1157 905q0 -170 -143 -233l237 -400h-254l-178 338h-47v-338h-229v916h264q181 0 265.5 -70t84.5 -213zM772 778h31q66 0 94.5 28.5t28.5 94.5q0 65 -28 92t-97 27h-29v-242zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370 t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM242 731q0 -164 82 -305.5t224 -223t304 -81.5q164 0 305.5 82t223 224t81.5 304q0 164 -82 305.5t-224 223t-304 81.5q-164 0 -305.5 -82t-223 -224t-81.5 -304z" />
-<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M1030 1556h-1036v201h1036v-201z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M92 1137q0 92 46 172t126 127t174 47q92 0 172.5 -46t127 -127t46.5 -173q0 -93 -46.5 -173.5t-126.5 -125.5t-173 -45q-145 0 -245.5 99.5t-100.5 244.5zM283 1137q0 -64 44.5 -109t110.5 -45t111 46t45 108q0 63 -45.5 110t-110.5 47q-64 0 -109.5 -46t-45.5 -111z" />
-<glyph unicode="&#xb1;" d="M475 674h-387v219h387v389h219v-389h387v-219h-387v-385h-219v385zM88 0v219h993v-219h-993z" />
-<glyph unicode="&#xb2;" horiz-adv-x="776" d="M702 586h-647v168l224 219q102 100 130.5 144.5t28.5 94.5q0 38 -24 58t-64 20q-81 0 -180 -88l-123 152q147 129 336 129q137 0 216 -66.5t79 -183.5q0 -85 -47 -160t-176 -192l-105 -95h352v-200z" />
-<glyph unicode="&#xb3;" horiz-adv-x="776" d="M666 1249q0 -143 -170 -198v-13q94 -20 146 -75t52 -134q0 -121 -88 -190.5t-274 -69.5q-143 0 -273 70v190q148 -90 271 -90q143 0 143 107q0 53 -44 79.5t-122 26.5h-112v160h92q83 0 123.5 26t40.5 83q0 38 -25 63t-76 25q-47 0 -89 -19t-99 -59l-101 141 q62 47 137.5 78t178.5 31q127 0 208 -64t81 -168z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1243" d="M332 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1352" d="M465 465q0 -121 44 -181.5t138 -60.5q126 0 183 86.5t57 282.5v526h305v-1118h-231l-43 150h-15q-42 -85 -102 -127.5t-148 -42.5q-62 0 -114 23t-84 67l5 -85l5 -157v-320h-305v1610h305v-653z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1167 -260h-161v1616h-166v-1616h-162v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h604v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="584" d="M117 723q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" />
-<glyph unicode="&#xb8;" horiz-adv-x="420" d="M418 -250q0 -128 -75.5 -185t-233.5 -57q-78 0 -146 21v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" />
-<glyph unicode="&#xb9;" horiz-adv-x="776" d="M584 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876z" />
-<glyph unicode="&#xba;" horiz-adv-x="795" d="M737 1116q0 -171 -91.5 -267.5t-250.5 -96.5q-153 0 -245.5 98.5t-92.5 265.5q0 169 89.5 266t252.5 97q152 0 245 -98.5t93 -264.5zM260 1116q0 -100 32.5 -150.5t104.5 -50.5t103.5 50.5t31.5 150.5t-31.5 149.5t-103.5 49.5t-104.5 -49.5t-32.5 -149.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="1260" d="M1178 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26zM672 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1804" d="M46 0zM538 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876zM1370 1462l-811 -1462h-239l811 1462h239zM1682 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1319 320v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191 h198z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1804" d="M46 0zM538 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876zM1370 1462l-811 -1462h-239l811 1462h239zM1716 1h-647v168l224 219q102 100 130.5 144.5t28.5 94.5q0 38 -24 58t-64 20q-81 0 -180 -88l-123 152q147 129 336 129 q137 0 216 -66.5t79 -183.5q0 -85 -47 -160t-176 -192l-105 -95h352v-200z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1804" d="M90 0zM697 1249q0 -143 -170 -198v-13q94 -20 146 -75t52 -134q0 -121 -88 -190.5t-274 -69.5q-143 0 -273 70v190q148 -90 271 -90q143 0 143 107q0 53 -44 79.5t-122 26.5h-112v160h92q83 0 123.5 26t40.5 83q0 38 -25 63t-76 25q-47 0 -89 -19t-99 -59l-101 141 q62 47 137.5 78t178.5 31q127 0 208 -64t81 -168zM1441 1462l-811 -1462h-239l811 1462h239zM1712 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1349 320v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191h198z" />
-<glyph unicode="&#xbf;" horiz-adv-x="977" d="M713 606v-74q0 -98 -44.5 -169t-152.5 -148q-109 -78 -137.5 -122t-28.5 -107q0 -57 43.5 -94t132.5 -37q79 0 169 29t186 71l102 -221q-98 -56 -221.5 -90.5t-229.5 -34.5q-220 0 -345.5 96.5t-125.5 265.5q0 108 48.5 187t191.5 184q95 70 121.5 107t26.5 98v59h264z M745 948q0 -84 -45 -127t-131 -43q-83 0 -128.5 44t-45.5 126q0 81 46.5 125.5t127.5 44.5q84 0 130 -44t46 -126z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM713 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM541 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM938 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM543 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16 q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM365 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM768 1743 q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM959 1567q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM801 1565 q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1950" d="M1829 0h-873v348h-491l-150 -348h-315l655 1462h1174v-254h-563v-321h526v-254h-526v-377h563v-256zM578 608h378v590h-127z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1305" d="M119 0zM805 1225q-175 0 -271 -131.5t-96 -366.5q0 -489 367 -489q154 0 373 77v-260q-180 -75 -402 -75q-319 0 -488 193.5t-169 555.5q0 228 83 399.5t238.5 263t364.5 91.5q213 0 428 -103l-100 -252q-82 39 -165 68t-163 29zM959 -250q0 -128 -75.5 -185t-233.5 -57 q-78 0 -146 21v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM634 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM424 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xca;" horiz-adv-x="1147" d="M175 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM841 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM272 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM675 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99 q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM317 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xcd;" horiz-adv-x="678" d="M167 0zM184 0v1462h310v-1462h-310zM167 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xce;" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM570 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xcf;" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM-3 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM400 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5 t-40.5 100.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1516" d="M47 850h137v612h459q358 0 556 -189t198 -528q0 -361 -205.5 -553t-593.5 -192h-414v596h-137v254zM1075 737q0 232 -104 351.5t-314 119.5h-163v-358h237v-254h-237v-340h131q450 0 450 481z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1665" d="M184 0zM1481 0h-394l-636 1106h-9q19 -293 19 -418v-688h-277v1462h391l635 -1095h7q-15 285 -15 403v692h279v-1462zM668 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149 q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM824 1579q-63 44 -185 142.5t-190 164.5v21h342 q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM658 1579v27q172 200 235 301h342v-21 q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM1047 1579q-157 93 -234 176q-78 -81 -229 -176h-203 v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM652 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149 q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM474 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37 t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM877 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xd7;" d="M428 723l-299 301l152 154l301 -299l305 299l153 -150l-305 -305l301 -303l-149 -152l-305 301l-301 -299l-150 152z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1630" d="M1511 733q0 -363 -180 -558t-516 -195q-197 0 -336 65l-90 -135l-162 108l90 136q-198 194 -198 581q0 365 180.5 557.5t517.5 192.5q198 0 344 -70l84 125l160 -104l-88 -131q194 -194 194 -572zM444 733q0 -191 56 -307l506 756q-84 45 -189 45q-185 0 -279 -124.5 t-94 -369.5zM1186 733q0 180 -51 297l-500 -751q76 -39 180 -39q371 0 371 493z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM750 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xda;" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM602 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM1006 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357 q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM433 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5 q-64 0 -101.5 35t-37.5 98zM836 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1278" d="M0 0zM639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336zM461 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xde;" horiz-adv-x="1286" d="M1194 770q0 -229 -142.5 -353t-404.5 -124h-153v-293h-310v1462h310v-229h178q254 0 388 -119t134 -344zM494 543h100q145 0 216 52.5t71 174.5q0 107 -63.5 159t-199.5 52h-124v-438z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1456" d="M1249 1241q0 -64 -21 -112.5t-53 -86.5t-69 -67t-69 -53t-53 -45t-21 -43q0 -27 26.5 -53t92.5 -66q146 -91 198.5 -140t78 -110t25.5 -139q0 -172 -116.5 -259t-343.5 -87q-99 0 -171 14.5t-132 48.5v242q53 -36 135.5 -61t146.5 -25q168 0 168 123q0 41 -16 66.5 t-57 55.5t-115 72q-126 72 -175 131.5t-49 140.5q0 64 35 117t105 102q77 55 108 95t31 86q0 60 -63.5 100.5t-163.5 40.5q-116 0 -181 -52.5t-65 -148.5v-1128h-305v1139q0 201 146.5 314.5t404.5 113.5q244 0 391 -88.5t147 -237.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM614 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM441 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM843 1240q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM467 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36 t-73 16.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM285 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM688 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36 q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM883 1479q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM725 1477q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1878" d="M1329 -20q-137 0 -249.5 50.5t-184.5 155.5q-98 -117 -196.5 -161.5t-256.5 -44.5q-161 0 -258.5 94.5t-97.5 259.5q0 178 121 262.5t362 93.5l191 6v84q0 69 -44.5 102t-121.5 33q-140 0 -305 -77l-99 202q189 101 422 101q227 0 342 -131q66 64 152.5 96.5t206.5 32.5 q221 0 349 -137.5t128 -370.5v-148h-723q5 -130 77 -203t202 -73q196 0 380 88v-236q-79 -39 -171 -59t-226 -20zM760 518l-113 -4q-124 -4 -186 -47.5t-62 -134.5q0 -129 140 -129q101 0 161 61t60 162v92zM1307 922q-217 0 -234 -236h430q-2 112 -55 174t-141 62z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1053" d="M92 0zM614 -20q-522 0 -522 573q0 285 142 435.5t407 150.5q194 0 348 -76l-90 -236q-72 29 -134 47.5t-124 18.5q-238 0 -238 -338q0 -328 238 -328q88 0 163 23.5t150 73.5v-261q-74 -47 -149.5 -65t-190.5 -18zM805 -250q0 -128 -75.5 -185t-233.5 -57q-78 0 -146 21 v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M620 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M447 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xea;" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M860 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M297 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM700 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xec;" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM274 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xed;" horiz-adv-x="625" d="M145 0zM465 0h-305v1118h305v-1118zM145 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xee;" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM544 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xef;" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM-29 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM374 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5 t-40.5 100.5z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1268" d="M510 1303q-80 53 -152 92l101 176q144 -65 258 -141l225 139l100 -154l-170 -104q156 -143 230 -324.5t74 -413.5q0 -280 -145 -436.5t-400 -156.5q-245 0 -392 137t-147 372q0 233 130 369.5t351 136.5q205 0 275 -98l8 4q-67 162 -192 281l-230 -142l-100 156zM864 532 q0 108 -61 173t-168 65q-121 0 -176.5 -68.5t-55.5 -214.5q0 -140 60 -211t172 -71q123 0 176 82t53 245z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1346" d="M160 0zM1192 0h-305v653q0 121 -43 181.5t-137 60.5q-128 0 -185 -85.5t-57 -283.5v-526h-305v1118h233l41 -143h17q51 81 140.5 122.5t203.5 41.5q195 0 296 -105.5t101 -304.5v-729zM508 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82 q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M612 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M467 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M864 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M469 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M291 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM694 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xf7;" d="M88 612v219h993v-219h-993zM444 373q0 76 37 113.5t103 37.5t102.5 -39t36.5 -112q0 -70 -37 -111t-102 -41t-102.5 39t-37.5 113zM444 1071q0 75 37 113.5t103 38.5q67 0 103 -40.5t36 -111.5q0 -70 -37 -110.5t-102 -40.5t-102.5 39t-37.5 112z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1268" d="M1176 561q0 -273 -144 -427t-401 -154q-126 0 -234 45l-67 -101l-154 105l68 100q-152 156 -152 432q0 274 143 426t402 152q132 0 248 -52l55 82l152 -108l-58 -84q142 -155 142 -416zM403 561q0 -94 19 -166l317 475q-43 23 -106 23q-122 0 -176 -82.5t-54 -249.5z M864 561q0 81 -12 141l-309 -462q38 -15 92 -15q122 0 175.5 84.5t53.5 251.5z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM620 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM498 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM901 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357 q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM326 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5 t-103 -36.5q-64 0 -101.5 35t-37.5 98zM729 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1165" d="M0 0zM0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55zM393 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5 h-203z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1296" d="M465 973q50 81 131 123.5t186 42.5q198 0 310 -154.5t112 -423.5q0 -273 -111.5 -427t-310.5 -154q-213 0 -317 137h-14l7 -62l7 -94v-453h-305v2048h305v-391l-7 -120l-7 -72h14zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q205 0 205 338 q0 165 -50.5 247.5t-158.5 82.5z" />
-<glyph unicode="&#xff;" horiz-adv-x="1165" d="M0 0zM0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55zM243 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5 t-103 -36.5q-64 0 -101.5 35t-37.5 98zM646 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#x131;" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118z" />
-<glyph unicode="&#x152;" horiz-adv-x="1993" d="M1872 0h-873q-38 -9 -109 -14.5t-116 -5.5q-319 0 -487 197t-168 558q0 363 169.5 556.5t487.5 193.5q61 0 127 -7t101 -16h868v-254h-563v-321h526v-254h-526v-377h563v-256zM776 1227q-166 0 -252 -125.5t-86 -368.5q0 -244 86 -368.5t250 -124.5q65 0 126 10.5 t99 28.5v907q-35 19 -101.5 30t-121.5 11z" />
-<glyph unicode="&#x153;" horiz-adv-x="2003" d="M1446 -20q-271 0 -420 155q-141 -155 -391 -155q-162 0 -286 70t-190.5 202t-66.5 309q0 277 141.5 427.5t399.5 150.5q112 0 212 -39.5t171 -116.5q144 156 383 156q244 0 380 -135t136 -373v-148h-746v-8q7 -127 81.5 -197.5t207.5 -70.5q107 0 200 21t193 67v-236 q-81 -39 -175.5 -59t-229.5 -20zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1405 922q-94 0 -156 -57.5t-71 -178.5h450q-2 111 -60.5 173.5t-162.5 62.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1278" d="M0 0zM639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336zM297 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM700 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97 t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1243" d="M852 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M842 1479q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM684 1477q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1243" d="M457 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
-<glyph unicode="&#x2011;" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
-<glyph unicode="&#x2012;" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M82 436v230h860v-230h-860z" />
-<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M82 436v230h1884v-230h-1884z" />
-<glyph unicode="&#x2018;" horiz-adv-x="444" d="M39 961l-14 22q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280z" />
-<glyph unicode="&#x2019;" horiz-adv-x="444" d="M406 1462l14 -22q-50 -197 -176 -479h-219q69 296 100 501h281z" />
-<glyph unicode="&#x201a;" horiz-adv-x="596" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280z" />
-<glyph unicode="&#x201c;" horiz-adv-x="911" d="M492 983q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280zM25 983q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280z" />
-<glyph unicode="&#x201d;" horiz-adv-x="911" d="M420 1440q-50 -197 -176 -479h-219q69 296 100 501h281zM887 1440q-50 -197 -176 -479h-219q69 296 100 501h280z" />
-<glyph unicode="&#x201e;" horiz-adv-x="1061" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280zM926 215q-52 -202 -176 -479h-220q65 266 101 502h280z" />
-<glyph unicode="&#x2022;" horiz-adv-x="770" d="M98 748q0 154 74 235.5t213 81.5q137 0 212 -82t75 -235q0 -152 -75.5 -235t-211.5 -83q-138 0 -212.5 83t-74.5 235z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1751" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5zM700 143q0 84 45 127t132 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-85 0 -131 44.5t-46 125.5zM1284 143q0 84 45 127t131 43 q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="754" d="M82 573l371 455l219 -119l-279 -348l279 -348l-219 -119l-371 453v26z" />
-<glyph unicode="&#x203a;" horiz-adv-x="754" d="M672 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26z" />
-<glyph unicode="&#x2044;" horiz-adv-x="266" d="M657 1462l-811 -1462h-239l811 1462h239z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="776" d="M758 737h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM395 905v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191h198z" />
-<glyph unicode="&#x20ac;" d="M803 1225q-122 0 -201 -70.5t-102 -204.5h403v-176h-418l-2 -35v-47l2 -33h355v-178h-338q51 -243 321 -243q143 0 275 57v-256q-116 -59 -293 -59q-245 0 -403 133t-199 368h-137v178h118q-4 23 -4 62l2 53h-116v176h133q37 242 199 382.5t405 140.5q188 0 352 -82 l-98 -232q-69 31 -129 48.5t-125 17.5z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1534" d="M381 741h-168v572h-197v149h564v-149h-199v-572zM956 741l-165 529h-7l4 -111v-418h-163v721h247l160 -510l170 510h240v-721h-168v408l4 121h-6l-174 -529h-142z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" />
-<glyph horiz-adv-x="1296" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-Bold-webfont.woff b/doc/fonts/OpenSans-Bold-webfont.woff
deleted file mode 100644
index 1205787b0ed50db71ebd4f8a7f85d106721ff258..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22432
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

diff --git a/doc/fonts/OpenSans-BoldItalic-webfont.eot b/doc/fonts/OpenSans-BoldItalic-webfont.eot
deleted file mode 100644
index 1f639a15ff3cc66d3b22b55a7f28a8cf0d821b03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20133
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

diff --git a/doc/fonts/OpenSans-BoldItalic-webfont.svg b/doc/fonts/OpenSans-BoldItalic-webfont.svg
deleted file mode 100644
index 6a2607b..0000000
--- a/doc/fonts/OpenSans-BoldItalic-webfont.svg
+++ /dev/null
@@ -1,1830 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sansbold_italic" horiz-adv-x="1128" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1352" d="M0 0zM-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z M1065 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123zM1081 0h-301l237 1118h301z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1352" d="M0 0zM-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z M1081 0h-301l330 1556h301z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="2048" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h395l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49 l-79 -224q-69 31 -134 31q-57 0 -91.5 -40t-47.5 -105l-12 -62h219l-49 -229h-219l-215 -1010q-77 -371 -404 -371q-104 0 -174 25v242q61 -21 115 -21q136 0 172 170l205 965h-396l-215 -1010q-77 -371 -403 -371zM1778 0h-301l237 1118h301zM1761 1380q0 87 48 131.5 t135 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-152 0 -152 123z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="2048" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h395l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49 l-79 -224q-69 31 -134 31q-57 0 -91.5 -40t-47.5 -105l-12 -62h219l-49 -229h-219l-215 -1010q-77 -371 -404 -371q-104 0 -174 25v242q61 -21 115 -21q136 0 172 170l205 965h-396l-215 -1010q-77 -371 -403 -371zM1778 0h-301l329 1556h301z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="586" d="M391 485h-241l157 977h340zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" />
-<glyph unicode="&#x22;" horiz-adv-x="928" d="M549 1462l-152 -528h-196l71 528h277zM954 1462l-151 -528h-199l74 528h276z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M1036 846l-69 -232h258l-19 -206h-297l-116 -408h-220l117 408h-194l-115 -408h-215l113 408h-238l18 206h277l70 232h-252l18 209h289l119 407h217l-117 -407h199l116 407h215l-116 -407h239l-18 -209h-279zM553 614h197l69 232h-196z" />
-<glyph unicode="$" d="M1034 496q0 -184 -125.5 -291.5t-367.5 -124.5l-39 -199h-140l44 201q-209 12 -355 86v266q198 -107 404 -117l71 322q-163 61 -241 151t-78 214q0 173 127 279.5t350 121.5l35 151h139l-33 -151q166 -22 295 -90l-106 -232q-132 65 -242 74l-63 -299q131 -51 195 -99.5 t97 -113t33 -149.5zM594 322q63 9 102 45t39 98q0 46 -24.5 75.5t-59.5 43.5zM633 1157q-62 -7 -96.5 -41t-34.5 -94q0 -79 80 -111z" />
-<glyph unicode="%" horiz-adv-x="1753" d="M518 1274q-63 0 -110.5 -128.5t-47.5 -277.5q0 -96 56 -96q65 0 112 131t47 275q0 96 -57 96zM821 1165q0 -166 -56 -310t-151 -217t-217 -73q-139 0 -210.5 83.5t-71.5 236.5q0 169 55.5 311.5t148.5 214.5t216 72q137 0 211.5 -80t74.5 -238zM1554 1462l-1083 -1462 h-240l1088 1462h235zM1376 690q-39 0 -75 -56t-59 -154t-23 -195t55 -97q41 0 77 55t59.5 154.5t23.5 196.5q0 96 -58 96zM1679 590q0 -167 -54 -313.5t-148 -220.5t-215 -74q-144 0 -216.5 78.5t-72.5 222.5q0 177 53 322.5t148 219.5t219 74q137 0 211.5 -78.5 t74.5 -230.5z" />
-<glyph unicode="&#x26;" horiz-adv-x="1450" d="M1325 0h-350l-72 98q-175 -118 -403 -118q-209 0 -320.5 97.5t-111.5 280.5q0 145 78.5 248.5t273.5 200.5q-76 130 -76 258q0 195 117.5 307.5t316.5 112.5q169 0 266 -82.5t97 -224.5q0 -280 -365 -426l195 -263q44 57 80.5 121.5t78.5 173.5h300q-133 -313 -310 -497z M541 623q-88 -51 -123 -104.5t-35 -131.5q0 -65 45.5 -108t116.5 -43q115 0 221 59zM662 920q113 59 155.5 111t42.5 112q0 57 -30 82.5t-70 25.5q-66 0 -102.5 -46.5t-36.5 -119.5q0 -46 12 -92t29 -73z" />
-<glyph unicode="'" horiz-adv-x="522" d="M549 1462l-152 -528h-196l71 528h277z" />
-<glyph unicode="(" horiz-adv-x="694" d="M74 281q0 339 122.5 626.5t381.5 554.5h262q-255 -278 -377.5 -573.5t-122.5 -618.5q0 -308 117 -594h-234q-149 266 -149 605z" />
-<glyph unicode=")" horiz-adv-x="694" d="M618 858q0 -342 -124 -630.5t-379 -551.5h-262q499 545 499 1192q0 307 -116 594h233q149 -264 149 -604z" />
-<glyph unicode="*" horiz-adv-x="1116" d="M885 1522l-113 -353l387 29l-18 -254l-338 43l160 -336l-246 -73l-90 337l-197 -278l-207 164l275 248l-326 92l86 237l338 -174l33 369z" />
-<glyph unicode="+" d="M475 612h-366v219h366v369h219v-369h367v-219h-367v-364h-219v364z" />
-<glyph unicode="," horiz-adv-x="569" d="M377 238l8 -23q-118 -255 -262 -479h-225q74 167 194 502h285z" />
-<glyph unicode="-" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" />
-<glyph unicode="." horiz-adv-x="584" d="M25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" />
-<glyph unicode="/" horiz-adv-x="862" d="M1014 1462l-809 -1462h-295l809 1462h295z" />
-<glyph unicode="0" d="M1110 1012q0 -470 -168.5 -751t-472.5 -281q-198 0 -300.5 122t-102.5 365q0 297 84 537t228 360.5t333 120.5q399 0 399 -473zM684 1235q-80 0 -149.5 -104t-117.5 -302t-48 -368q0 -115 27.5 -173.5t97.5 -58.5q81 0 150.5 106t116 301t46.5 386q0 111 -30.5 162 t-92.5 51z" />
-<glyph unicode="1" d="M688 0h-305l180 829q35 152 76 287q-9 -8 -61.5 -47t-262.5 -170l-133 215l566 348h249z" />
-<glyph unicode="2" d="M913 0h-962l43 213l477 424q180 159 248.5 254.5t68.5 179.5q0 75 -41 114.5t-110 39.5q-66 0 -135.5 -33.5t-171.5 -118.5l-146 203q132 112 252 159.5t250 47.5q190 0 301 -98t111 -259q0 -107 -41 -201t-122.5 -188t-266.5 -245l-269 -222v-10h568z" />
-<glyph unicode="3" d="M1104 1149q0 -156 -94.5 -262t-261.5 -135v-4q131 -26 198.5 -106.5t67.5 -201.5q0 -133 -74 -238t-212 -163.5t-327 -58.5q-239 0 -387 79v267q84 -50 182 -75.5t191 -25.5q158 0 243 63.5t85 176.5q0 172 -258 172h-138l46 221h73q167 0 263 62t96 172q0 67 -43 104 t-121 37q-134 0 -287 -100l-127 204q124 81 232.5 113.5t246.5 32.5q190 0 298 -90.5t108 -243.5z" />
-<glyph unicode="4" d="M1028 303h-170l-63 -303h-293l63 303h-590l48 234l770 925h311l-195 -919h170zM616 543l58 248q12 58 40 164t42 141h-6q-35 -63 -132 -181l-313 -372h311z" />
-<glyph unicode="5" d="M623 922q183 0 289 -103t106 -287q0 -167 -71.5 -292t-208.5 -192.5t-330 -67.5q-117 0 -218.5 23t-162.5 58v269q174 -99 352 -99q154 0 241 71t87 194q0 94 -57.5 141t-166.5 47q-102 0 -213 -33l-104 78l207 733h755l-55 -262h-489l-88 -293q72 15 127 15z" />
-<glyph unicode="6" d="M88 469q0 202 61 395.5t167.5 335t256.5 213.5t357 72q125 0 223 -27l-51 -246q-84 25 -191 25q-194 0 -313.5 -108t-185.5 -345h4q115 166 311 166q157 0 242.5 -97t85.5 -273q0 -169 -71 -313.5t-190.5 -215.5t-277.5 -71q-212 0 -320 127t-108 362zM530 227 q99 0 161.5 94t62.5 236q0 71 -33.5 113.5t-102.5 42.5q-60 0 -114.5 -35.5t-87.5 -95.5t-33 -160q0 -91 40 -143t107 -52z" />
-<glyph unicode="7" d="M78 0l737 1202h-629l56 260h975l-41 -194l-752 -1268h-346z" />
-<glyph unicode="8" d="M721 1485q123 0 215.5 -42t141 -118t48.5 -174q0 -134 -80.5 -233.5t-230.5 -151.5q217 -141 217 -365q0 -122 -63.5 -218.5t-181 -149.5t-273.5 -53q-214 0 -336.5 100t-122.5 270q0 298 348 426q-165 132 -165 299q0 119 58 212.5t168 145.5t257 52zM582 643 q-116 -45 -173 -107t-57 -153q0 -81 50 -128.5t135 -47.5q93 0 147.5 53.5t54.5 138.5q0 73 -36.5 131.5t-120.5 112.5zM694 1260q-76 0 -121 -46.5t-45 -119.5q0 -132 123 -201q185 72 185 221q0 68 -39.5 107t-102.5 39z" />
-<glyph unicode="9" d="M1092 1001q0 -280 -99 -533t-264 -370.5t-403 -117.5q-128 0 -240 32v256q111 -41 227 -41q121 0 207.5 49t144 138.5t99.5 257.5h-4q-111 -158 -295 -158q-163 0 -252.5 103.5t-89.5 285.5q0 166 73 305.5t196 208t286 68.5q203 0 308.5 -123t105.5 -361zM645 1237 q-65 0 -115.5 -42t-78 -114t-27.5 -153q0 -87 37.5 -131.5t105.5 -44.5q60 0 111.5 36.5t82 100t30.5 158.5q0 84 -35.5 137t-110.5 53z" />
-<glyph unicode=":" horiz-adv-x="584" d="M207 940q0 92 55.5 145.5t149.5 53.5q68 0 108.5 -38.5t40.5 -107.5q0 -86 -54.5 -140t-144.5 -54q-72 0 -113.5 36.5t-41.5 104.5zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" />
-<glyph unicode=";" horiz-adv-x="584" d="M385 215q-118 -255 -262 -479h-225q74 167 194 502h285zM207 940q0 92 55.5 145.5t149.5 53.5q68 0 108.5 -38.5t40.5 -107.5q0 -86 -54.5 -140t-144.5 -54q-72 0 -113.5 36.5t-41.5 104.5z" />
-<glyph unicode="&#x3c;" d="M1061 203l-952 438v143l952 496v-240l-643 -317l643 -281v-239z" />
-<glyph unicode="=" d="M109 807v217h952v-217h-952zM109 418v219h952v-219h-952z" />
-<glyph unicode="&#x3e;" d="M109 442l643 281l-643 317v240l952 -496v-143l-952 -438v239z" />
-<glyph unicode="?" horiz-adv-x="940" d="M260 485l14 78q19 103 73.5 177t172.5 155q124 84 157.5 127t33.5 96q0 119 -133 119q-50 0 -106.5 -16t-201.5 -84l-92 221q230 125 445 125q177 0 280 -87.5t103 -244.5q0 -83 -28.5 -149.5t-82.5 -123t-190 -147.5q-64 -43 -96.5 -73t-52.5 -64.5t-38 -108.5h-258z M166 115q0 91 55 144.5t150 53.5q68 0 108.5 -38t40.5 -107q0 -87 -55 -141t-143 -54q-74 0 -115 38t-41 104z" />
-<glyph unicode="@" horiz-adv-x="1753" d="M1733 840q0 -173 -64 -321t-177.5 -231t-254.5 -83q-88 0 -144.5 38.5t-72.5 108.5h-6q-50 -77 -113 -112t-147 -35q-127 0 -198 79.5t-71 229.5q0 147 67.5 276.5t187.5 205t268 75.5q185 0 327 -55l-106 -420q-11 -44 -19 -76.5t-8 -64.5q0 -68 58 -68q66 0 124 64 t92.5 171t34.5 214q0 213 -123.5 325.5t-359.5 112.5q-203 0 -366.5 -94t-255 -266t-91.5 -392q0 -243 134 -380.5t376 -137.5q117 0 219.5 20t221.5 66v-186q-230 -90 -465 -90q-217 0 -378 85.5t-246 241.5t-85 359q0 279 120.5 497t343 341.5t497.5 123.5 q318 0 499 -163.5t181 -458.5zM995 889q-82 0 -145.5 -51.5t-100 -137t-36.5 -174.5q0 -65 24.5 -102t69.5 -37q141 0 213 270l57 222q-36 10 -82 10z" />
-<glyph unicode="A" horiz-adv-x="1286" d="M842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333z" />
-<glyph unicode="B" horiz-adv-x="1270" d="M788 1462q229 0 346 -81.5t117 -243.5q0 -150 -83 -247.5t-236 -129.5v-6q100 -26 159.5 -96.5t59.5 -180.5q0 -229 -153 -353t-423 -124h-522l309 1462h426zM545 883h149q121 0 181.5 48.5t60.5 139.5q0 137 -170 137h-152zM412 256h180q117 0 183.5 58t66.5 161 q0 162 -183 162h-165z" />
-<glyph unicode="C" horiz-adv-x="1253" d="M905 1227q-132 0 -237.5 -81t-169.5 -238.5t-64 -338.5q0 -167 68.5 -248t218.5 -81q146 0 338 77v-260q-199 -77 -400 -77q-254 0 -395 149.5t-141 423.5q0 262 104 482.5t278 335t400 114.5q125 0 222 -22.5t208 -82.5l-118 -250q-106 59 -175 78t-137 19z" />
-<glyph unicode="D" horiz-adv-x="1386" d="M1323 909q0 -280 -98 -486.5t-283.5 -314.5t-437.5 -108h-451l309 1462h396q270 0 417.5 -143t147.5 -410zM518 256q148 0 258 76t172 223.5t62 337.5q0 154 -72.5 234.5t-208.5 80.5h-115l-202 -952h106z" />
-<glyph unicode="E" horiz-adv-x="1110" d="M870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512z" />
-<glyph unicode="F" horiz-adv-x="1087" d="M358 0h-305l309 1462h814l-54 -254h-508l-79 -377h473l-56 -253h-473z" />
-<glyph unicode="G" horiz-adv-x="1413" d="M754 821h563l-162 -762q-134 -46 -248.5 -62.5t-242.5 -16.5q-259 0 -400 147t-141 422q0 268 107 484.5t301 334t448 117.5q218 0 410 -99l-115 -251q-74 40 -148 64t-161 24q-153 0 -273.5 -83t-189 -236.5t-68.5 -330.5q0 -172 72.5 -252.5t222.5 -80.5q76 0 170 24 l66 299h-267z" />
-<glyph unicode="H" horiz-adv-x="1434" d="M1135 0h-306l134 631h-471l-134 -631h-305l309 1462h306l-121 -573h471l121 573h305z" />
-<glyph unicode="I" horiz-adv-x="659" d="M53 0l312 1462h305l-312 -1462h-305z" />
-<glyph unicode="J" horiz-adv-x="678" d="M-135 -430q-94 0 -187 27v253q88 -20 164 -20q99 0 160.5 60.5t89.5 191.5l293 1380h305l-303 -1423q-52 -245 -175.5 -357t-346.5 -112z" />
-<glyph unicode="K" horiz-adv-x="1255" d="M1141 0h-338l-211 592l-125 -70l-109 -522h-305l309 1462h306l-152 -702l158 205l409 497h361l-594 -700z" />
-<glyph unicode="L" horiz-adv-x="1061" d="M53 0l309 1462h306l-256 -1206h512l-54 -256h-817z" />
-<glyph unicode="M" horiz-adv-x="1802" d="M838 369l551 1093h423l-309 -1462h-280l145 692q53 247 105 441h-5l-569 -1133h-281l-61 1133h-4q-11 -88 -38 -231t-187 -902h-275l309 1462h404l68 -1093h4z" />
-<glyph unicode="N" horiz-adv-x="1546" d="M1247 0h-342l-356 1106h-6l-4 -32q-32 -216 -66 -386l-145 -688h-275l309 1462h357l340 -1077h4q12 76 39 217t180 860h274z" />
-<glyph unicode="O" horiz-adv-x="1495" d="M1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246t56 357 q0 142 -65 219.5t-183 77.5z" />
-<glyph unicode="P" horiz-adv-x="1188" d="M522 774h56q142 0 223.5 69t81.5 185q0 180 -195 180h-74zM1190 1036q0 -241 -169.5 -378.5t-467.5 -137.5h-86l-109 -520h-305l309 1462h338q242 0 366 -106.5t124 -319.5z" />
-<glyph unicode="Q" horiz-adv-x="1495" d="M1432 938q0 -316 -122.5 -555.5t-334.5 -337.5l254 -393h-359l-178 328h-26q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87 t155.5 246t56 357q0 142 -65 219.5t-183 77.5z" />
-<glyph unicode="R" horiz-adv-x="1247" d="M530 813h78q131 0 204 57t73 174q0 82 -47.5 123t-149.5 41h-74zM477 561l-119 -561h-305l309 1462h359q237 0 356 -102t119 -299q0 -158 -83 -271.5t-239 -168.5l261 -621h-332l-207 561h-119z" />
-<glyph unicode="S" horiz-adv-x="1085" d="M946 432q0 -209 -148 -330.5t-401 -121.5q-221 0 -356 90v274q193 -108 358 -108q112 0 175 42.5t63 116.5q0 43 -13.5 75.5t-38.5 60.5t-124 102q-138 99 -194 196t-56 209q0 129 62 230.5t176.5 158t263.5 56.5q217 0 397 -99l-109 -233q-156 74 -288 74 q-83 0 -136 -45t-53 -119q0 -61 33 -106.5t148 -120.5q121 -80 181 -176.5t60 -225.5z" />
-<glyph unicode="T" horiz-adv-x="1087" d="M571 0h-305l254 1204h-352l55 258h1010l-55 -258h-353z" />
-<glyph unicode="U" horiz-adv-x="1415" d="M1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306z" />
-<glyph unicode="V" horiz-adv-x="1208" d="M535 299q78 221 110 283l432 880h316l-748 -1462h-334l-127 1462h295l51 -880q4 -45 4 -133q-2 -103 -6 -150h7z" />
-<glyph unicode="W" horiz-adv-x="1831" d="M1006 1018q-46 -146 -115 -299l-324 -719h-338l-45 1462h287l6 -798q0 -52 -4 -173t-10 -174h6q22 64 67 180.5t60 145.5l369 819h270l21 -873q0 -146 -9 -272h6q43 129 131 349l330 796h309l-647 -1462h-346l-22 721l-2 139q0 88 4 158h-4z" />
-<glyph unicode="X" horiz-adv-x="1241" d="M1124 0h-331l-172 543l-396 -543h-342l576 764l-238 698h320l153 -518l363 518h344l-545 -725z" />
-<glyph unicode="Y" horiz-adv-x="1155" d="M627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312z" />
-<glyph unicode="Z" horiz-adv-x="1098" d="M920 0h-981l38 201l777 1005h-543l53 256h936l-41 -202l-782 -1004h596z" />
-<glyph unicode="[" horiz-adv-x="678" d="M436 -324h-473l381 1786h473l-45 -211h-215l-291 -1364h215z" />
-<glyph unicode="\" horiz-adv-x="862" d="M481 1462l224 -1462h-267l-217 1462h260z" />
-<glyph unicode="]" horiz-adv-x="678" d="M-92 -113h213l291 1364h-215l45 211h473l-381 -1786h-471z" />
-<glyph unicode="^" horiz-adv-x="1081" d="M20 520l619 950h147l277 -950h-223l-174 633l-402 -633h-244z" />
-<glyph unicode="_" horiz-adv-x="819" d="M635 -324h-821l30 140h822z" />
-<glyph unicode="`" horiz-adv-x="1135" d="M934 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="a" horiz-adv-x="1217" d="M406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44z" />
-<glyph unicode="b" horiz-adv-x="1219" d="M813 1139q146 0 230.5 -108t84.5 -298t-68 -367.5t-187 -281.5t-263 -104q-194 0 -276 163h-8l-58 -143h-231l330 1556h301l-62 -288q-41 -182 -84 -299h8q78 98 142.5 134t140.5 36zM692 895q-68 0 -130 -65t-102 -180.5t-40 -250.5q0 -80 37 -128t102 -48q67 0 128 69 t98.5 189.5t37.5 237.5q0 176 -131 176z" />
-<glyph unicode="c" horiz-adv-x="989" d="M506 -20q-201 0 -308.5 107.5t-107.5 303.5q0 212 74.5 385.5t209.5 268t308 94.5q182 0 328 -72l-92 -229q-54 23 -106 40t-118 17q-85 0 -153.5 -64t-107 -175.5t-38.5 -239.5q0 -96 45.5 -144.5t126.5 -48.5q76 0 141 23.5t134 58.5v-246q-152 -79 -336 -79z" />
-<glyph unicode="d" horiz-adv-x="1217" d="M406 -20q-147 0 -231.5 107t-84.5 300q0 196 71.5 374.5t188.5 278t258 99.5q82 0 141.5 -37t112.5 -127h8l2 28q6 110 25 195l76 358h301l-330 -1556h-229l14 145h-4q-71 -87 -148.5 -126t-170.5 -39zM532 223q66 0 128.5 68.5t100.5 182.5t38 245q0 80 -37.5 128 t-102.5 48q-68 0 -129.5 -72t-98 -190t-36.5 -234q0 -176 137 -176z" />
-<glyph unicode="e" horiz-adv-x="1141" d="M696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5t147.5 -52.5 q87 0 158 19t172 67v-227q-172 -86 -390 -86z" />
-<glyph unicode="f" horiz-adv-x="764" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z" />
-<glyph unicode="g" horiz-adv-x="1108" d="M1186 1116l-35 -166l-174 -41q16 -52 16 -118q0 -195 -121 -308.5t-329 -113.5q-59 0 -99 10q-84 -27 -84 -78q0 -34 30 -49t89 -23l137 -18q163 -21 237.5 -84.5t74.5 -183.5q0 -211 -156 -323t-446 -112q-208 0 -324.5 75.5t-116.5 207.5q0 102 68.5 175.5t214.5 121.5 q-74 47 -74 133q0 71 44.5 122.5t146.5 98.5q-65 49 -96 112t-31 153q0 199 125.5 315.5t341.5 116.5q83 0 166 -23h395zM365 -6q-106 -14 -160.5 -57t-54.5 -109q0 -115 194 -115q151 0 228 45t77 127q0 39 -32.5 60t-137.5 35zM614 948q-77 0 -124.5 -76.5t-47.5 -191.5 q0 -119 103 -119q75 0 121.5 76.5t46.5 193.5t-99 117z" />
-<glyph unicode="h" horiz-adv-x="1237" d="M977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l330 1556h301q-39 -181 -60 -278t-86 -309h8q62 77 138 123.5t176 46.5q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180z" />
-<glyph unicode="i" horiz-adv-x="608" d="M322 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123zM338 0h-301l237 1118h301z" />
-<glyph unicode="j" horiz-adv-x="608" d="M-90 -492q-104 0 -174 25v242q61 -21 114 -21q137 0 173 170l253 1194h302l-265 -1239q-77 -371 -403 -371zM324 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123z" />
-<glyph unicode="k" horiz-adv-x="1163" d="M920 1118h344l-498 -504l285 -614h-336l-183 420l-120 -72l-74 -348h-301l330 1556h301l-148 -694q-8 -41 -29 -117l-28 -102h4z" />
-<glyph unicode="l" horiz-adv-x="608" d="M338 0h-301l330 1556h301z" />
-<glyph unicode="m" horiz-adv-x="1853" d="M844 1139q219 0 262 -228h6q68 110 160.5 169t197.5 59q136 0 207.5 -85t71.5 -237q0 -76 -23 -180l-133 -637h-301l138 653q16 68 16 119q0 123 -98 123q-92 0 -166.5 -112t-118.5 -318l-96 -465h-301l137 653q16 68 16 119q0 123 -98 123q-92 0 -167 -114t-118 -318 l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228z" />
-<glyph unicode="n" horiz-adv-x="1237" d="M977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180z" />
-<glyph unicode="o" horiz-adv-x="1198" d="M805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5q196 0 310 -118 t114 -325z" />
-<glyph unicode="p" horiz-adv-x="1219" d="M813 1139q146 0 230.5 -107.5t84.5 -300.5q0 -191 -68.5 -367.5t-187.5 -280t-262 -103.5q-83 0 -143 37t-111 126h-8q-12 -159 -43 -295l-72 -340h-301l342 1610h230l-17 -170h9q138 191 317 191zM692 895q-68 0 -131.5 -67.5t-102 -180t-38.5 -248.5q0 -80 37 -128 t102 -48q67 0 128 69t98.5 189.5t37.5 237.5q0 176 -131 176z" />
-<glyph unicode="q" horiz-adv-x="1217" d="M391 -20q-88 0 -156 47.5t-106.5 138.5t-38.5 219q0 198 72 377.5t189 278t257 98.5q86 0 152.5 -37.5t124.5 -126.5h8l57 143h232l-342 -1610h-301q47 218 73 337.5t84 304.5h-8q-72 -94 -143 -132t-154 -38zM535 223q64 0 127.5 70t100 181t36.5 245q0 80 -37.5 128 t-102.5 48q-68 0 -129.5 -72t-98 -190t-36.5 -234q0 -88 36.5 -132t103.5 -44z" />
-<glyph unicode="r" horiz-adv-x="862" d="M842 1139q59 0 96 -11l-66 -290q-45 16 -100 16q-116 0 -203.5 -91.5t-124.5 -262.5l-106 -500h-301l237 1118h230l-21 -207h6q147 228 353 228z" />
-<glyph unicode="s" horiz-adv-x="969" d="M829 369q0 -188 -124.5 -288.5t-346.5 -100.5q-107 0 -186.5 15t-148.5 50v248q157 -90 319 -90q80 0 131 32.5t51 88.5q0 43 -37 77t-131 86q-121 68 -169 135.5t-48 159.5q0 170 110.5 263.5t315.5 93.5q201 0 363 -95l-99 -215q-140 84 -258 84q-57 0 -92 -25.5 t-35 -68.5q0 -39 32 -68.5t120 -74.5q123 -63 178 -137t55 -170z" />
-<glyph unicode="t" horiz-adv-x="840" d="M514 223q65 0 162 35v-225q-111 -53 -266 -53q-150 0 -220.5 63t-70.5 195q0 50 12 112l115 539h-152l29 147l196 84l132 236h194l-49 -238h283l-50 -229h-282l-115 -539q-6 -30 -6 -53q0 -74 88 -74z" />
-<glyph unicode="u" horiz-adv-x="1237" d="M262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213z" />
-<glyph unicode="v" horiz-adv-x="1049" d="M455 301q55 153 92 223l297 594h323l-604 -1118h-323l-138 1118h295l45 -586q7 -133 7 -231h6z" />
-<glyph unicode="w" horiz-adv-x="1614" d="M856 860q-62 -178 -123 -319l-233 -541h-324l-51 1118h281l4 -495l-4 -167l-7 -171h4q6 20 14 41.5t51 136.5t46 119l231 536h328v-536q0 -142 -10 -297h6l28 80q73 208 95 258l219 495h307l-530 -1118h-330l-6 520q0 155 10 340h-6z" />
-<glyph unicode="x" horiz-adv-x="1087" d="M379 573l-225 545h321l115 -334l244 334h354l-467 -561l244 -557h-326l-125 342l-264 -342h-350z" />
-<glyph unicode="y" horiz-adv-x="1063" d="M102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49z" />
-<glyph unicode="z" horiz-adv-x="932" d="M748 0h-795l35 180l575 705h-397l51 233h750l-43 -200l-566 -685h439z" />
-<glyph unicode="{" horiz-adv-x="727" d="M201 319q0 140 -209 140l45 229q122 0 192.5 41.5t92.5 138.5l61 285q38 170 131 239.5t270 69.5h84l-49 -225q-90 -2 -130.5 -34.5t-55.5 -106.5l-66 -297q-45 -207 -276 -236v-8q85 -26 126.5 -82.5t41.5 -134.5q0 -44 -15 -113l-36 -178q-7 -28 -7 -51q0 -54 33.5 -74 t91.5 -20v-226h-53q-167 0 -253.5 63.5t-86.5 184.5q0 57 14 125l39 184q15 69 15 86z" />
-<glyph unicode="|" d="M455 1550h219v-2015h-219v2015z" />
-<glyph unicode="}" horiz-adv-x="727" d="M256 1462q340 0 340 -248q0 -56 -14 -124l-39 -185q-15 -69 -15 -86q0 -139 209 -139l-45 -229q-122 0 -192.5 -42t-91.5 -139l-62 -284q-37 -170 -130.5 -240t-270.5 -70h-45v226q93 3 137 35.5t59 105.5l66 297q25 111 95 166t181 69v9q-168 51 -168 217q0 43 15 112 l37 179q6 30 6 51q0 54 -36.5 74t-109.5 20l41 225h33z" />
-<glyph unicode="~" d="M342 672q-54 0 -116.5 -33t-116.5 -88v231q101 109 256 109q64 0 117 -14t139 -50q64 -27 111 -41t95 -14q51 0 112 30.5t122 90.5v-231q-103 -109 -256 -109q-59 0 -109 11.5t-147 51.5q-89 38 -127 47t-80 9z" />
-<glyph unicode="&#xa1;" horiz-adv-x="586" d="M182 606h242l-158 -977h-340zM549 977q0 -92 -55.5 -145.5t-149.5 -53.5q-68 0 -108.5 38t-40.5 108q0 85 54 139.5t144 54.5q73 0 114.5 -37t41.5 -104z" />
-<glyph unicode="&#xa2;" d="M575 -20h-188l49 210q-134 36 -203 136t-69 258q0 193 62.5 355t178 262.5t267.5 123.5l33 158h188l-35 -158q118 -14 225 -65l-92 -230q-53 23 -105 40t-118 17q-133 0 -216 -143t-83 -336q0 -96 45 -144t127 -48q75 0 140 23.5t134 58.5v-246q-136 -71 -299 -80z" />
-<glyph unicode="&#xa3;" d="M872 1485q195 0 369 -86l-113 -232q-141 68 -237 68q-75 0 -123 -39.5t-68 -132.5l-47 -229h299l-45 -220h-299l-18 -84q-42 -195 -209 -270h655l-55 -260h-993l49 246q196 48 244 264l22 104h-192l45 220h192l49 247q41 197 162 300.5t313 103.5z" />
-<glyph unicode="&#xa4;" d="M190 723q0 102 54 197l-129 127l147 147l127 -127q91 53 197 53q105 0 196 -55l127 129l150 -143l-129 -129q53 -89 53 -199q0 -107 -53 -199l125 -125l-146 -145l-127 125q-95 -51 -196 -51q-115 0 -199 51l-125 -123l-145 145l127 125q-54 93 -54 197zM397 723 q0 -77 54.5 -132.5t134.5 -55.5q81 0 136.5 55t55.5 133q0 80 -56.5 135t-135.5 55q-78 0 -133.5 -56t-55.5 -134z" />
-<glyph unicode="&#xa5;" d="M608 872l371 590h311l-506 -747h203l-39 -178h-252l-28 -138h252l-37 -178h-252l-47 -221h-291l47 221h-252l37 178h252l29 138h-252l39 178h196l-192 747h297z" />
-<glyph unicode="&#xa6;" d="M455 1550h219v-815h-219v815zM455 350h219v-815h-219v815z" />
-<glyph unicode="&#xa7;" horiz-adv-x="995" d="M150 760q0 89 47.5 163t154.5 142q-42 34 -70 84.5t-28 107.5q0 149 117 234.5t313 85.5q172 0 344 -88l-82 -193q-147 84 -282 84q-144 0 -144 -106q0 -43 40.5 -76t127.5 -72q242 -106 242 -303q0 -188 -193 -303q38 -35 64 -85.5t26 -108.5q0 -161 -126 -253.5 t-345 -92.5q-204 0 -336 75v224q172 -105 345 -105q99 0 144.5 35t45.5 92q0 39 -33 72.5t-127 79.5q-117 57 -181 131t-64 176zM506 967q-51 -25 -82 -70.5t-31 -99.5t43.5 -96.5t143.5 -88.5q49 31 75.5 78.5t26.5 95.5q0 109 -176 181z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1135" d="M397 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM799 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M932 1010q-111 0 -163 -73t-52 -214q0 -134 55.5 -203t159.5 -69q43 0 108.5 15.5t124.5 43.5v-191q-131 -57 -262 -57q-196 0 -307 122.5t-111 336.5q0 225 117.5 351t325.5 126q142 0 284 -72l-75 -174q-114 58 -205 58zM125 731q0 200 100 375t275 276t377 101 q199 0 373.5 -99t276 -275.5t101.5 -377.5q0 -199 -98.5 -373t-272.5 -276t-380 -102q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM266 731q0 -164 81.5 -305t224 -223t305.5 -82q167 0 308 83t221.5 223.5t80.5 303.5t-80.5 303.5t-222 223.5t-307.5 83 q-164 0 -306.5 -82.5t-223.5 -223.5t-81 -304z" />
-<glyph unicode="&#xaa;" horiz-adv-x="772" d="M369 752q-103 0 -160 70t-57 198q0 117 46 228t123 171t177 60q120 0 180 -103h6l39 90h154l-158 -702h-154l8 92h-2q-80 -104 -202 -104zM442 903q45 0 84 41.5t65.5 120t26.5 154.5q0 106 -88 106q-73 0 -123.5 -96t-50.5 -215q0 -111 86 -111z" />
-<glyph unicode="&#xab;" horiz-adv-x="1151" d="M72 569l401 463l191 -155l-279 -334l135 -350l-246 -103l-202 461v18zM559 569l402 463l190 -155l-279 -334l136 -350l-246 -103l-203 461v18z" />
-<glyph unicode="&#xac;" d="M1061 248h-219v364h-733v219h952v-583z" />
-<glyph unicode="&#xad;" horiz-adv-x="659" d="M41 424zM41 424l53 250h524l-53 -250h-524z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M1237 899q0 -86 -44 -149.5t-130 -96.5l197 -360h-254l-138 297h-67v-297h-230v874h308q173 0 265.5 -67.5t92.5 -200.5zM801 758h51q72 0 113 31t41 92q0 59 -35.5 88.5t-116.5 29.5h-53v-241zM125 731q0 200 100 375t275 276t377 101q199 0 373.5 -99t276 -275.5 t101.5 -377.5q0 -199 -98.5 -373t-272.5 -276t-380 -102q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM266 731q0 -164 81.5 -305t224 -223t305.5 -82q167 0 308 83t221.5 223.5t80.5 303.5t-80.5 303.5t-222 223.5t-307.5 83q-164 0 -306.5 -82.5t-223.5 -223.5t-81 -304z " />
-<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M1030 1556h-1036l45 201h1036z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M164 1137q0 93 46.5 173.5t127.5 126.5t172 46q93 0 173.5 -47t126.5 -127t46 -172q0 -93 -46 -173t-126 -125.5t-174 -45.5q-93 0 -173 45t-126.5 125t-46.5 174zM354 1137q0 -63 45.5 -108.5t110.5 -45.5q66 0 111 46t45 108q0 63 -45.5 110t-110.5 47t-110.5 -47.5 t-45.5 -109.5z" />
-<glyph unicode="&#xb1;" d="M475 674h-366v219h366v369h219v-369h367v-219h-367v-365h-219v365zM109 0v219h952v-219h-952z" />
-<glyph unicode="&#xb2;" horiz-adv-x="776" d="M707 586h-648l35 166l273 219q111 91 141 122t44.5 59t14.5 56q0 42 -25.5 62t-60.5 20q-86 0 -188 -82l-100 158q74 57 156 87t192 30q123 0 196.5 -63t73.5 -160q0 -70 -22 -123t-70 -103.5t-189 -152.5l-129 -95h347z" />
-<glyph unicode="&#xb3;" horiz-adv-x="776" d="M813 1270q0 -87 -51 -145.5t-166 -88.5v-4q154 -33 154 -176q0 -131 -107 -209t-285 -78q-75 0 -145.5 15.5t-120.5 40.5v192q125 -72 254 -72q76 0 125 30.5t49 88.5q0 37 -26 62.5t-88 25.5h-127l34 160h90q84 0 132.5 28t48.5 85q0 40 -26 60t-71 20q-86 0 -188 -66 l-82 150q142 92 313 92q130 0 206.5 -55.5t76.5 -155.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1135" d="M483 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1249" d="M424 348q0 -60 31.5 -92.5t79.5 -32.5q90 0 162.5 106.5t117.5 319.5l98 469h301l-237 -1118h-229l18 176h-6q-117 -196 -266 -196q-51 0 -89.5 19.5t-58.5 47.5h-6q-8 -66 -21.5 -139t-82.5 -400h-304l342 1610h301l-135 -645q-16 -70 -16 -125z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1202 -260h-162v1616h-166v-1616h-161v819q-62 -18 -146 -18q-216 0 -318 125t-102 376q0 256 107.5 385t343.5 129h604v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="584" d="M131 553zM131 695q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" />
-<glyph unicode="&#xb8;" horiz-adv-x="420" d="M262 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" />
-<glyph unicode="&#xb9;" horiz-adv-x="776" d="M528 1462h207l-186 -876h-246l84 397q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165z" />
-<glyph unicode="&#xba;" horiz-adv-x="754" d="M809 1194q0 -128 -48.5 -232.5t-132.5 -157t-196 -52.5q-134 0 -202 75t-68 211q0 197 104 319t277 122q129 0 197.5 -73.5t68.5 -211.5zM522 1315q-64 0 -107.5 -89.5t-43.5 -199.5q0 -111 80 -111q63 0 105 85.5t42 207.5q0 107 -76 107z" />
-<glyph unicode="&#xbb;" horiz-adv-x="1151" d="M1079 535l-401 -463l-191 155l279 334l-135 350l246 103l202 -461v-18zM592 535l-402 -463l-190 155l279 334l-136 350l246 103l203 -461v-18z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1804" d="M97 0zM1500 1462l-1084 -1462h-239l1087 1462h236zM496 1462h207l-186 -876h-246l84 397q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165zM1573 152h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM1252 320l58 231l22 74q-13 -20 -43 -58 t-211 -247h174z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1804" d="M97 0zM1588 1h-648l35 166l273 219q111 91 141 122t44.5 59t14.5 56q0 42 -25.5 62t-60.5 20q-86 0 -188 -82l-100 158q74 57 156 87t192 30q123 0 196.5 -63t73.5 -160q0 -70 -22 -123t-70 -103.5t-189 -152.5l-129 -95h347zM496 1462h207l-186 -876h-246l84 397 q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165zM1500 1462l-1084 -1462h-239l1087 1462h236z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1804" d="M133 0zM1633 1462l-1084 -1462h-239l1087 1462h236zM1634 152h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM1313 320l58 231l22 74q-13 -20 -43 -58t-211 -247h174zM854 1270q0 -87 -51 -145.5t-166 -88.5v-4q154 -33 154 -176q0 -131 -107 -209 t-285 -78q-75 0 -145.5 15.5t-120.5 40.5v192q125 -72 254 -72q76 0 125 30.5t49 88.5q0 37 -26 62.5t-88 25.5h-127l34 160h90q84 0 132.5 28t48.5 85q0 40 -26 60t-71 20q-86 0 -188 -66l-82 150q142 92 313 92q130 0 206.5 -55.5t76.5 -155.5z" />
-<glyph unicode="&#xbf;" horiz-adv-x="940" d="M678 606l-14 -78q-19 -105 -76.5 -180t-169.5 -151q-122 -83 -156.5 -126t-34.5 -98q0 -118 133 -118q50 0 106.5 16t201.5 84l92 -221q-221 -125 -445 -125q-177 0 -280 87.5t-103 244.5q0 82 28.5 148.5t83.5 124t189 146.5q93 62 128 106.5t51 106.5l8 33h258z M772 977q0 -92 -55.5 -145.5t-149.5 -53.5q-68 0 -108.5 38t-40.5 108q0 86 54.5 140t143.5 54q73 0 114.5 -37t41.5 -104z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM965 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM735 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM1235 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z " />
-<glyph unicode="&#xc3;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM999 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5 t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM516 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM918 1720q0 78 42 118t120 40 q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM1087 1567q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170z M930 1565q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1833" d="M1593 0h-817l74 348h-426l-219 -348h-328l922 1462h1104l-54 -254h-512l-67 -321h477l-55 -254h-478l-79 -377h512zM905 608l127 600h-80l-364 -600h317z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1253" d="M123 0zM905 1227q-132 0 -237.5 -81t-169.5 -238.5t-64 -338.5q0 -167 68.5 -248t218.5 -81q146 0 338 77v-260q-199 -77 -400 -77q-254 0 -395 149.5t-141 423.5q0 262 104 482.5t278 335t400 114.5q125 0 222 -22.5t208 -82.5l-118 -250q-106 59 -175 78t-137 19z M825 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM906 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM608 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xca;" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM1177 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM438 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM840 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5 t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xcc;" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM667 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xcd;" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM414 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xce;" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM937 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xcf;" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM222 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM624 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1386" d="M1323 909q0 -280 -98 -486.5t-283.5 -314.5t-437.5 -108h-451l125 596h-141l55 254h139l131 612h396q270 0 417.5 -143t147.5 -410zM518 256q148 0 258 76t172 223.5t62 337.5q0 154 -72.5 234.5t-208.5 80.5h-115l-75 -358h237l-55 -254h-238l-71 -340h106z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1546" d="M53 0zM1247 0h-342l-356 1106h-6l-4 -32q-32 -216 -66 -386l-145 -688h-275l309 1462h357l340 -1077h4q12 76 39 217t180 860h274zM1114 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36 t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1053 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM753 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1308 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1071 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM585 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM987 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xd7;" d="M428 723l-299 301l152 154l301 -299l305 299l153 -150l-305 -305l301 -303l-149 -152l-305 301l-301 -299l-150 152z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1495" d="M1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-180 0 -304 71l-108 -137l-154 115l121 151q-98 138 -98 357q0 265 99 487.5t273 341.5t402 119q182 0 305 -76l105 131l151 -117l-117 -145q91 -134 91 -340zM870 1233q-126 0 -229 -91.5t-160 -252.5t-57 -352 q0 -32 8 -101l596 754q-69 43 -158 43zM1133 930l-5 80l-589 -740q59 -37 153 -37q124 0 226 89t158.5 247.5t56.5 360.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM1002 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311 q36 -148 115 -303v-25z" />
-<glyph unicode="&#xda;" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM757 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5 t-194 -158.5h-209v25z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM1284 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217 v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM565 1720q0 78 42.5 118t119.5 40q133 0 133 -108 q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM967 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1155" d="M186 0zM627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312zM606 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xde;" horiz-adv-x="1188" d="M1143 807q0 -243 -170.5 -378.5t-466.5 -135.5h-86l-62 -293h-305l309 1462h306l-50 -229h35q242 0 366 -106.5t124 -319.5zM475 547h55q139 0 222.5 66.5t83.5 185.5q0 180 -195 180h-74z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1350" d="M846 1567q208 0 331 -90t123 -240q0 -114 -49 -192t-178 -152q-73 -42 -96 -68.5t-23 -54.5q0 -23 22 -49.5t79 -69.5q107 -83 144.5 -150.5t37.5 -150.5q0 -170 -123.5 -270t-337.5 -100q-187 0 -297 61v240q128 -78 258 -78q101 0 148 33t47 86q0 40 -26.5 75 t-108.5 97q-94 72 -129 130t-35 126q0 84 45 145t162 127q66 37 104.5 76t38.5 96q0 62 -39.5 98.5t-124.5 36.5q-96 0 -156 -51.5t-85 -171.5l-254 -1219q-43 -198 -147 -288.5t-277 -90.5q-90 0 -160 25v242q61 -21 115 -21q133 0 170 178l254 1207q47 224 182 326 t385 102z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM869 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM598 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM1120 1240h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM884 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM397 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM799 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM1023 1479q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170zM866 1477q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z " />
-<glyph unicode="&#xe6;" horiz-adv-x="1786" d="M1206 -20q-109 0 -179.5 27t-117.5 87l-16 -94h-188l14 145h-6q-71 -88 -146.5 -126.5t-167.5 -38.5q-146 0 -227.5 109t-81.5 296q0 200 68.5 375.5t185 277t258.5 101.5q96 0 160.5 -38.5t114.5 -125.5h6l57 143h188l-18 -90q44 49 120.5 80t168.5 31 q157 0 246.5 -83.5t89.5 -221.5q0 -187 -167 -288.5t-476 -101.5h-52l-2 -19v-19q0 -96 55.5 -147.5t159.5 -51.5q66 0 152 23t162 63v-227q-179 -86 -361 -86zM518 223q72 0 134 68t99 184.5t37 243.5q0 80 -33 128t-102 48q-68 0 -128 -69t-95 -185.5t-35 -241.5 q0 -84 32.5 -130t90.5 -46zM1341 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95z" />
-<glyph unicode="&#xe7;" horiz-adv-x="989" d="M90 0zM506 -20q-201 0 -308.5 107.5t-107.5 303.5q0 212 74.5 385.5t209.5 268t308 94.5q182 0 328 -72l-92 -229q-54 23 -106 40t-118 17q-85 0 -153.5 -64t-107 -175.5t-38.5 -239.5q0 -96 45.5 -144.5t126.5 -48.5q76 0 141 23.5t134 58.5v-246q-152 -79 -336 -79z M653 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM849 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM528 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xea;" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM1101 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM365 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM767 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xec;" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM579 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xed;" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM291 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xee;" horiz-adv-x="608" d="M36 0zM338 0h-301l237 1118h301zM845 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xef;" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM126 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM528 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1182" d="M618 1309q-34 34 -124 80l118 186q134 -61 232 -139l237 131l76 -152l-192 -106q81 -107 113 -235t32 -279q0 -249 -69.5 -432.5t-203.5 -283t-323 -99.5q-216 0 -329 110t-113 316q0 165 64.5 301t180.5 212t265 76q83 0 151.5 -31t114.5 -94h6q-20 213 -117 310 l-231 -131l-88 147zM528 205q66 0 122.5 55.5t89 148.5t32.5 193q0 77 -38.5 122.5t-108.5 45.5q-73 0 -130 -53t-88.5 -143t-31.5 -197q0 -81 39 -126.5t114 -45.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1237" d="M37 0zM977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180zM909 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28 t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM845 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM571 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM1109 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM865 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM386 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM788 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xf7;" d="M109 612v219h952v-219h-952zM444 373q0 76 37 113.5t103 37.5t102.5 -39t36.5 -112q0 -70 -37 -111t-102 -41t-102.5 39t-37.5 113zM444 1071q0 75 37 113.5t103 38.5q67 0 103 -40.5t36 -111.5q0 -70 -37 -110.5t-102 -40.5t-102.5 39t-37.5 112z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1198" d="M1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-123 0 -225 53l-109 -135l-141 108l119 148q-72 107 -72 256q0 213 71.5 379.5t206.5 258t316 91.5q131 0 227 -56l70 88l145 -110l-84 -105q66 -107 66 -260zM662 903q-81 0 -144.5 -62.5t-98 -169.5t-34.5 -233 v-12l365 453q-35 24 -88 24zM543 215q114 0 193 133t79 318v16l-358 -444q11 -8 35.5 -15.5t50.5 -7.5z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM845 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311 q36 -148 115 -303v-25z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM610 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209 v25z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM1143 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25 q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM411 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5 t-121 -43.5q-135 0 -135 110zM813 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1063" d="M0 0zM102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49zM497 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1219" d="M813 1139q150 0 232.5 -106.5t82.5 -301.5q0 -199 -69 -381t-182 -276t-250 -94q-178 0 -271 163h-8q-12 -159 -43 -295l-72 -340h-301l435 2048h301l-66 -307q-29 -131 -80 -280h8q131 170 283 170zM682 895q-71 0 -130 -65t-95.5 -184.5t-36.5 -246.5q0 -80 33.5 -128 t105.5 -48q69 0 129 65t97.5 183.5t37.5 247.5q0 88 -37.5 132t-103.5 44z" />
-<glyph unicode="&#xff;" horiz-adv-x="1063" d="M0 0zM102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49zM310 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5 q-135 0 -135 110zM712 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" />
-<glyph unicode="&#x131;" horiz-adv-x="608" d="M338 0h-301l237 1118h301z" />
-<glyph unicode="&#x152;" horiz-adv-x="1845" d="M1606 0h-760q-93 -20 -180 -20q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q140 0 209 -23h809l-53 -254h-512l-68 -321h477l-55 -254h-477l-80 -377h512zM688 240q88 0 158 32l194 916q-62 39 -168 39q-121 0 -222 -91.5t-158.5 -251.5 t-57.5 -347q0 -147 66.5 -222t187.5 -75z" />
-<glyph unicode="&#x153;" horiz-adv-x="1806" d="M1198 -20q-116 0 -208 38.5t-138 106.5q-63 -68 -147 -106.5t-207 -38.5q-187 0 -297.5 117t-110.5 317q0 216 69 380.5t200 254.5t309 90q209 0 313 -160q154 160 399 160q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-476 -101.5h-51l-2 -21v-20q0 -91 51 -143.5 t147 -52.5q87 0 158 19t172 67v-227q-93 -46 -185.5 -66t-203.5 -20zM645 893q-71 0 -127 -60.5t-90.5 -176.5t-34.5 -242q0 -91 36.5 -140t109.5 -49q109 0 179 134.5t70 336.5q0 96 -37 146.5t-106 50.5zM1362 922q-88 0 -165.5 -78.5t-102.5 -196.5h45q155 0 241 48.5 t86 131.5q0 95 -104 95z" />
-<glyph unicode="&#x178;" horiz-adv-x="1155" d="M186 0zM627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312zM432 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM834 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5 q-135 0 -135 110z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1135" d="M1120 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M1034 1479q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170zM877 1477q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1135" d="M866 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" />
-<glyph unicode="&#x2011;" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" />
-<glyph unicode="&#x2012;" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" />
-<glyph unicode="&#x2013;" horiz-adv-x="983" d="M41 436l49 230h852l-49 -230h-852z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1966" d="M41 436l49 230h1835l-49 -230h-1835z" />
-<glyph unicode="&#x2018;" horiz-adv-x="440" d="M123 961l-8 22q103 227 262 479h225q-91 -213 -194 -501h-285z" />
-<glyph unicode="&#x2019;" horiz-adv-x="440" d="M586 1462l8 -22q-103 -227 -262 -479h-226q89 206 195 501h285z" />
-<glyph unicode="&#x201a;" horiz-adv-x="569" d="M377 238l8 -23q-103 -227 -262 -479h-225q88 207 194 502h285z" />
-<glyph unicode="&#x201c;" horiz-adv-x="887" d="M569 961l-8 22q103 227 262 479h226q-97 -227 -195 -501h-285zM123 961l-8 22q103 227 262 479h225q-91 -213 -194 -501h-285z" />
-<glyph unicode="&#x201d;" horiz-adv-x="887" d="M586 1462l8 -22q-103 -227 -262 -479h-226q89 206 195 501h285zM1032 1462l8 -22q-103 -227 -262 -479h-225q23 53 46.5 111t148.5 390h284z" />
-<glyph unicode="&#x201e;" horiz-adv-x="1018" d="M377 238l8 -23q-103 -227 -262 -479h-225q88 207 194 502h285zM825 238l9 -23q-100 -221 -263 -479h-225q24 57 49 118.5t146 383.5h284z" />
-<glyph unicode="&#x2022;" horiz-adv-x="739" d="M104 686q0 106 42.5 194t120 136.5t182.5 48.5q120 0 182.5 -67t62.5 -191q0 -177 -91.5 -277t-248.5 -100q-117 0 -183.5 67t-66.5 189z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1706" d="M25 0zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5zM586 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5zM1147 115q0 90 53.5 144t150.5 54 q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="664" d="M72 569l401 463l191 -155l-279 -334l135 -350l-246 -103l-202 461v18z" />
-<glyph unicode="&#x203a;" horiz-adv-x="664" d="M592 535l-402 -463l-190 155l279 334l-136 350l246 103l203 -461v-18z" />
-<glyph unicode="&#x2044;" horiz-adv-x="256" d="M791 1462l-1084 -1462h-239l1087 1462h236z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="776" d="M776 737h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM455 905l58 231l22 74q-13 -20 -43 -58t-211 -247h174z" />
-<glyph unicode="&#x20ac;" d="M899 1237q-97 0 -176 -74.5t-135 -212.5h348l-39 -176h-360q-11 -34 -25 -115h299l-37 -178h-280q0 -120 44.5 -181.5t147.5 -61.5q133 0 283 63v-258q-126 -63 -330 -63q-446 0 -446 501h-152l37 178h127q9 67 22 115h-125l39 176h135q87 252 250.5 393.5t374.5 141.5 q100 0 179 -23t165 -80l-125 -223q-87 49 -131 63.5t-90 14.5z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1534" d="M471 741h-168v572h-197v149h564v-149h-199v-572zM1047 741l-166 529h-7l5 -111v-418h-164v721h248l159 -510l170 510h240v-721h-168v408l4 121h-6l-174 -529h-141z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" />
-<glyph horiz-adv-x="1217" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-BoldItalic-webfont.woff b/doc/fonts/OpenSans-BoldItalic-webfont.woff
deleted file mode 100644
index ed760c0628b6a0026041f5b8bba466a0471fd2e0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23048
zcmZsC18^o?(C!;28{4*R+s4MWZQHh;Y;4=c#x^##ar4z*x9Z-izo(w+)6aCD(=$_Z
zX6j6jo4lA900{6SnvekG|8#os|JeVv|9=q^Q;`J#fXaVZod00t3i={0A}aR74gJ`7
zKOg|Y0f34t$SePFhX4R*5dZ*{OY4X(B(AI~1OR}C|M&#_pgi9&JXc<so(TYefcdd?
zf1qC|n^a_EV_^ToS^vam0|3Clt#;NuMy}2TKm9=d_%Qr{hguzc*VNw3=7;0>8RP9o
zCqzMe3Yr->{lvnt{P_Im`yUX@tUXMBI355%Xb=E!j7Ku=7Be?7Fa`h=e|7`@^JN2q
zNM$nrA%D34Y{DOqz)gX6ncFzK|8VL*d58l5AYC78bV=5BMn8Va`9JwB|6sTJe)7h~
z!2M@j)gNB~!G8cD1g^0)urc}J(tmu`e{wXneoxZ2w{vm^0Dk`f==G;RK#AwolD(tJ
zPprld0P+9fUWDkv&BX90XU!iI0RA7$qZDg@G|+#<6mQ||e|p?V^1t&9m|nvC<-TsD
zZ>+Ds3t|Wbj-YR-4?5r`Fa><f_;cLBKtD(0zFwUwE0ZjaG5Xy}bA@J;&|<L=XKqAM
zz|um=2-I>K0Vs)C0=rl@wBnb6$3m7g`Wx>q@OwcRc|qNB1RiTqRPjk40m`>okPgoi
z7dS*Y4q2`g!l>hOy06fc+9v6Eoc^Bant68A?-*ANQPSjW&McCZwRfceo&USTE3TsF
zV!K(Z*^BSfvX+f9H15vBW5@3vXRW)^s}|{t5<!_I8cGyttKX^Y>QwH~yqMk*{YrFU
zo<>IWq;M^9Y2JAp2qWSXsT02we>!!h_J!7w<x9JZD>sndeI5Sm`s_viR)r`-V&s`T
zaj5gTFFZ8_Oq$<%2v&_t&yiq=QvI<gbrnid-nqg#SL!;n;vLxT4^ywai>EAXe6SdA
zWvRE^^lP+cKI-}%@;a~<;qcC7G;VZG^acTJ_Yfy!7y(Gw9^?bE9bkufhzI(F06NGX
zkM716l5T($BNVX>xX2!LL?5Rn;e>0`Kg&L=U2<Q%N!Q3zSJk5kt2_i&LHz5jOBKXd
z(mdEMogaKh82<w>+TRD|Ek8iX0sHwP&%i&9L8uvvQ!+#oM76!r_a=e)O7m(xw&MRA
z3C&UC|JhItHxRrsT^etqCp0vGQV7>U=W*t<w~w#IMq=hB?*%zPF*#twg+#<z$}pE_
z`zuPYpdV>}$JGv>uMT!NT2}bGWJBnUA27}AGDFZ8NTF9aqncC&d0JZP%Y@>QrB?5Q
z_K@$PWQY2GpsQpGl+dZ1{Y|3!K5$bNAoV&((NGvxC@K&WjtRwrWyPA_Wrvt9s9X}<
z5i)y^JU8iyz?tr{3Q#i-q7_;HMVY&S$&JB{*@{R#-ImjgKOjB_#yxi5MsL{u1>x=&
z`eC+*V{CvhGYGZ~+b`M%I>-S0TOXxn03&*k)v^PQeV1%gb8~N_t8tMHEM!Y7f(cEP
zCej@jSCzZMRpqjLU9p*870u2S!7iv(W04^&6b=>_i;Kni)NFpXFi(^}$`|ev=Z*8B
z@$_WwhY;ou^X0ROt>SDr9?K;DuhHaael#~xkRnVSrUqAyqp8u<U~V!$QJ5l19i@g=
zP4mAK|2ISqF6ZMPo3nM(E&Yyg>FFZN-VzM$+%KCc-ZuK_eIE<7>q+f4dbi+fD&ZB(
zj+r@^&>CjvoYyd9!_)P-<^n6>mCzbk9qbM^XPf_pK-nsRE*qrDiBuJR@7UCJpEleC
zj@9bBE#c}>$xSnj?1e|4G44-lHrE1QV1V{54a>kY^-TXazYv#A<(J46i1%&N`Z-fW
z=o-2Dr<b=9Ui^!HCT*5OwnoF<kkV<dR1e)#E<|g?>m_T0+G2kC+-QFEZqkUBT6(ZH
zJ7sg>s6ruvN~2TA?o`&bQVsh7<#~l{o5f+HJ72B4DD9E1MJ%hndA-oJyHKu5317d~
zva_x6kx{Kk*Qavj5m&9uh^xjE^K<MU{u}{f7)uqK&Ip^8NRemWcbm~7cWm={s_*d%
zdRcgRlDei^FOm=3`=NYnsCLWG9Q8kQm|?i#n7+P)!#$Kiyi^U%gn@!2z0|bn+@vJU
zxKW+HK2U|h%QwD+z7Z4y!|U5S1p_4L>pQSy9mSZ+NcPl&2sj)9bhJjFCq@8KG>oTy
zCYX66LJ&$2@SqmBDY!hiUnsl&de|N-2y*=MFNrsRDif1CFrW|-3-xC%{VxYo2gCKj
zzKOm8uBfH-fB;22A!a>e2_r*&ef|AoeIrv714BcPzP^X;06{`5igKVKn9$h%8JI|z
zu3nARzh5Pc4E7I9tP~6kGZ5qTL-n>GO21&H0R9VbSpU<%zP_oyJ|?&rIKm6aA!Fbx
z4Gg@06I2jzJSnj8Ez=_7hZ&18jA@lV*NAh}zgXb3!0^E2!0f=pz|6p&z?8r!p)R3_
z0W8rH2$)`tuWyK~QRu~9KshyJO_ZRZfS`~dc*P`=C_1qM`oVYYH~u&OgWvx5z<19#
z##hhh`*Hs`gg73KxBYJaHbf_$wP)R3e;|Ynd?cRw4u9!Q;v?ze5ebMG8+e<V7#Tr-
za18*1g{I2-0w-I0lc&r312|A<fT+-LA1P7kFH?i#-LFWg391UqGptO_b*>K2H}Fug
z5wcR#W3*JYWwsXAC%9O-8M+$VE4*CYZN47gFQ5Rye!>ESJ;VgXdB%E&Tc`*ao6DT7
zB(o{4F7xq*lF8pSy3MASZ!Xwuw%Z*h8?l#OuGd?m3dxC?9=(PJf=^KmG@-E?FvBn~
z|Bm!mjusiJR+rMVAq-EJ`6MhYb9`UM9<kl7w!4~>_IBsVXYqM`A2SQ?o_Ir3bC0)c
zzMzobOXZBxnar*(gh%C2m>6(sfh|D+hfpbd|6O|lu;@1!J;8JrY!HwvNNF69L4L&8
z?Oxa_v+rJ@yQuHpfE!G0bub{NWOyC-^&C|Tw*@hjlrECkq&ZS(Fc(Z_hy3}mU|I|Y
z3#wsPLLD5)YEYeG8s{T!{CADsW6GwJ2V(x}=h(F1)Z7I&a`Ee#tjbpHZp<hnkrH_j
zhZruEJ4b?)rBS7Sd=c0kdq?$&{RFmSYWtKH$jwP2<JRol$<o?0t|?W>RY|vw2$f}2
zv&^KAg4qK_ZNJIa3DzaLStOC<arh;hID%d%B!MY0LpV}QLy;=x2~sQIOr*keixR@K
zz?Imr9?J&{JMgKlaArG7n!)vp9aD(4>ve68I~}-g8XzRAkS}a_qwDwT-xMnZsKiQ%
zzgH<a6|umThLyrJBZ>xPe7D4z{#1c6nV?Wpxxf!yUX^XMg#Rm8xOGviWKmw4b`hJm
zj*At?74aBjlOsPWooNZ9Uy)I)b{(E>0m)#rrzB;b_dx=3PM653giv3q|5a?eh>vQP
z7Y9O;xJIGs@#|92j-b)hjGnG^>(W^CIPT$I;CO1rw(H*h^a1OJUj4g^GQ0g$QG04y
zR03aWOMWP#co8NFlkdzuyb}g-Vp>qUO#wWQXsUqv?@Sddi!Qd2UEAz$DcN($IWhd<
zXXR5jB8@!`Xsl}SeQUhV8ml9|AkB)c?$rcN+zJ#2zq~xR91U`q`=<2Tx4Wrly8Ksm
z0iFYhyHZN+^;Q|hLZ1y3lXWm<6?60gs>?*mQu8!fMp>_A6xMY&8Af5R8HwrdwDwuz
zXU?tzLiWqfG1+%K$AzA_%_e*T_G%&9b#TW8T>)Fon9U|?F_#NS7TCWtWmJLr7RHZ*
zZPit*z#6Q7A4(#|JHrXjE0J+smY1pgP`;NU=yAqMB66=9w6&4lEVf#1_Wrr*ZD}%}
zg;tNS$0mo}GW<Q53!b^NgZpk_cj;7jN>fM?gfG`u0)SIkK_I0sugMWquUza;;`=*b
z?sHDcE-CrsGP3y4&%SrWB_UsX@oaHS(yr)eiln*(ZKm^nXhq7nd=_<;q?{dwyBry7
zHHR`54@4E7Q%icpwzwXkld7t1NBy;Y^+vigUa=Q8pIqjJaSf)F^#~7JQK6KAZ%!_{
zKnQC^F~PH+2!hrO9cqJffw#08`d8qIfelR<TF}&uP$xmDgSyi+;dYBxX|;apz8`tx
zOw1V(F7J@?N#R~mS>)>sVWZn<`^P{k<?J8df%3(9i;s#L)}MomVcMmB*69v0x#0)o
z*G%;-Y&gwl0eDn=**OW-X~qu535*yM+1D(8x{(PxjA~8m-mv#SNllTeZiq=fPWyP-
zuC00|y{S%<V;$e?`K>Y9w@xI-t)c;bCju9#Re_#nObA9moX}W<s{@B{gDx=i=Qn;b
za^JnM&{2mPm*&~i%J?-2(Nyh|siQi!4U?gG&72jke^<rLtu5RQV{!3fLsBtt;;a2`
z{Gz@3bhP6E94wBQWQA-x<z=329ix`k*fS|2{yI(<9Ju~?{?c>oqcxA-!1}z;W9`uP
zc{qW%j*xt$VY|$Zwm{x;aQ*0q2ry%WtE4AzeISmIc!|Pw;&A=Mj%+|ZBw@SMj*y0q
zkVuZUAUtGYyHK2<dP%}JF$tB(8NEkBZ2mosr(_D2W#Cb4Xc-As$WMIesXqFMYhh>!
zp2ml7!EedX(x2NzN`7_Wi}*2{=?Z@P14@1^;fs1SM2{J_C9Wh#Dg92{^Zj{O2G!<2
z4@w{a(Dye0-hI8q2g+M{c==^&lU8fN+NPt`BC)ijX|B|ULK?e6fRdZG1X~@Y01c>~
zhUiBEi5iHn%1?zK2n`+jQ9)5rJ^1kM2(Q|@%1(ukUh~^O^D?}WN}*4mzh4xw61mNe
zvpL_hnFT>p2t`VvkP*X3l0Rw0KEbaOUV`zR@=!zM!LRoqyF_LkA8Z18y2X)@Hz2P2
zAAD-p3|zUVVwn<&I&ak4HPYSp{xE&{fD$NLk770`nS-<?P>kclU+>*Q8VOSp1y>5;
zpbw|CXPYA1O%KUcf}EhbI~5gK7c#TL)_y#Lv~kt>9xpaPHJ*#f^qI98q3izXbyayS
zwh~uby|(9WOT(~+;{2opRo(?2bpqh0-0}!@4M`UQ;O$N4lOs6OfqcWg&inU_Pf`a{
zgtT_e3=8>Dbisv$`1+#6$Ia7w7xRfTC6qzQ31d|3P@s@F0-*+6Jgb(lq&#FKK!G|)
z$w|rj(qGzEF}P{AEa5&Q#)lGx3zfP4#m(*o;a8^J|HYTQdCTr9z(KC`Hryt^-?8Rp
ze69i$hqY?eA00@#ho9wUye5|x@UHwIU_b7JKQxun?0O8kj@_fZV|_STb=v{r<vhGp
zA7+nWOAg+oK$d+T6*bTulW`gyU4_+z9kpVZYbU{Uaz7p03Uz3%gH2ZXO^_@6p$@7}
zI8^{n0x4ENvyBgtx1Z7NtKK?`1N)*eR4!wUOkBT^cFZWgQN6~&Uz?BNRbt+me7u(k
zNf+q0n}R65cF}dU&pE5(6Iadu(0?O-oyPC9{cp9t>ZoOHc+!qCfjV;Zkb_qA=-_6S
zKAQpGcT^$5h1sRecx*c>mk+PqMA~`HO}P2a;d;@;Q9w&EnRiSgRKg@^v=neAAyAEL
zHrzabSS;$g3IabN4k30G3x@MfPz@9%Ld^!uB{EPf2qEF5>KS04U5z4%q*v0<gWsPv
z9JiSRAa3xAo--0;NTxbah*SL9<Yxrnl@zh4N)$!>O<r1hRYpcOG-Q~VoStyzLgI<Y
zO@G1I%`w+94jv<>T^18D-B&>}xj)vtyT4!)G9l!j6#^TK$yv>mia47tLAiRPM2xD%
zU~ryzJ=g8NooRN`)$FoF=JdI(&hzjqC?ncPQ=GqUwR)!SFw>c=WUpQy(u?P2V>P(V
zE!E&YoL%8}xYo1Z=Y`+#01_$e{_F@+E}P-wX|`BLzWWmczj;sNYU>Snsj51FFlfBt
zn_CNcD?;mCswU3fl?sn*fZ{Ph$)#2dzXrGxsuJuA0L2QcVo)FnMilgj2y`FT%tni!
z5x4z%5Jmyly)Pa$F3$8{VX6}sZ0r;NF2EWfQID#d1yU(n41YR);}~(AQ9=BoHXh%g
z{(5_?pT*-~IMWOJzANq86WBrYvEM<R1=sz9yUftlT;g#x)c=o^*sw<1UVo>fNZGFY
zs1H4Eht{uE_sedtLE~-@{f6Uuic#1KJfS@(69V0nJZ{XkxFhNeXWx{Id<1{E3A0~j
zi$U^mD!b4$JyNj=+VFtt=u;akdVx5KUkQ;RSYJIkC7rpN48a4JEvrgS=@onI&+6^Q
zho9|0eOn}oQTNAeU*jG1o!4EOIz%0p>G-=Obl+b_b$~V5QhD2yn1KQE9?qEceiz!`
zJFhTrpl_z@cUkT3F6Nue550W?>UwnY$=<;_o#J3U%8mrYh*?b0Y&dE+Y1_);(OjAf
z<f_e&cK3Es-{ZaeM?2hMwbv3Xo_@mYBz&o4=A$j*8~4||xX<mE17`P{zyq2G?(1VW
zkXTzkDk61)B0<!93@D7Helh5S1c6}3QmlV1hT=VgFw4Xf2Cn<ccb+`&D7nP7+@hs9
z15QWHWrr~^wxevXZe1`rqD0LE!AuBvvVY_}z>6H+#Y75GDXv?h5*zy>(Jjz6??sPb
z%`S2C_ya~8noV}eC85{gypkb*!JUSPLAb&1-OWrlzTqf|@i87Akkf1XJLvb`7;2Ya
zVMi;pFQoixdJ55~T+Pq0gw>$vc)|s|ddKTwR3;OV0dkZr>p`4OHsr_1+hGb~qzG0E
z6JzmTu;N*HBTE*GM?z(*f1yOj3Yj2+XAL7@Bc98lo{kVhjD?Ty-<3lCAu>=>1W=L0
z)FymW`MIBdk~>ULyH{&7U(Jy1)ZMzt;SGFJJwtiloYQlF_<dbN<4@eXw#<BU_k1>U
zE?`ct>qnSj<PE=GVnM+GkC2ulhhQMj5rAkxdyCO{)TLdd#$CCXn%BN={8GBnvmIMb
z$z+_A-xZSzE7Fgq7L*??fbr7=9U&PJ;E<tcyOII`I(Zif$NKniP%OulgE6ZOs0b(e
ztF7oKhRU96G8J?kPaYmyKfTW@^W@wgL|@UFb~$|S3RWt_V`+2T4?C#g_?Vo&zi9K$
zF!;ps|8b}XL7=`vlm*6scHHN;L8ep65cwkpBdwwYa{dKGN|Xb`f}I1yDgL{3<jk(&
zi@Z%LOcb~c?_ypuk_#+BJv`ye=6k|kuB1!Df1W^|{B4`;=YCWcvjjoT-=>`U+bqs~
z|1p!Xb*J;8G^tYWGhNT|dk6WoO&qQIW#gk>J?~tH%WdUfmT8)roR{6l+zBOoLabeY
z>%l6Yx+1@yo`?=kfL*G{fb#iNk!OBR038c(+P_E7%55x@7XN4q{Svtu1DBV&pnERw
ze8!wY&|@pJdhZI3x-xzWo1K6h#~Fb^K+$P775>QQp;6loe>=o_?W@o3PR=m&VJFI3
zEW|qNAQqCspB;RBSq_vEh=G6p_Sz8=uy}$vk4P`K0$j)2V4`5eXP9d=VnJdeP#l85
z?<2+F=Hgpna+v{c$GgAAvVHvYsPlY`z7hy$FV>!9&a3`8WyU4yc{g;o1a3U_L(6Nc
zXIu^;{@&_#pFkPKaMbJ}$crrg(xR<$z#NmIkrF2TGK6B23&Ko7lsgPxg~_7+mA#6v
zsigG>6g;ao5LG-tFwTi&v}Cxf9T%-k+Gw)rc-SC~9i0bj!cSLpF{2xG5tVsC+3Ubz
z^Z7K9x_gOv=i^VX9q&t@vfKB=?hgM5y-ss+llM(kqQlEer#okCFZq}E#VG%kyVJAY
z;p|mv$)_899>+(h1?+TmkCA@d4&W_Pr`wqB)L04CjP3qdhCcK&`3B=obaw`5b3WQX
zVkhX8ogNEefr2l;-#I@3ms1gK;`zjMNSy>vq*|m;#lfEqylK#N^m1S<<!DAqjs+_o
zcSE#;JGz;a%x3W_b5q|ns!o-)8O4LTxzY745=ZM}e^Hz*Py4O*{reW%*4ulVJkw)E
zK8wR+IXqbLF-i}Ix=XM7abg4hr26$^gk5ucJK}xQaRV7z&(_v%vg41z2P!jpY`Q#N
zCeMD$U8Jmu5k_wjR$oE%Ws&%nI2^~19*YRJ0yp%JIm8m`ToIKzI8ajF=efme9XxX$
z;0qKrR>G3?Aw%$&3zL*kWi-?brROGT&FMbs;JioU-C7UJyB{c;t>*teO^7=z5UzcS
zp~2=c8neIhdga#m`2A}&i8{~guD{5JyUu6HL&<0MMbd>hRabEfDbmC7MQv`&wI%E9
z?}d&bUK%y3N;d0MpuItD+)RcNo3EOWsH)anm3=3cSu9;`yQ_%6j)gvCbBr||qJ}~j
ze<<e@<N!ykg(^2}4GmiQ*fdQMu{T^-w1#AM8#Bimlqvmq<(W*REdM|!*og0Jz?b~2
z^MN-`$#7R^cc2$xT`&!Q;KuTPo?j~b*beYj<BjVLP&|_O8*@M<V^oF!C?``Ul0FXu
z(cXktsM)f&I7(=q#wIih+X<(KlCJle%3SNIcGy@ySCwW50#6hTJWT<}jr1-Z?5hS_
zbqcisE;rYVy;(-Lq;SX=aK$EU9RjeSKzZy*X3$8sMs7Zwz}TgXT(F`;jWeP(m1;&Z
zXF3=aBo+a2Th3naVa&1yv@MlR0=Jva0Xuo_Xa3DP_lNKT?cHEwEd@4zXA6?h3L`UH
zY;DcBUb>R2=eQnzxh7*Pp_9EwiMQLJOh;M~#tw@s4Dt>zE(4$|$i+7b)~a1;%8I!@
z{LN7Eu)jSP_@o10^_5_BnoH)99~2f=08KKPEa1%~AhaMkv^;u=sCn1Y3{0E=j&GOK
zX0RkoDE_1sjs{0lTb-?rX8OprtX-K_4kWlC^6H)gHK&hcY{q4TC?DR#o(tg=LJx)K
zAJHPZLven5vWAbvzE-PubE#{M<WzUN=f5p#zwMX(En3fozC@3s@7KNXk9|IC4)*WQ
zke!e7;*YZ#zk}a(s5t(q0)K-`h#ec2RZu$GBFm2A+@kT=JXeLY*!69r<ZUmwSxPQa
z{ib-nhJ9bh<$V+UWM+N;d{Of3Lbe=qe<$ei@E`o?C`efy^9KB_2X4EPGvK#3BRM;G
z#-PCUC-=w9z$Fbn(>9f0#gZ*1OKh)DvsdMWQ0?-}W&@2v8daUh)ww$t8M$X4Bj<7G
z=n;NC5PM}b_zq$E8(c=yJMS`hd8Z^welnP?*WV)+$R{BN^2t}X2`mGxMRy}&u8)V?
zTo9`8fh;&}>S(AP%{yTTJd6`TENrTL%ku&gT`hwiw1M|w!+k%C`z)tL;YW}Mojv;c
z&PJ=*<aFNYbyB<f+&1@g`ZNupG}Ol0IQs#YFix$Et=9Z|Dyv>6p>`Ny<28MT_QtD-
zasNV79|0HKtUMS#%1qUbHnQ){Iu(*P{XrdvdM;koh117$)f-Zv4}LnPMS3k=%Vk5n
zwQ9ZV>v8aU?2a9Oe}q1*i_=VS((-G}^|ksWZ<SBe7C(l$9xUo*m{}u;9!3ge05Baa
zlb?a+jfW*`k5d$t=xT6=@*&baWB50q^}wF#8-0<-TItt7<OcKu0u%g%)%p=(KGjvA
z!2E)*<pDW+b!X9|jx8+3T_qpd`XT*BR;%G`<p!QbZN789mkWQ?!rxEZRc^d&TC7gc
zMzuf$XC+|+7;8}3yE=SZ&v(V_*(0>Ea+JKM@fnA@QJaR3OqyB|!51w|-9HFGAl{3p
zzK~6lbs>Ty3nstVI|YtM_me=3;lVnX=GxsF^{<f>YkKn#o2*DK@YSUW2;+h~@)_$w
z#8=Q-Cofe38R8AhB0CJ6d$S92nz+U|_qTlCGqeu<Kc@L_Z0^3hwl&)w{&s)sHrw8p
zQ<C1<Y5NLHx$d$csDSuB>HXG`x$YJA{a(|F8`_;B=ov7I&ZYbk=|c;`t0=1pFG$|K
za&BUxEP|uv7ysII<vehWWS!9omZuruG&ayjWw-)j5($vTgNYiX<RD|qaX@vKVsHn{
zB<z$LpcbWkRPY2`1UMj$9k>M)BNw`(?UDm8N~!=UEH7IKvWx9P@-ZbzKOQQVL3o?%
z7o;eYt;BX%Ism(ZY#ModCy)<8SVyHoFVIbWUfwf!!!F)ovjm4ClP*RvCs$;^SFTln
zvS$y~mDs<&-ZA6TW|Zi6J_>r%_mJJdV6xKy3XJj(eLk)QGJvy+x+u%}h@4)>gXQoQ
z1%&3rLHk}&)FH-{0_I%n8$iIGg&Tlis3&gCf@lJWNR%4Er7<MkI|_r%bCpR;Q2QOH
zA8Oe$!7AXwpRxg)P`((S`0UZ{H^_I0ubnQh9zwfyAD0NadN*|+#4<hgFtbOK^eTzn
z-yZk-;J#|rA0`6ORvsD}VG=6_h3|mH6V54iW($FZ&N>Jg8|cUkWE#{QR4-_nKH|J_
z?xS~6K2jIltSd|HY3yHD!)U%j6QkT92#h*BOut4GiWXaxFxP%DAqDKy<I0O;71@lu
zjJdl><dr)n1a9gOSsI)ZzK+jw$A1hHZoaUd^)Uv(qjzs~7|s_Cu53+QCeMxu_m1Ex
zm}`DaXuRGR``n$=+pT`U&~Z6G`$Wb`KlZ`(=>hk~SOUAltA~h@O`$T*nTXn(z%?#p
z0A~U!v2^PQ!;%sS*fUSTH$P7Ur1sPDQoj|8Zf1g=dY$&qJiOdKwZ0eunqM4QR*b8p
zk)2Sa^Ezgn8Az$@g~?Z<?CD0A$0X8;8wSX<$#6)rS$c^my`MU%*IPd;ik3LZxW6Z$
z9fnIN3+If`=Y)d_75)5DQK7?Y6o-Hds9=Qrsn8B9G~BAyu&ZNYUDdTImEyVbZywVV
zLa`)w6%8>Py+2VGsDINM4`tjQtl>Tz32u8OPj>iz1w#dh1{4Wxc>TOUrO?*}98%mR
z^xx5mn?D?0BZG9XsDUC=%#pZDrW0L8vt|3_EGCS$=tl!lkB{JGB9>7CNIgLv*OC}o
z#lJZ0J&&;C^xT}huT(2*JO53UCV81{`Dv+2OP&{E-&`5>E*ecXBU3Yn!IgKNO`oUY
zW_T?<r#z+zV~NFj1=U<i=Fc;ZFgy5iKPrv6AJ+v(hZg>>f~yc8CwMKV;lDVTc|8n!
z=}sSG3aJM_)W`0tQ}mHZYMD@ksZgsc5M*p<FU$tE<_UgaDN2TL^+*1b^?SGR*Tyy_
zC@IzVXWCd0$BFDcb=0+_hqAd9K5<^!tk0vVD3qJtJ8Q}|@3ZX@+x)98pqeG^-v*3d
zCYmrL&=u$hG>|rPe+8Vfvn*&NKvtOCv?Fyr;FLm<=!uciogELSZrm%?FfNUpXNE^-
zNN3b>>DhQ`=Co{z*a!Na0j}&UT0eqC84SX&4Ek3g5nSnZqC(=DW%JsU+MHFoL)73e
z?E^4B{H9FU0Us0CTpoNkwodJBdj6!4B+(cOu@&+C_En4$RAws&(iwP~L^l!S+|IhM
zZ2`Ed)5$KU*RN}2PP_NiM|S%6U}*rD`^C(<ffV13T>dDLDSXl=lxK{<3m*7@VSPDx
zAQ?EWnk9be`0RD!$vAh!H_g*dl-d4zpBV|~4VVQvJs2GVV>}d#JCr^;GiIQKg2-Y+
zO7Oy}A)^x-=@w+<hM?vxur~5)mjYkQ4Fr#WmfT1){VyEi&$g5aO?W`>rD;zj(lGd1
zHM61_qgG%9S89sAz19Zv0*B3Rl=szm^pjKZ8}5~O^tMf_qI=olr#9Sy9@ZbnMFn}7
zc0Q7^zT}HUWUpJ@wV<@!Bn|Sz1@gns{g61i3nk+R7K&(gx;*8Q8qlwOr`OgbOR<!h
zUWIM>*x+NcSvi=3kf3{M-HV5QEUY-AlL#7bC0#nRDbx!7w_1sl7DU)<MBR{bs6+Am
z@dKpTR|HEwei~&XFq~|hU|DAN-SXMo1T$pVm1SK?G%%GnxS&Vt^KyTe)lW9G_BgSE
zs+J70-}Qqh1W_AtBo1JAU!CUb9Xb5tmk79ZqxE0ru=46sYO?5<iWxC6j)A}vZXz4)
zxb!f3{|5M0)W3{h^(Kngwnr}nc~9FQUe)S&D9zg)^^-zC)ms3FM2|Hdus}8fv(@&f
zOUzG7v}nV-?+-U**tsX7Kr(E>=@UWWd=P^gzzjmT1^w0nIs7xG!xVhWnTFDgSwu02
z;N5US5YR2BM9d)yLL*m?9-L*fl%9cvq|msx$FP3wCwXqNItTM8zHU#^3BBD-AE}H*
zQIlwK6wSDPp9s0PYL9Kr=&iM0A88x2RoHy5x%kIR%T%t*viGS(r!0p8tzq^dyhuZ)
zo~Go8Ft!kOFj}=ad&;ti5Jni+vrt~SN#@7-qxbriDS~J7Dg1O?zlw%lC?L`)m<QFM
zPuJ^Y%fuX5QlB_T&!iZui9^Z?+o~S@+7B*x?d0ZQKG0NT)D*=^O{W^F8nQ-I;b^-Z
zNOs<CD{Cj<y<bi>=gIuG*}f+t_3S=fkJ?I?zH@uC?%*!y-Qb?mh8;EMf?aX<Bw)C~
z;7q?RB6kL<--8sBQ%cNI)aBOV6*v%N-UZd;=)0T@k=gjRT6*g9+l}`t=3x)Sw={c}
zT=#c(90sXT%`X15db>(5Ec(ve8!3jb&;dS+`U|%|yMWMwmY4^!5hfk7>zg2U3iu7V
z5AqB<F}P!jE@v>xrY(VHjI7aPiaHx{)7c=#x);KI_Nv4=?JoIOWYp7Z2@73NW)e62
zKSOs;C^VQX4;6O#H~6<X!fW}oHS!p|h;qMn@Rwz=?k6j1)8edv@iwdX^?<z!fWD|7
z-;<2O`^xkozopG7Nc4LIVZ>IRlw65^l}3fGaM79&cqMZxozHQC!dcXb4GvgGykc;)
ziTBBL4N``*gm)=;`N=H%$WQiuTy~B+Z04H5k9!@ubsLK<6nEBc58HUPxmYftULyB=
z>{8^uY!<oodXr2n+skTx*IK5_IZm=&C8xuHH~i(_4D^8GVdTRgza<qgYEdIzRXP%o
z4_E0Tgd~X1a8v^3o?;VkK%jymw-^wjsBBDk_7qK6rRL;JT;j2o=#LjW_lhICY&6DM
z?e6l>Ztt~E@3*HqNkT3%(Yk0acX-^?I<NRy9kH4@89xX`%dudeuu``zF^aK1Xa(_E
zP{gAWiuxc66eSduj!#E~Z%M(E*a%ot5(q@3F9e4*WdYBTy&%k6ks01Z^%faWDWilh
zw2fPOE&A1`imQ^Yr=qY(4_zvIy}~XF%_mKw))0Vqc0p>CTIk@MtMRTL0jeLH5{>!z
zo0leHM)!UrXEuGthl8Tq^Cn+4&Ngu;mH+eRUG<#$ycC|c<HbQWMSFqie42J6RJYOb
z0hL)y?ikz6_%H?MMGE~|R`#!YVe0nH{E3!rR!@OnZ{{BJ+tH@B-;3A#FhmS1Y4syA
zk5BaG#&Zi@m)n=OJ}3Jw2lOFh>YGtA5Ex$N-(W`W+Xe{YS{2AoZA*RK{9*x%LxUj|
zJ;t7-HlsW7N|_Zl+nFw<uW(B$`MiS6!s-PzyZR(nlkH)>Uh<RhmXn>2_tSCtO?E@F
zrO|wp<-QLtW0=_(Y-v>Cfo!kFjH8i3rK-h}Vbb3+Sd0}d4pEX{r{dY9GFd9WS?o7e
z(JwzxL=JaMuz_44eN|boc4y(EE`)KQ`&4yN1G}(nm@x$z?<L|M4a4RCP!Skpyn5=-
zeW=y|W>UYIJJfW*4kmLxW}-0fuq?70&{BH%2f5T;75!P~6r?4+%8kV+n9?f&&kI8L
zJgY!*8JTeTO8qv&%?*g;6P?dn3V#q>i^!+~PRhnI``A9zLq5{Yp;b(ym1Zm`Wv|0H
zIZIjq*g=Q^j(pH?OQ2woJVku;cn}$q!nBc8a?8M~`U(1!jMejV2)N>xnIcvu1ixaQ
zx%Z%8YYP~;%nOu`7z>H_<O5p3R_V+th`~^PH!a~9#P{8bS#Ze8SLb#o+2G{Bpgv7N
z>$0<-sg$Ze?X$X7HP^=TYua=)I4JLsO&I^Cl6g8{SKRmPc|2c(cD2P_!cm`Dy|{-z
z^d<B?D8u>00=qpl1InE@ZwfTS0ahKE&&j_n?mNr|Jy%Q=!e^4Zpo4XJ$2rzL44~~m
zH_$)lL8F6k){%h}a;?wIK^(4F%g%>AovQ0t(1s&}m{Ayy+Yp;=2+YiLs>N-$KRixg
zPu};nI=p{}^X^5%&f|Y!_1LS%_EW#x-&daGOVsnc(u0USn1A<Gm`QvN>ah;>_`~1C
zWE_tAO*XZ@J_ysmYiwRro}9@!jBrnck5$wmSb-XQ!I&Q<Jakc)fVpoAr<gf9?hI4%
zr@K?Q>Fi>?0=o-K*b$7uX`0>i@+`naTD%f&K7w6037<<-<9QDEj;`ME#HzREV;^pb
z5Lgpr2A+w}-sR0dcqClOX$<P$gG<JJ9}ZM#OokaB0njUqUr*)EhLcR$^<JdIT2<t1
zWr|P_L^A|o9y<5wxH0<<F;;C=w-L)rH!C%G;12b5GXGf`yMnUAGs5>@#Hm*dgU-TB
zw6o9HDy{dOmhabp!<0q7?dJ;{8Tb7-`eY!Ra(%o=)4v&30;B?Wv-~Zi%f9y(zZXM9
zL{!yO6di@)(FJIqiHIVpVEGhI*bRy~I`fr?9Z0yPTbwNR?sPcEbP|uUo`1VV5s_fO
zsC9q*vDi^=5KPdHzS!;MgRzn;;l$tuUqS71b_Lzc2&#7*?|)E)0q2fU)`qpz4I*Rb
z0b@Sw&71Kq{|LA|DE%#`vFQBv>DHp>vJyC8@U=eNc)R&|O~UC{i_b;SNK<QVaxjxt
z%b|EV{QxsTwLNCe3AW5CjuB!wx0LMIhg1g&j28+AnHFwNJB|Vr7VOXE+Mlf1#Sg@H
zqDgn_kh23^K#B|#glCQ(WK=vR<3`6VVT6fcpWRiJih@9Be7eZ_Y@=&rzLn{I)57j#
z?_KjDTltc4AN7%CH%Uu$i(TQz;YDUoHm*Cq%nRW>jaQer=ZWC7yHO7VvmsHFX(?QK
zmek=hW{5o(x|9!F6l~8M&b=T6ht^DKHB2<4^hhvMsMU34SGh8JqYPXvgS=ma-irTu
zcKc4gBd`LF7Oe+uwV+4DkFu75|CiWj_5*?M!s!4;8_QkB*M#-SSd!y>+rW5W_>w_y
zBa#~POS*5nxgRHO99GnI5_YXhaarFsyofnKm5#{2Y>n(se_+t$y+gC8a8KH^mjlhL
zbeDO>Ue7Qp7o&m51LXy5cFKkb?n;}P>@IcP<}rD0gNg58QhJ}8+YbBHp!UbY@TG{;
zPLvegu5bRJQ8e867ijeuA=Y}Dz8DZ|zg@lhRPrRJI8VMjG7enV3p7vD<8SYh?8nNF
zzeqQMElGq!gxCE>z~UhJWJfuGPSl4Tu9j~Cd9oV`BEj$!K=8VE%2Z$XQe=y3X<!d<
z>yQ*wmGKaRLph%}V{R-jNOWPfAGiP(Ub&CjSAI`jmEYsvK#u&^5bV6WnoNm(IwX(U
z$CL2V%9Jk4QN}spFauZ}N6Cb=3DQ?{x`>ZC-x0~kBQ<)?EKGOw>kaAcm#<3!)S&0i
zuDmR=CPMgXraH}J9>~%o@N%FzBzFTP1yzhTCUHll!ZjPVsHXjae?>T2!4L*e-Wqbe
z@-agyqV7c)@aPADZm}j?ZDgJj>(aAoCyQ}$G~;ishN{KVRJiHiLknW^By>IJGD|Ai
zZTB<uV{=lkL-QiCo12V2lg}ip(0_ZiJId=WLL4(|Ibm|gUFRWtGRzKb*~fBqZ(W!2
zg=@*Y;}MhloTO$(tz7p9%j6<Pc5tce#@@%#{jIR>Uhnr0AQkON`}$!o#)6ARpU)5*
z6vT2E=19pho$_bUc{$`15g(*fP_Z4zX2N_*NSj`Nbu6B}2n?!$*rME*6FpDPn#$J1
z&_r}w%_Jq*It+!w6kI+7nb4<ZUGpgOs(yK%=;%2Li|<BrHpXaP$4=dyBo_Yq+pFJ<
zH8j}SPC6C~{tj)BunLMKD@DZk6!b~~9yOIvAC4C4=-irIh%o>=3h6D@O)|$sawMWL
zVTP8tv_jc|kjzy>sjg)I=<}6|^_~2+jU6`C<~G;#$E9d&khI6njI?bZITYs0HI<il
zTIe%}%>&i}WM}>hg!CLjLJkIPUnEigK41yjH%zvgDU@?#hL_@+$jRJfs`-()Vl4T|
zS4iVvN^y{ErlObu4<v_6f&+NMuyDtkr7w3#94VH>-}A(LZVkVMON@8N=G3<b`#Mf+
z%De9i3|}#OiY<$pHgzI*_kj{GP*YX@o`D4AK)Tr7Z|1Tx&AW4{ey3gE)X3LqJQDX2
zS!`R=ceJRbw|(3923Gqi_Ol-%X4~%K&s~}w3+tm(E`AM|?i;GeVew6m(x`Zp9_l$f
zmtwJ0K&6qXYLQCBEl<=9F@^m6G59ba<9V(>a??~tWdct+nPjoq5}$hg!pS45LCtF)
zv(pMojCI4~V1~w>gLEGGn5LeW<4ph8e63k`ZjytXd+%{)Lw(Y$w~~*3@uqLj_vm!q
z$4Pb36u+$~)AgZSL*|!|A5fcIewiTc$nbi#DY7hI@~MF6n-LADax5?n8JPSXQ9ILb
z&m9&u-J|=Li$#c=H4Dxx<1};9cJaHHzuqkhM+GmI{SC0v*qSvK>Kz^$zF&!t(zR_J
z&7R{OC1B!aG1&ZOSF4OpW8w?7>Kz6aJ$7sBCN7O;Y;+o}L+3hOw&RD#^G>F5nC$Od
zs|q)5ptxg{Q38mQunToi3o$im<q(4vP|i|Px%17^z2SVJq$k~p%7y$*T0_!)91s=*
z)vM%D;yjm7msd}|cmI5EsOz_!Zd|f~Qaxn|EN9Pn%j5_75A~9L4Lrq#Kv1WVQU9`5
zA=r4&rL{5y82`D6r}E@WkA^TYRzpQnmAo81EV&%j_lJGSLuXdNPmUXTt@gyoO3E-~
zw<iiq0y@Zt5pjvQ2}+Rd+L0nfyzmxY?R1&tZp{8CrJ7B@=~2{!y~V4RdMX3^e3N|V
z$L*5EuE*Fo>+grR*=#isn(`c-=X@2@)b*r%z14F5uM$hDbgCCj{vJ&>Gc`%xw{}B4
z)zf9Kw9Im++;*JiwyCSRcgf?iPh1!0^_6w-7jMa02)2W-wXk6S(8VG3+pM7jvhLvb
z41CciCIYAEdo_!aKLCT-vORl7p(l`bZYzVk&x$Nom(g@Us;kFyYObOF;P<bE(dbUs
zA(Gt;AP-`)dgX9ZT>kKweCa~LLG*mauLL%P$?};u>>-OqG8_dgB2}y=SW!wZ6j8KN
zF-64b$xG;1d!g(KQNq7-Ote@^*n*efBEvL+hqQ_``Ob)W(*s^kI;kH#`-LIen?_EV
zCoE=k_)Xrg{qo<Bds}XCT|J-2t+&Z;@CW1K+llz^yX9S<eVO78`$h7*ZQ^(dvls3%
zUzXf%wx5|BzsbqF)Lu6Dd(3OyP4ho^ah)W5Pjd$EjIMEqAH(pHdOfTmVtpPIaXJqi
zUa_gpwZ>;RY4#YHg48@+4{hP=WHp~(V1%f#q9e_fD3lr{o1Dml9^ag!W(IOiQ|2wR
z#l&CU!+5I>6FoE`*>Ohz8D5x55Cz$&ANT5=r2U!sc)D}WJ(yV*51E;zc#p2UUHXg=
zx!ebDBQ^`R7&M+Oylt|=BS*$D<F&XBtgo*%TE~8#gVApSl1BHb6%b<0T|M@2C8A&z
zCuw(B>f)e(dF<u{`r>mfhFz^wI9l&2for{FzkH8g-ELdmKP&H^-Lm<Ge%;Q$AM)Nk
zVZQiCpG@k@gRg1}UU~^I2Q;Ls8Y(4;*mFX1nT<PhPse&gT=SvYJJNr|*77dRBVJ@M
zaL#MIty2-LPyN;U1}!B8>k5e~1Ir`yjaA@$OFc<R1QCUOEc4*ZZz|P*Wj&8qqgDeV
z-zZmtDHUYF`tys8Fw$1T^#lP<n_JHO)WrP6pUY1~*H$xgGUZo6q%8X2#G?f?-YJu~
zt#i5NZk(|{zpmDOYFEbtcJ}i_)E$N0aPZ#2JxGin4cMerD%W8(hcI7%b5-&z8Z0J@
z#MfgSD3F^rf=$<No==FAfG+pj6`E~=_3eU>I}G&6CE#je3kV{2939#MSegRv>2Vb*
zlb@<vi&s-NxK`gd+3jtH*MyOgure86_q$41Vd*pMP&k|2lL0SfJlpIKd*RPP<w$I-
zsK_$yerx7(k?rZc5OvbTWy|2_7k?SV0ys7iEck#_6v7ltm{1AfV$nZ$g+QwA3-Hx1
zuvQ-lD^B$BmzMXl;IEL>U&H1Ie-4>|#FwFjy~JUpRC_%GaV`k@O<aF>I0jxgp(ot%
z!9=pYP#g;Ef|Ik&VrHMZEX(Any{=viW52OgYlLD;9K|Zbih>}$70bKV+22enhc#>S
ze*WTeBc?oT2zHCdMtz0g?DH=J^%6@Csmn!FbLOS2GAUl@cJ9ET`|Vk0B0`G+hgm0s
zv&<-D1D?j(?XtoD6s?`qX}nfWeIJ=xy8K&yda@#eZ||ziwmXfV-@+H^TD|k*>u`02
zIuyp)3m;D*Jy*A(-2o1Dy!Iuji_)EKiu&ZcUya$5&AI?bW!FhWaP?qFFGeS7)YMPg
zDVqPc*8tCM3=x{u+{bR^F8!!MR^p08!P4Jdd=}~S(D7s-GDx0)@MJ9fMhTZXyj&;6
zd68@cZ@5kDCwtb))qmd0H{=FlpY-}8Oi=}VQRc%48QV}D=L`BYo<8xsz|lIg(EUqc
z=co9+GuF*>+2R!=aGe-itUH2}1u0#;z71`DpB*%r_Z&uuCw6zSEfJY7j<3SnL5*se
z_6NHKqj3iZ=&jd$r;-#J^t}{n;Arqg*^Pp>C(m`vLC(F{oAy}S4paM$s~?&AiWn}e
zN+}ZxGA<blQ#2jp`z|+LE!XbF<!=YiavuU%N3IT=er`^>lOa(Lkf4NfN0XA^e1o(G
z9XPsKq;)N{#nBd66~-eKM>ml0Zk&=rWJe)5YoVedaZ=j8VU)l;+(hL*80k%Oic1#@
zOpuxV!H|SI(H*9IkXm(ZM$)p94)YI%^|JJy%i8H~jh~Y5!HYDPEs;3smY9D?^1$9F
z2`Y9`LRGsIG~)|`2eTJ6cY_cHg=NI`xb$$7tncXa=$e}ChOA6=Ff&-c94eApg5VQ?
z_=16~W0f?Z{m5NXUlW*&Kwm`XN6gWwuavp9?vmN!cNuZg7$3*aZF>&}%hIY7dvD~i
zerr!(cO9*=W?j3VufQIkn9h2fiFt;GD1cob%(ykrYhLtc&r(tJy65qnuv$Y9(~eFw
z>J7VE7GFBf__)L5G6_Fva_JGZ@GB!CQHQW8Q*m*lX7HR^-JuDUvNXLofqFf{reUmx
zk-dzHVLfICBQuis(+Nlfkk)9_l43#9#)p>q=<6rCRIN%Xz_aZ$#>z*?7x1bp(hQd;
zhy-L<fv~QeZ9a!h^TuUiucBvWRR=%qwdugc-bhtu3v4OXu>$wURQ;1CMr^i3jQOo>
z@gtZPnDwU2<tB~G1yjwy$C{K~gD(iW$};UzPw&_@e08%lg|C>9-FtDj1|W2Op2FHR
z^Z#<xsf#tk#i;#}5h4Ea0f=a;<>uIegliC+GeadJ!dZ&Q6FrR?b}Jx@l-5fZ{#C~7
z$|spyp7Oph3CBn=CiEjHh7b{1^M<XwZjm96fIu92y_-B<CLK#jGKppsmdiuZ8N}C-
zNvV4-H$Yksqbvt0?LG(A111bgAVP{@outmuYhc;(1$NiFfkH~l7m<zfbR2dyq@@_)
zX4T?x#jMU<*i#$fk{9y$-v#$BHpt<bE$or4F8>rkMKi8g<Eg41X#ITLl~JG9{H^l)
zu&<iskD`-}iFnvwY{F(GK7p~sQ0?$5KT4^QpSrJa|5Xa2a72s;XDD8JqCy4o$7PP6
zTUaJwxtLWkt5$MC<d=2-9LN*!B3xbA3xrq(Q1&k^gb=h<nEE56IU^(MW&2Z!kXgS)
zkT1f;UpG;oK}kl|*#v)(C7LQ!kj_}T2j#=z^?F;JJ_{EYVZS!a!TRtoYoqmjNVs5P
zJM$5-<JFiD0?b3ieC(V6&ea<!nTZ(q=vHw|Wg3428%2W;?juzeY<kd|5RS1g=v9uB
z>hk+{?IU2<w-pPzP|%T4iPGpOnVV)i=;}nBIeO7vKZOAe{{O&(R3r%7T&h?^gE|GC
z+i=Hk>vi%WysV2kt9FK^R;1$4n*-I$1~r38X-l0?G~NP2G|am^2P~N~s>muuWkb^+
z7z<+k_1(Z)xa!qceVdeOI7xf^Yz{`j-f5IZkx;_5xa79SI_wu?p*KY=LFAdb8`WFp
zztAG@4I`bficVsJD|R|R>RrRzj7~FR@uE1GxB8(-z#s|B!?^Jflof|$mDI_jDH1I+
zTk~z9l5|}a(&h3*)UCgY#Lqw20^g0>l#-AwE>qM797yDlA>NA~@+rEq<ySIm#tcSR
z>Yjf}Td1g!tP_GoXd+zFY?SK%EG`yPdAmTZLeC+Ij!Ywh7K60tA!+sXNYJK**<J?w
zO0I?}6bv-pvLQndx<dVx5HOy`ujXlUu5L^sW8Knk70~7iFdY_zX~O7}f=vTElW^tA
z`K6x2+-7>Gznb|@)s*T7(w6b{07+ZW-B{79Ihsl59`en&e6Hd{KLlamAnw_xId{v{
zH*xno|0~!?M-QjK_(-!uD2f4~6F3*>HT+ou(It#a4AA{4qpK7Ic}h=B^EV20cX1Iy
zz^isqULkj_v6IGtMRljeJpj_h?+q)v!nKL9*7qMGAjotufsqoFw05Y94SO`3_l@-S
zs|kmCna@u;3nc6+P#KIAK^YLoTD#<^>IC+-C|j<0veL-mt8JE^MXQE_ezKv}IOufp
zSXr)4;D4Ke`@PXB(JWKy;%Yy>VeF9>SZ1#5%sR*{zO>W}lAH3ix78v0ke^DT2%TND
zfDu0SZ)l_jmLip<bs-@c0UsUN=2o4zif|Ywq40&ds#au;xb(N9YL?{V1Hi9mLol5S
z6(J6+NA9BeatP(0jI30XxF}gV(k2}x;eDb#I)IdH4o*m%2yt~8+8a7}TWGR`pi_r(
z+#sI5@mScrm#8eG1|`-^%HJ_=Y(+B7Kj#Wcua(StOLj}YH)b1R74^#zL5buhaSl+E
zhL`?(kp0XvBsbYSa_V2+7W<&^pS<*}WbEuw1U7luRu4@KxP16NeDDKEtS&*Ph~blm
z$tejZPNAXshI9zpLGbM%J7G@}zB0n}w?{tO7OOvdce^@wx78fbC!5sx!x~wKMR(#^
z<Ki4vS>8BiwxQp6LGpWu@mChO+#$R~@J^(Zt%&|Lp#R*8Nyu(+<}F2H)ebZno`MP}
zuDWr@@h+ue<Qm9Lg4Yw0lcKy!RO9e0D7raZvrQlMmlKMd$u7J9t=mM^6mN0ZMAfb_
z^%CCnPvdLX5-uIhLI#|G%eMdPZnsSOd!t&drIu$X%UP5<tLNsm#rL|jqBJqyF7vwD
zCJ^Wak5_m~w9F37BmDWqI%S2C@92rCuz7x+hq98g;MJ6>FM~^s6H=tDNJq(de`k-b
z58VegjfB3Hv)~nwos5Bv4F1Yw4_`2f0_Q+F;(BnWyUV3Cuw3=8<2VzqPHQd+z`e3V
zAN}qLv`(Ib_1U%?*c_3Zr*R$Hv7Lr7)n8$v3&ZgK#vIKx;MC*{G(Uw7zZ@j)E$!|F
z0qTYp6`zfHMz1yYhG0W6eXVj|8YAIwf|V==$2KL|Sp0`Zxa28Sa$7%<1^FKOsO&J#
zDl&O_Nc*IH2V}w9jn5%J@&1G8TZ@mhDTkBJOO0kTs%{gG@8^$nF_3wCKMj;24z_UA
zZh>%Z0x&%!OD8thZGOZnL<5!hw1rxEPno8rXz=}j9N5_jOnLe;{-!!MXJMF2BUm(h
zw6-=z{M=s0weX9c5N7eO6MXvFo}=Z;vP1cFrYc|G@zZ+bEZguDW`6Gu-_`g)RNHoZ
zw#acWc0E5ole`a5um2MZ8T96UX4T57oo^5Mc}z)u`mmykd1ci%mbk|h7LAy3!^I(o
zo{v2jwTIvL`Fo5PSTBX>pn9mD?phi1rAuE!XnR|qG>BM(<?h}d6=xcac0AH*jp2P3
zdZh$U7c6)m)Z?(Cb5ys^3tIiI4A%v#-;<)i$D~?1A<pKAa#+m4Dl}{*Rs-`jdtd*8
zR)n5xOG^bs6<mJ-g4cjfb1!&Y7KNhDfjv<9^H}uBaJw#nMc6*1bi?Bi>OfEI>!0D~
zG`b)nc|DJoG#cG_2=%+5VNlS}2hkYZefi<TdO<=NuMZ-TLXpVod#TNch*Ncof`_pi
z9&cL^dR<w*zX$!bT76Xn*6WR>Iup@o3{}WrFodHLsi0yEqEgXgCoTb^7qk>u#vodK
z=;18E1^M2b?7o?O($i9XPG4^bn!D^1-wi+N3U62N%kPdKy~;uZ+|Z59A{3+yL8OLs
zN2<%XUNBJr7=oB6c;xlZrfxxR7#PFkWly*DAN~!Yoyz(Pd+ra?>9x8Ba49rcuW7gp
z4nuoxOt-Or5|04|x&3K&>JoT>H2^%s!+a~m00SX{epp$%DF#e;A16qCCP!c`CGjJ7
zr>O6X!T0HfPw}C*biudk>PGIiGCd*idS1|jxNDJ?=C~q|MjN4NG#Q9q&sWh~t9al^
z9noqL(80(l$SW%t3Zo6YVCXp-8w{br=<<N*k}H6O22lZowY14g1q8u(WT^@bcLGyh
zf<X)c42ersZ=iI404fsebU`2rToewKo-6bjJSaO0BY)AL(!r(q-mHPy13`XL65?pB
zgT(~f1uTI2;=X3qtK^Ybdy=zDvz(+JZ*}Paa(AsF4t5OjZL`+&GwnBu!?!f9e{|LN
zcQ-A|6$|%U`rh04z;p5*`A8m_(_FG^)N}3IDsHMQDKEQW*ide+(oAG47(8WN?dbn`
z`E7i~k<pXZ*5?#GvHImBR%_FY?DVf{e!1iOrQ@1bf4`)<k-W?rjF_y;Hrj_4l9gdf
z&IPYjaxS#EAx00;a4Z%%mUBVDoQr|wTsR_%TvJ%b8Zdgb#44@3<y_!N!qEo3%Rd^H
zbD`I5hUZ*ZpH`S1tWfOuQwY`gt1>-Alu}~B5p_U}%!OLF*f}SNqmk8rhc|I)l_oB|
zj^K=Rmoq5=Vn>rMRi7&Iz(QKxW#(Lvg;1Tp#^WTC7(S;Ya^T}Mhs}N2X*2tzxqF#5
zsDnrMnD@|+2-W*1<@8D8L`^TqN}y*n<C)RccAHk$Ic;`UZ}{rN@a4PB+wwU=ll;}8
z89O`UAn20BDh;NX>bgy-@0`+?pVO~zA5RZ#4MCeq`(sKKeBE^3H`N@^1Mo3DQC4$2
zYE2X?&WtSW%%AZ|op88uJ>V?p@WaRHes?gx!}K9_cSu)IRt5^-xB!kye^)1*L-LOb
zoM2vu3)YHv1w)qvUcR~>pF+>D^|Z+Uh9^_~$;#ypG_>pjz{OHvVu}(cRKT9B5Iqp3
z_NBSSq{IYziUHbRhpDFlqj|=19PEd3gPan^q$GRX$$eA$THM+6j)*jmFPa6UYB5Ep
zjsm^qv35~Nq$Ra}!R=T6IO_HB{yXJgU-|gUW#4V8T9qx@rhZ#HyJYUr(ZfbuUpz)g
zOwE32$e86@TV{5kE&r9*9scBl$FXT^QStGq%Qv(;=Daj*bVJMDnd2MOz2SE$eiNg`
zc*So5B<~7#xdeL`BuQIEodXab185js75H#080ygyl>bL#dhZnS$Hd0;&CKw)QXMJ4
zlv%M^tYkivGh)3zVe&UY(KSyXTA%JrR^n*2_LB8-^=u8YS=?!^RJw^OyyhP87Stk?
z=g&!wSK?;~|9C;|UG5#EEeJ9Qb7Bvehkj!)Gg6aS><mK6i{qIlx&%nJOv%v+^Oi8*
zR)P6;2SVk3SfC(PQHeK}iV*7Z>P2R~!cB<pmrW(!<#Z&+_fP0gC($QmcG8ybHb)Dr
zJKLYB+!sij*DkSOkPR0FMibf`nuSjDZvL=RJ4|yCw6GjhQv<!1r1Mt0v7Hsn2*t&y
z7hTee2qfiFJ0a|@ICI$RS=<YOEtMrDBPxdu9a&jYT0wu4X{S#8G-~9S5yK{o;rNlG
z#}6MievERDSZ2pIemcJa#4i!}eVD&g$tk5K#B-NPDcMWI<u*CV9-ZV)c1I`L6EmFj
zgwfWSSIP^^D;aSj#%WxxWeCPen6IY&Ws9fJTC=c%_Lwbi8n&*wL@pV>v>eZJ?z;X#
zd7D0myg=K{@>gEFapor4ayFoL_BAsLmi*&p1AZ$eFb?ZpG|6R}NX84SCq?0}Idq?D
zLo#q}TS@{u;85h&6>LZ8G`78Ut)yS_vF`mVew{5!kw<nYa>=zUSc=f~Z3!{#Ktx%K
z2aGThCGbi+C+mGVnU{OAmlfGVE4t)*4%rd9ZeLn*JUc{D7UT|s4>QiaEhppB&-GZ0
z-WH^f))`J8zT0|Qj0nvP*50V#!!34i>*#Zt2YW0eqHiCk)1xefp4PB)QP#_%(1vBn
z8kN0*wG8za!Dfkq8H|>Rrub=Uj|O4Q!A2LRPJ48_*rI8_i<v1YwLem{fv7lXCGMZQ
zDk7}Y(H@OaQbM%T?o@jISfOYXj_P{vgQ)iUcJFgc<FYnCzWU2mdnT)Wj?dw&l0>g&
zdDQR)BT6gEZx}g}Z#{nCu)J~qqqNmggXH&@Z`%3mtv`YLed~|QYHK@b#CM}n%U=*Z
zX%CX8v;T+gf>1?uV=vSJjhM#h!<a$oH7;iT6iTmgWY=C}E9*7>5of_8NWFJUS}eQ|
z^mO3t=VNKRx!RJSN@*(zVx1QBF{z^7j;&OuA(GU2NxZ^deY-x%ZeY@Oo+0-bLkmQF
ze`btw=RA8IYSdH0$Nb=Mh}t?Y$oj*<U?MIv4t0*g8cnG8kH&%)dvrovw1cVv_~Uk%
z^md@8*m*Bs=nP!Q^;y%@EBeG?0nOw|!Hc)<D(5otWmFctcd$LbcG#OmE%YWXTj=U7
zyK*vaO5rwolsmW-+d}gJr}$Rj`u?a8Yew!i)3`qpi$rnEIr{Y%CF(aN!26o6?}y%!
zf^X4$fSKuUEtpI#-(b+_IZ;$L+RiRshCK^r2}9q&pgs%q2|h`)ftMKNFQfyc%M3t_
zGjv1^1UtvlFJj2ep_d;Q<mD9R7WVDq>hJEagb+r9Bp@etMksN2Fy^M)P|zdVHewu<
zV0wV*4n^C~%zGib_{qgDpI(i{J;$22{l+fhIN~MK=|voqUko%4zpi}5h*@`4k~?be
zi_N-kmu+-e+30`1{V^V~_u+@bZsy2N=hiLy?&gLoam2e#S0_HOK#i}JGlQBQX9g{>
z_zAS1k{uVYo1bZY7{@n+9~aO#z+$m5y@#=nKgl<V4rD|L{#c{Lv3m=tNU=seT0Lr`
zW#ZVG<`E?)Z60$ZVLRV+sQ9XDmYyu$n};VvH|O#v^IL1j#TM=@DR{Pm%0IF3CwQH>
zhuwwj@F#_}Jt1zade+6E;p%nB;WbTC@XH*4oV@O?>u0ZCHD~rc5BU1@Dd^w7k54!}
zbH&m*vu?R{W|r5Rm6eyrdgbsSm~WYAge}ejYZLV8L9vOj@5<GB^x_9lXpyvHi=NQo
zD0<S6noZ~-g45#7O(Jw>y@b0mXQY3SBRR+T?4VC`MwbjsPVFDPtAs!4@Hhr|alXTo
z;`PZ#x_!R@>iQJ||EJIPa?g-$f9^XAa=7Xoy!V@LlyTCEKRr&$432B%-XQht4s!Kg
ztzaQ$=Qk`^JwO<dTdbM!&=(CexHqD|YCkU1doNpH?1bRhZr_Wcj>XEiGmuIc{AFE>
z&<2A)z@Go_?|6VE)V7?pf7O1J0U>n#d@Nf-1pPiB<(q(%@*+S2Gy#$#qzJu^fui3B
zq#)x^evv}DuBlfB++oOlC7)GM1o(g>Z({I`y?oyggKw0KVepluI_R$=973F&q7&Hr
zEeTQp{>`6<M+NWm2FK+rn<LYo&Y)9Tgdqdu=sA}=G#5wb3X+GM)=qo$i<sO+DxK`7
zWw~&%a%C85#?O#8J_8vpQ3Y&Py9U&7rFr6g*W9pV-vjekkY`$UPrd!7XWzb^`G>I`
zXN1$Zkop_3v}V=J>N(9ssk<=qv<o}VZ|4c2&{@AV{RR#C$EoBYFztIGTUp<W_?&=o
zsOKfr>=NGMLJRIu1sTU`aMkD4`dc!tw{ly?V}T!l^X-51T^vr#*)Jaai7yUb97j+;
zQpsfr`;iWr(AeiAz<;Ga3^i_c<%^U=q02WhaB71mp4sCA@M`sXy-9Ck-_Jm=u5?QD
zd!g9(GZbUmkE~gka@HZ=nT$_ie$hht{(;dEgP$i~Y}xV*$qKyxZKZA0G4-Cx)8JR7
zp~?PwCq{Y~Y@Z3-D>D`azC?$?+EYzir@@@0^c~V80#?n+`fOO+Oq2+^(2<--i(6RM
zIWmH^HVHgOJBK5bCS344*gwJBom0$CpSOT^CKjOJ9nZ_BJ~#k3dgQHoBhGZo-_^}n
zvH9lr<dUuKrP_!ko|TjE@Q<cFShHkOEq{E|>fNd1_uR0!SeA?NZ+lAn?{3HO*@d6w
zBq}~*3ppdSvwQkt&=Qsme%^#>gLgdr4Gv_T+D4$|IeO90cu6GmJX^2R2t2h|%Kxc@
z;L+0F6rg{za$n}9o~-j*H5yHf2B-i#W1&TeCVJ<&)9i!*9(clOr;U*DtRK?n<nW0n
z-y(U3iGPPAJofuTJAZzX7oQ<#$ly(z0tbnCjy#1NlL?js{qWXBfuEH7XlQ#u6W^rz
z&YgD~FyGniFgy6Bix1Nu@ZsIEO_(PpD?U8P)CeX^qsX@~?v;_d`vUqFD{!I>Yj_?u
zn`75=#j`i1u5Z>Uk9*loND{M#5C8^WD))HlFuTZ0tBp|Z)zB+9B+-jcI`2<XJFNa-
zOr1Z0rh(~cpevPf7QMn;uag9vOp=2+S%%;89{7!A_&w1DKY^kmh2y8``lgDXhpkkD
zyI)QwN$UEvL7Xy`ljmNqGVA_yoj-<PcBN4_OlU40aTE_tmY9qNfbTUNeX1-aI>kbG
z&S51co_@tjL_g4cZ1wDe$Q~c47!0IGM_g5;NEo?IrqFAHme3^{HH0lPB7z>0(^cxs
zL`BM{3>L9EHnIvuM*fMBb^dgWhL;a59z1AZp>mGfCnMd%N>n=UaT|aKST1vq8~tjT
zZnwHQLU(D=vZpTJJaNej-|(Hvf5(;&Ei8{PoXR<MVzm4sefkd9`|`XKqlJ?!xRjgN
z9b8*`yBn_SC2{nQF77S*3je@Q!J>Lk7h(H0NZq%?-F8jrZP$!FK2UcpOCh|m%T8%<
zcXCIPkVF}c#?tWJ`lB&*eh5?kXnRcmm+irh|J$D65wI!$tIc3nktsS+{UhxWuu$Gq
z242Je1EyXT^8k3-V_;-pU|^J-l@}a%J)Ym@D}y`-0|=bGD#-<-|GxPr!ePx`%)rdR
z!N3F(1prZ<3$%FJV_;-p;OPC^03;dyzWMu-!<r$5L6iX*yaxcH<_DGl004N}ZIeMr
z8$lR_-_HEID^ffOMSATb!9yvsh)4(&k>J5oks=Z-l#&KQ4xxAmp@@VY#FG~hky1hs
z5sx7)QYaoIr_w_S(uPt(@ghBxQY6?+-|QL);^E`%{xkpV&wD%S0<%K^WE4=Ad5q~d
zXu1<fNEVac8H(-!X4Np7s*ZV8H+fmcA=mP1+U%$;BvhI`8B=5J5vfboe4>s}&#Cvw
z6S6?2$fDh^(q_k=(MKPm#&0dVo~g)Rgz^(5H%DD0DTHo??>h+jy-?M9ALN|%0HHsO
z&?9aOC8=KPcdjKle+v8VYivpb4SyUBIWrrwj`uQePE^f&)fu#@t1^vIJ!$5o;9SW^
zEXfH1-KN^-msnC)CXmNwQ@$WjE0*4+Y{bug5`nGDk?k|bwuk2ix{13wjSSZcGKS~g
z0?LvyyE1Nyx@tbFmbsLyb4uNfyo|gz^bS?}_J>-GeREEA2cw*A)7wW`3%2DI(oqk+
zw>5$3>b&ivk3*Ot%iQ0QALiIiVvBySJ5}?L^)>YyZ`lw34xV09(TChe-*3ZDFb`%C
z<uE{$!vM@G=;v?~&b3B;X0sS1%ED$g*Nc6>1+Pm#+i?zq#5qLVw<>$|q@Tl0>_2vd
zi71Ofm_?KsHOewX$sgf<J6FM(l09X8pV9B=R}tu|Dgn+nl8nJGYMJ_iYxX`|qgzP$
zM@Tpg6iLqB7rlxi$>}cdP6t`<0AsdSZ6i(K;NOKkn^`^J+zGdboU8zD+60y%#Lyf3
z2g0oWod9^+V_;y=fx;+;CWd>AF-$^CQ<yd|U1R#iti<fcT)^DJyoUJ%3m1z4OA*UC
zRsq%|)&s0h*xcBbvE5<kVOL=fV9#Jb#8JYrj+24YgR_Nm3+Fv99j*wj60Rj&m$<%g
zTW}X}@8EvN<G|CxbBX5*uMTel?-t%id|Z4+d|`Y=d{g*#@m=Bj#-GFgOh89qjUbC)
zjNlg`6QKm5B|`Uvz6oau?-2eXk|**;)J=4f=sPhRu{^N@V(-Ka#3RJlh@X>ClgI(W
z84_P4JtP-NzL1iTnjp1L+D`h2^cxv288w+hGIwOfWc_4&WFN_~$nBH+AkQUlC7&Qa
zP5yxVKLrzoRf<fC28s!a6BJJ<ep6CYDo{G6^hH@oIY7Bad6Dud<xeUSDrqWnR8FXT
zQ&mxoP;F6Np(dbaqn4pIP3?f%3w0&+IqH8j5;TrznrKeZ{GqL--Jrco`<srDPM*#r
zooza|bpGfj=x)=!r^lgZq?e-CrFTi+LcdP`m;s+bh(U|NGeZ$W9U}&#TgD8=I>sr+
z3vj@7#(RuU89y^&GEp#bFiA3*WOBshm#Lho0}w`-7Mb<|;SDo4vrT3v%q`64SX5Zr
zSb6{e;z*U&000010002*07w7@06YK%00IDd0EYl>0003y0iXZ`00DT~om0t5!%!4G
zX&i9^7sX|8AtE-WtwM2E2Sh2luv8E?X*yW#AZdyyF8vDEZu|ikeu4gsAK=RK?t87)
z)`b%8%X#<SbH@b09A03<8kqzTQZ%+O&zr_E#Bp!1jXWL<9>EIU4IagUwP5fVmMqWU
zaXeZDgD0?TeHc82Ol;BMX`IDQ4W1!>Hh30!d*0wz#O;c~Z}99p?4X7!C8FG-j1nA*
z&$~|)poJ^kum|OJPOXC{N(vs5l!QS^tWvv2?-u>)jN@RNI3!!0zQk{#2^UAym5Cf2
zQ{O}zTeQ?A^S<P*(>FktmOwm9JVRO&ltH%h3t#CwMB1XN_5Q#vNY1vYTJc?p(T&jM
zCwlzv>|uFoa;m9DG7;5PgYOWR)U{9<n4mAcJK}Z2cTuz<&#FX=q(;57nq&(^qw3K2
z3r-*u-;&hT-9nq)49<7>#?;m$YB#aQ=UN_@_I`F?xUQfEJ^#y#*z1*aRhIcz>8p3)
zO3VhQlap@B(uwZB^R17Feri%##_{Q=Z~Ywgz5d*BiW$6L>;8)6O3hVT>wPiX)a3Xb
zY-1OP-2ATmA1dYvtwnBF<%!JKq_wK{1F7EOvmv$=bEmP+Gl@*^Z%cmyEa0)H004N}
zZO~P0({T{M@$YS2+qt{rPXGV5>xQ?i#oe93R)MjNjsn98u7Qy72Ekr{;2QJ+2yVei
z;2DR9!7Ft1#~YViKDl3Vm-`)2@VhyjUcCG-zJo+bG|?D{!H5YnvBVKi0*NG%ObV%_
zkxmAgWRXn{x#W>g0fiJ%ObMm5qBU)3OFP=rfsS;dGhOIPH@ag%L&u5@J7qX1r-B~z
zq!+#ELtpyg#6^E9apPeC0~y3%hA@<23}*x*8O3PEFqUzQX95$M#AK#0m1#_81~aJ=
z0|!~lI<B&t53FZ9TiC;44oM7~dCMAhiBU{!6EhpR!F!2iFGu)EGru^%G467k<IG|<
zJE-P9HQeDIk9ojD9`P}Jy=Oe(DJSspgPpwOIWO?@nXhbO4guyek6P;3M?LdtAV?!2
z7O;>-d}1+6XksbLS;j^7vyv68Vl`j*#wA{Hl2csfHSc&MaS|^Hk|;@%EGd#IX_77(
zk||k|&1ueXo(tUMEa$kz298P&*SO9V$(20GXR8!Qp%h86lt`)3SKHL!*G!?hfW=~|
zjOer|RqfK1R;688(V`x1RBB3HX;s>kc4e8;p)6Pao9B$EskxdK=MDHm!J6u-Mt|f<
z_e8WS9X5kI6s&J4+-e_>E3!{mU1?R?%zwYF>-rx~rl?c^002w40LW5Uu>k>&S-A)R
z2moUsumK}PumdA-uop!jAWOIa4pB?622)yCurwR6C|O`;Ac|F3umUAvumMG5BVw=u
zBSf+b0R}3v3<d@&vJ?geDp|4wC<#SUM6wJB2P&}!0YtGR0f<pput11du?7P~u_ghC
lQCPSH0Ek$z1_4A_Sy@@Q0sn=t1dXu;07L)*QLku<000joGHd_<

diff --git a/doc/fonts/OpenSans-Italic-webfont.eot b/doc/fonts/OpenSans-Italic-webfont.eot
deleted file mode 100644
index 0c8a0ae06ed09f6a7be1b84defae7ccda65cc2e0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20265
zcmZsBRZtvE(CxCgv$zL$cMI&|?(XjHp2b~*ThQPhG!PaI?(Xgc*O26X|9$&!-JXY2
zJ?C_HRX@y3O*OL`0AQpF009462!Q_(9SI2@5djE9fP+hg1N^tAtbPpy>>5!4z)b(~
z|6^a^095~jQsFgz|AYVAZ~<xncYqDR^*@moz~Vpj`cHrXPyl%U=Q#r$09OC`!~os@
zG@k!)4gk0RtK|l80Js5M|8Z3RpA1z0Pdor1sU@fWzbgX(@BnvjfWQ(!RtLZ$f;)8<
zKk9F&H)e0-q4>$4#;V(s&5ljxnc*2xDtwc4s6GDa;XMPT3|!!;Uj-vEAnuW1cvvLO
z$7e<K=^Fm2EUVJv99xK_<zrp)B?`55ESZFrX4=vwSaX_L^>!_1a-StfkUTdp!c$}k
zLY}scD3DW7SdC}jKIma3c^NHw5i-v1s0)e5ubx3#?$GUzsu+QR)zw>{+TE_c`G7y)
zc(eBl+=n(*hCTWB@^f^ja(+9<i!c(Kjio#|mpYB)2Z<_JTBc<n?44;+7KjsZEakY)
zBBneiFkt8S0(MYdt3C!U?RnACm7?Vhma<Eq8O<UhF}1Hs$2H4y6(Uq|)tl*S%?f|=
z8~#PQhd3d-+kZMOMzGmOKs<wp9BE7;VDcfs)r6-Zm}w#tk-?de_ff+@MyZm$hZ6o9
zw#c)h$3=5_AoFfl4(Uf{H2v69WERwlnf9Y6mzxi-xze4o$p7RgO%jPBa?K-@l3GzH
zNZ<q|m!im3Gf|}J<Kbx+z(7vHws^*Zcl_{Z3|auoH4@PiC$UNT05~_S4p)|FwNOI9
zo#_ZNaX|w_Vc@eBvY|m09|*#AUxbFh)y%msLzlx2Qw$K9QEB_#6~Uw&=7LljG>M3Z
zaQfWK!YL_=AB8@r0ehkiuv+$P#z)&OIAg|wY_8_1<^$0=KIr{1fVlv_Pg|nyj&ElH
zDvcm-guj^pN+X(wMVYKLxY8A4bSLTCebS653qv0e0-{<o$xd8}NEUs+1#;P@yv9fd
z-S--9^{>iZYw9nFX!SpU8oE1HC>t-nm;{_v%YU!F%sw8xqR1=oWZv4p6fYyi>6{;S
z_FW2+4zSp4J!-s|-_GIi_;#5mDoc=@l~W>($BZ^eD&Q0Z$2E}DTB`D;8W>IpWc?c^
zg@R+ErejGHB@Zn=gD!u1?ZkU;yb6b4`}pcvO3=47<~{a1GwT_#Ken=C#WXXFr(AzB
z#cbCKXO4Q_iRv&*desLodh{)%E<@^xh@)>uTEY-I23E=($bS3|-FWpDS=*3UAGz48
z`(?^%P@8J31g?X3BXOJ=I)%%%3Z3jmNr9}B&emgx`o=O!ud|#vDXUv9=oWl?d{&It
zj<ZL|<g1}~;6}}A@bAeoWg1GfyrLrY294faR$A(ETWR-OWr@vw&d#YKR1f!zJQf5f
z>}<viyJg^39M)xG8t7mNP2!7`A`8+-EN96}mhw<TV=wld%f?+R;|g4naYUj=sUT?f
zbhm&)L=<KzZvwhEv|0V|c_N&iCKPiiToOW5j8XfrNGVM++&Ij0?XgG+AyVqRj(b=H
zo~Kmk2ckPOc7bJ*omc)y^mVKSPN$aY-qPpfm2gT_rYZ&NoT?x1#E~xhI~+hY4qPh^
zngb5WBMwVz4$o7LR2!^f&FqTtvV+Btn97S##Tfc16+Y8>afoT!M|U)^cBFIavom-Q
zODu)eTrhnX2Yib9;K>F~V8Sg4yESi)zSHl_Z=>T|Cc0)&(jMc*lbrsyx5?5zWB$iq
z)r?-78|T_$0mIBLvkY=SH-q(pfLZZy3rLr~5Jhhv3p#g(Lv1Hx>q~t05Re6buyW=s
z(%&FeWdf_B9wK<PNqbTa+6LoNC!D6Hq0xkmj^UJW;_2pHU`PU!P>s1gSJa1CXLP6%
zgA{Ne-g7l?C12<Hk%YYokR9{e(vm2{zP9iz?eVc`sRzYIA;L@$mn{rmvD&<GJbfYZ
z93@{xBwYw0N_8zFl194dQ&6fY>Lma_36ASOvs;Z+*iaeZd@;iuE?7nmWw;mkeYhy*
z)}GaYLBwa&00Sh8R{3|XY=D56XirYtX^DnI0D(fo{|z3;a*>?&j5wT{T%8R*Z$hh5
zQ;y{EAg)1)7($tQqV|p0Tz3n8GdSiWDb?U_TYE5Tv!}M2@#x=mw%=jkuAHk5be%Bx
zt$pOD7VPzF0S(67y~#>`|57&uv|%5WNiZYkY>LyB&XTa@QfVIrnxIMrk3Y6vOBgd+
z=!z8bRhsTY4jz~;H+9gr&z60PhR=CGqZz6MxI}_c!qs7ZmeB0MAzU=6@sm^q@b=Jt
zh;;o1KT8ZX=r`vBX*_*t<H-k;feB}^V7bsZh1{4@d0a*Pki&Y?ho$nXlKxttu=&q|
zoN)t~D16+Y%4KRCHCkN+hvvKU+@_>Uw<iPY#qpn{)Pl@}F8oBBG5wty<$mI`1Drwb
z9oxOpm3RIaVHnA}AOCh@JtU(jWBU+)+A%4wFtHjDAAh7Io#NBqLT<90L<gbjOgRT#
zB*IcB6o)^=fwOR9TwoIXp3FrG5Mq2`1f}X!rs1CZ<XZ%$71wc&n8CjYz(_c=3(z;y
zHwJ9(saBnZGBh}VFn|b-D{w)Lk71cD9!tkCSAQz*xse*i6Z{qbjlVeAJ6z3*()VoQ
z=}&Vym=xzHasZrg@hl~a_{i}u;LNT)=^!`|#syb2YaS;<z1=RQaz_Wfn=P5X2@Z5$
zznhufr~9~x3PCX^?7W0i)j=NW=s#XpgY3QSqzq~UG$j4ynvR6Ju0W_Yr*kiUe?fwn
zF55poV*4J1(diH2!BK$=xD<Na5lfVscyP56)tnZ?GSU=_<>cY=op78;LACGFxf(xA
z7Foo}TJ3%4<w^$NRL?fz!E~kCCKX&%Fc1+J6}{JH&-KGE<RQ3j)i7}8+F%uh=~tKB
z{!>I@Py`LmVs<2|46o?G>(`wY+GtsOL+Y?gGxI6bAjyu|pur7)S_DeQMO1<X<c65z
zK-98*6dbJTL<IE3Q~V-dnJE+koFoME+bQ*5>fcpRsn)cl1kkWmkc6s$RLU~tZX@M5
zxUmKapwT(fbfOLNjFJ3^k*<fHH}~kHwmq*mhKN4IFewqr9#G?SeBv-k>Ua5xkk#(e
z(Ya`X4)$T=2y+@Nv}!sV{(zJLkmg7J@*(?vt}vR9A9h;T3Ul<!HXy#kDdAECRd^*v
z^c+81T$uMoxGAo2Eu-3U>3&-$P~DwhYYTt!#r=BnBs*L4Ja7G#I-MjllIG3*kG7qU
z##;!>C+M!?X^mB64Q{o>5q!mmnmWh|E!d2GI;lY5@Gpe3bSU5Pf<=uA9#p+ce0I2%
zlZrvo#hdw6UmilCifx{{30h^-2@hPd^&@OAEoK-)0|QQ|x;h;+gt;V4LSaqPVLW*4
zi<3_K*;+kOj|MgK(B=g=sM~592ELY0>wvqSu1g3uLv&g!Zt@V(u0+`LL3y2Nk3Y_6
z>OoIGgK}=I=XaSBe&%GhoPy-4mN8~h59`(;{RCr5nr|w(&nn}2NLANYDY417Lmm|S
z@pBY=v7M}g1UY)|3d5n1Ppl7A(E7=kVdrv7{4WH9yeq?POg2c;c^`zSsXr4TNK+Q1
zQ6vvZm(zaOO1Mo-zs1A)v%%_9tX$KZ55PmG0UnWq*Tf@71cgA$*zUPg(ff1;-|1as
z*_RT$YvebO-gf+x@OfLZb!%HD2To)SLfEn`=y-vQm^mQzErF2a!(ujCI~hj6PEr<^
z-BAsD94hIM8<Wa|j-oqL_>8!w@?s^V4!fBN<XHZ|{&nGOqkWKi+n>zp<Z_au>T>tn
zu82asn9`Q{Ln=g-9KrU`qCVErTnxt&-%fMq)VE#ZB@<KXHEdXWA(vdbtZuI0CEYX2
zTgunc<wv=Jq#tssb*)0_TIQ5|EUHo7oF6(!^>_E8CjB4`v2m674{;cq+;6U;{yBb!
zM#l_5X$tAE{-e8;WLcIh&<97Fln2DX-hAmNLh?yrCJHy%mJQ)Ep>!paur%A`x1rqz
zIu1A*D(ZdNorkn0+x&yO1A_01IcXSk8jLg^N2f7|bW9^6V1zV>Z<7956=-&4aL?|j
zoszFwh|x`0rPFe4UB8sX5at%JG`|Vb*brqL(WuOR1`$b*Gwfh2t153*FGNpSFV0jj
zd2t-N|BN*=PKP1FiHaL2&PCPB)7Gp{Oe_iDR*JYnmzaeVjzU{W%vlw3p{2#f#9Q3x
z$$#9vas1O1HNJtjft+-!bg5cmalG?L&C#K{A5Yl2;8-o`Q<or>>V%Si%Z>SWS$V!-
z(b==6rmD))e`6%(1e~&?3=JIkvS|$3AmuIS(Cud-3{(IspMdtckE_1%wUYfP@|y&L
zXj!WOWKAXLC`%?hO+R(HPA~zhyQZcBEBvkIszVN_J<I}5aS;_U+!LOPnVhdHt^;Ck
zUO|W0GI)z(-cxemUr5XjAX*JCvDk_9#yvzl7*=sjr6UmHcL8Yf*CEBSp370xe_e5|
zMkh~0H`;{uNu~ptKIu%|A}VW*5wd50$A`cYhB=*_!Z!@*5wnvqH$z;8Q7~0rwRQhA
zr*-A#pYab5;`IqwrXhpPg<#ri<B6Hp`U{l`4hpK<p9KgxdeJ+0wToD&*R|pM%aZem
zUl?w9(#a$OOquIQ!=?5PQ%45j;%wL@eA1kAT+@?YKp1Tt7&{5x(&b8>SJvI#G@)H`
zruJbO%myhwF@KpNl*DYfxdk}-<0heIX<7L-blH-V>k8Ry0u~4MFL*Q0*k%fNYRDjx
zJ#~5L?o9L6qLnuj^}lI+WftXVlSz?etp?H&nMM!J3R&|nnFQzV3qQchDM>Aibm6*=
zAhoJ-wH7LrCN<CV!TSy`L_4zzvQf2FclT|1w`SBpq*)g5!h&&EFrLrPW8Dl7Eqtmo
zE&lraiHuAO%?9zI#INx#%2Zfq->h)2s_-Pt^>jo($2Azp(qD>HUbm?s#+9V=Su`_D
zo(d)ENtMTWpia(=kkD>~OG(3~yM)yz0U5=N^EH(*hr<vk_y=VDo5LamuB=L954q^Q
z$_qZV6Ik1s^@puiR9gSTDygtjC&THS2zBC%Ug<3<<Csrpu!o^EI~JYJQ-slAtrxP(
zZAAM4Y6^F+5}%*z2e%Ttvm8f_h|^5+R4NIl02W4sJL`bmFU|jCr_2WTNYUa|Hpt#|
z+9ks5+7$5*q`l&~zP>oJ*IqyvCs`yAw+Idxp|O%w-g#VA{T?V>wl-;m&@AIo^O#cc
zzel#UBw-f;ABNO(NR@}+5RlmG?h+s6zUVoTaeAzm4tbi8sS`aH=j8O^{K=g~w5%2D
zt$nndke4s7-FCocaAsJoK$t;z-p2kbxLH}sWu?tcO;;n;{`1xaO%wA=DVmC%wFGPm
z;#W~u2KF9~D!`Mjm3zjNMVzn?QM`=whLVD{&o=^h{OphTaFEAu_OHzMon7#IAfrUX
zJeNPy48RZf#mE+(q_$C!I-{8Ur?ho@V<pG41XH$6@-U;q>@G5k+Vqe1apdedlP0cz
zM7`sQ-s}4}+1Rj`;n*-6{B?%WE4lRerghnh#7@^3ZRs6JR|C5{{B>CGH9yN0yqCLT
z*MH&lz}-V4s<G}s#~9RlVItIl!tfv&F?v>v-<cZQ)=4!(!b|BD<z5)s(>kn7)T%Uw
z$hsDs#Up1ugbDUiRy}3GO_)Q~hulo^{LDIyQ6aWGhTMX(&Y`E3%IG#G2yDx4w1yQw
zfk#(PU0g|<Q~swlt4;G5IlY=KwiQ-~ahW-8`FHQ%d2P#RtsKxu?-@S!Itzx39{V%Z
zH)R};G}5H|2bY)G?+#`U+_KCdM^yNJ5E?ISSZyj+R)iYpeAMLrnA1`jBxfw_c%<Kk
zX>rqj=<PM&D*B+ws(yAXnB?X9q%!+c(efE{u7PKlApd!iVdY=3k4nwB{M9cQOk{o-
z=YWMRvbm7)J~YQd!4qIE2wc&f#+dy(*;y+(=yE2-ftQIuMpnR&?m7j<whUWnM|XC5
zPvN?G_c7-Vn0dUIz8d;;BDM%^1iNbBODfJV+B@G-J`adX87~>cXqa2$(A_SPUm>-A
zh)6h|XQ$mzd8>{WT<fU}=}GG9KUR1#QuCvsv*yG<cd&Jou0O8({OYYVs;(6GX))8Q
zjk}w%QN~h50LK3P+98bV&d}X#{+`SVyXf&`eMhFt!T^P=I6Mw32novSxy4(1BN((9
z&K+yZ=9yi)ExpBA#{>nVZf=U2D=J{|5hGo=t)IUA@xfnJ-A=t@ZOP3qM!1o=lq%BU
zqEIfo>0i*SgAfCdu}2~;VnYAWQc?%7@#OwqjH1@=6(^oXPM<y-${ULZ{ga%}e8C`T
z&+&9W!hVhM#UbP!_8hg8T8rot_g-eWIt6dj(wVt&up<U<ds<e1VaZhE>nfv=ngJ8o
z!~;rmY!a`q!*50b#W#wGye27jN>8R5>5Q*7k_zUex53cI?RG_V)nz(|9$vg~uCzkj
z)k{0PlG*(}+uLz!DDpTSB6(?7hCVq^*!g$_eMG9XZ^tE;kB4{75iP2X_@&-3x21GV
zY_b<^bs3X;++D+n9)}H%OI5TfTitr#*7L=L)PRU|eD-F5LWaKzmwJQv^_6?BrQeRZ
zXxOUUCn9=T(k`Z!+aElL7W5R35%G8V!Jm)%kpeAN{PQxbXn?QYwi#9Sd(ep^am3e7
zr1vR9u=R;${u+4iUIb>~m%h1lZVjQ#156>13$OTcV;6!@na_+ZaGI2<d|sN;6<6{r
zTiwcc@~V`k)tRAoVElEkq9M=heOF#(FHg8+AqM8Cx=g)ABV<f&<BQ7rhU^VMIlBDD
zsaABM_tKD?iIV`u(#kh>v)9{w+Gq(q#D9XDO+x4lc;F>Li#W+Pveh!sZi!DR+}YTd
zCz=hIC3TX94~S|RR_x~cwSHv03%xjl+b>0leVUq_X~yF;Qw*qaRg{V?KGo#3=!w_P
zuMn255zV8A5BKuycyE_2J#)Dpntr=~`|+hXQ(A_{Zke_u;J3zwT5&3Yy5o3WftV2Q
zzp#n2WGZ;sn@w}4TEW9aaAsqIV}tXl7lj%Yya}$-MuQW-K;D4=bFEsUI!V2@Um1q-
z=$rxC1m^TRQ2?bcJ$%G!_m>G3otm5Ybmm2}>hA1vU~5Xt6e^bOiQD4RWkPHP5APp>
znBZWS&IW5?>YWl$wU<VzUg^#^@{N2OPo3L<+3?@JwmzTiL8xRp^TCV`{-|lvC1bYn
z6iEEe*@jVh&4l7SgjrOXRS_*I?KUJ|oIIo2A~Vq)@tqKNm^cs<uK=-a@KNjo>}J=`
zK6)?*!ROt!y3X{c+VBQ}*5Q^B>J(&|X0v|NFnKQG=C7FsJZXc9VeRvhwbdOFmIe60
zc%H87CoMhb^1&R^2<*ZT4rk!+c5fuip6y@RC`}aI+V9?P6z#24>zFiHh;21M(DqOq
z-5(Kf({ypr7pBv#qOrX5(C}1v6SuU}L!c$8(?M)ohaBRzeRV&8!Qnks!9pWpAqG%2
zkj|DWYo{d1{~P9B4Pc=wlmi_eq8I?MmPxj^2>Iqp7djc(h0-|ahn_J6_M)$1%&(Cl
zRIrg$8Ci%m_U7#Arh4-TVOlJKG6QkHC9oJY&#wZtGoHE}ggC@?|BzE#G`I<c7JgK<
zdrJPTW(%DyHwRu2ht+-o`J59?K`;@I(3cdVEKt&kZ0zVhV;zv7#1$qU5q{-rHP)oS
zPqpS&yJw}GWY&ST$UcfNfimZfU1HF^QC80iBAa357|<o;&+t?hRKh>B$M(2}zZu_)
zF?u+2$1(@96*ztK9Ko@P99Tn$t`<<!M`HR72+QpMc=e#D9k5%|fE$q%mKZ(2J(!?x
zTo;5J$$1|jFT~y)S^FzZ%>=ofgugmx32`!qHs!B14&L?mAS&!Lho{D#<}(HJ*sTOP
zZRg*dF^Rlr=^llZA6sG^@!(hQNMUlQ36Fy!QdF0hs-)sT{G_6DVt{5%^_kcqqmyz8
zRP3n;_fyUgGww>NWlM!94QEBnS2}j@{su4nCi$hjj7!OMSwUsGybAEoZD}qK;i7Nw
zprPb(oNA!39X-NejeK53kwInICbx?I_NnTx<NlFvq-D#oC_-x1^_kUFXcOf?1$*Ce
zzc6z~6?I;jndesP05!*i_LPBvjSbAJAH$??@Q?kyo8QiAmR%=y{dD;~`HgNO0BHl5
zRKzR8(WFUY<4<eev_C2?OFt?*!lR*C%+q^#?ZW$2z*FaVk4mjT&Z9>|#KXh*;YKru
zBn5%Q-`!c=S9URy*~lsk@DqzC{xNmECXdEz&$^>WETmq~1o#=|tRR&Ia=I=fRQZVT
zP>?760rF5$fQmxD<ZKqjVe#t2HccS_GcI;BROCZ|erGqxIeI(H*R#DQ<0Yvy=EcK%
zYCqw9P8LB11&8b4s=-iGBbMpoL%-Y_b&4GFY!$9`co~>d!g)Uz{j3O#mL`5oATL3a
zI<S|k+<m%3Ny&zLPrIifYI&A9owfMn-c#77BT$HSB4ZglUh(BVuK@l%fiK7jn4yuQ
zN$-wTuNTMe6I;*TZa}<oG4Sp*n=4S<Jn7sTcR4{$zHHzzLK=`A$Z0?Kj{*IIP_3k-
zs7@@?F+@+ql{Mg__KDDc-$F4hvWF9MdQ4SNEF8(h6Z6#!!ccPq8faEPTJ)M~N9`=l
z<6e_wr3%_+n8K3Ic4A#BS+S1~%7?)%{mRkR*q9L<J~t;l_{Pz%NA9@>%*foukAIU*
zKnY(`iRbPOz9<z@>1a{R$>L6Xax(RcW#9eQjo4T1?Eitx?XZzcI+1P;@@}WsVoNlW
zDK@f%1n>v=j^g2Hl^`ss;6ECCHq7~9DlkL0FM1CoIFxXdJX6zznIjJ73GH{z>7h7F
zy#bGm+2owsk1J-E_R`M;i~~0u7ZKQlNf#y2j?XLCHh9?#e7#|BX7H{5T&A4E1Ox;8
zUGmSIOQpyT!;k+OxkFIJD?czU?LFA^%|iL)fCp)Lyt!N|9<d4JirjJ88(cZ<-H=(p
zn@uCWjvD&A1uZ7e@=KMft#`=4l16a5XCb$|D3%Lsima~9BFEcygna#!fG2k9dB(M4
zGUIy&qo^1ckNqR=<N`?=Hcy#dI`h&EYfF%V68eMrc?G`Z7?5n>E>M^g7-mUB!_4^c
zT1yzNybJQV-G`6(YH$Fkv03|5w~WWQoiC3WNz=X)HoqR>?wSde*Y}%abz8iU(jp23
zeb3bTsJgY2l_zOKw)p$kf%H>=L!!O>l=Ii!U3+ZwU%@DrrmPu`sqxEL%t?_)4D&aM
z*wjspiKZkLL2XzuVavkCdx~Ob`;)0AzG@5`M~TRqXW7D5<zC82Mi)_PX)VE54+Bi+
z6V%dDsBQ&f`GHb_%#0mFt~MVqN92kSc7z{C@{R_O+p-Aau%NnSS+}xbUp&ZPWfAE&
zS2e~cc(qDj9OBhU$amTjRQ<Cwg{mXs`E2)*oLf{!2RhYa%GeS#ix_CVW_~aX>T^FI
za+>CBKBYp?$=SScVy80a23Ajgz;!2)ZD(Jno=Q7GeYwj|G(65z($9oGY0=f9b~jm(
z+AWf(Rzj$#)-Y$bkoSc!I<H$Y`m9P-znqRSRm}RWC6CkbAUj?2-}N@-ORm*jUmt$g
zTmG)>T2sg5Bxl|g4kA`Cef{qlmabyEN2Vsic`;Bx?Ue6puZEegVD!FBW>hm>kuE%`
z>d1w6Ti3*|UjEw62SBBf^l!FC-;|}j{2e)|L_ABb-USWGb8%l<XN!PcGNoS)&mq@P
zb>|Thsi?RT(|bq<c>3!xzgyA%vZnz`t)o3SD`@Cjh-#F|p$DGCrCv9>CX1eyE|p#%
z=wy1do6BtaU?dE?waTX;k+@N+I-*X{TJL49OTEQWuC})#4#Vd{4p7>vDm;NN%s(>X
z3Gly%SPFklFs{BO@=U4)Ya#re)uAfl(@WY)?d2}KnfHj2Z#j_}43Cr)0#uRA`y(@V
zY9X*c-#leRS6}9Y3hYpfkF<wJFwk3<YG6*#X++o@=EJ)F8ono8Bb^5zmLI_vyK-zo
zif4hZ-}6)u4&x40<-@9DeAuW1;chF1saGSuQ?LE%piWjrCW8@frK;uI4B+*50{tqO
zDWF(kEFiU?v``9MQp`%@jL(mfHbfCeBl^Q%1MGsknQf72Y-2ntX^ApPlg8^Gj*mRD
ztNxUI`%$HS+ETb)g&&w67KV~rH}S(wP5tOWr@`24d>(G~fKk-Tsj7`93yJ-i>T`K0
z`rpVEWYZjtSN#5UlDUt$0qi&&!f#So)c9m;$&Tsvx(tUzW}nx@5F0%Kk=hvKW5{o4
zq<ERWUzItcBBKZLIxvXtGJ;Vb(cyUK(*7kPtEXeJL@1XQ7nSb!p|czt=-tI@2+dhl
zFZ!#HU8|r&5%qI4ldQcMVAv(2Cv=-+N~9#Dt>_uYB43o2jKZOhVv|!4ce6bP;_n$A
z^-be7ZIt{Um0?fWs(0=FN2YtCo$52FCG9q0jwGD%)hS5o2VuNUZz0`<4Nc3n+)Je8
z1RvE9rnJ@zq)LlIHcy5gHN;|S8qM<TXq*;1#t|abNN-So{C#X*gPjh11s`l~c&T1}
zGWW8B@!!P>%Bk^+k<n6@gg}pG<coz1-mLiZwwB?V$qJ9c<*h%dE)edEuF;E=Ui~my
zJpavI`;b%E^k_MHR+^=m*K7It8!ruiVrjqBoW7Dg<?fW^M(b>@i+Lx3Qt3U4XJbf&
zr96M*FLQbHP7Vr#je-cHX8WUd?icvuS5!$5L6c|T3smmv$qRnr=~h3~IS6a`U0^pg
ze)EcG4Gv$Lz*sVZ!aC*ec7<a1HyJ|_TH&{%zHR9>;cU?2hV<eWW9{Pbl3mPPHZJqO
z7lkF7T;3|FV50JO8Z!<oU^ZE0$IwH_SSxBR9w)nOST>@5`7vo}tuoGNT1=w4{9_w_
z$hX*wBE^sJt^4O>V#=(x6KIy3Oz{$L`E8+#*5pqo3u~aO=vzIEW^D)D+JQG*v2Y|c
zJNDO1j-%`!4AxQ;#k8&Gd9p2Gjn3jKtcc|CSGBMu$<6%koVo=69#bJB+J*=3GbCkT
zwv@bY1s<q5A!W{Sy*Q%9wL4G*#2hr-^R26gO&hr=^MT?Y6Aa_7{5W~aINc#IkzSLK
z23bt9MKMy7e3|2#iVaMQN6@Ynu}?Q|sLmliR26}WZYZ^ki-gagrtRv0`b?7aA@lRc
zXzCt_D@j^nNoj|u_&HN`OEDzJ_vcpxS5y^rGj!?CF*87bKBUYaOaBf_JUZf$$CC%i
z^AmxpU%DBMZ%l;a?p@m_LEh|wb-wVf$3#J%IJ5Ifd-MB7e{_(uG9|Aa^+%S59OXNE
zlA-S?*8`rI+1WZ4G_J`N(efOhScFI$@xAF}-o7wDEppMOwn;?&Tu8=7)ikw~FzR$^
z{QM>r5?5I>tyZ{BB1Bz_cNi$+u!2sAG#TU|571>k8`71O<+PlP@4GvZ&zg9o#GTAa
zKbn4U@DfZhybO_C92JPt1$5!}7+<O>kn1;nHq-Mz`casPa@{&C6}E9E8&hPTeRj*w
z9$?8(h9R@W&5j3Gc=c|dJR#?I;zfomA+8|HY?6rBc2y!aNrL<*M$CQQL@#{!MzY!c
z!ZN*%vL0J8-llLe$iOSNBH>`WYLmDvmVn8h&-W6I#4`N+as{o6yIHuN#+S2NP5+jS
ziuJ(S^|qW2E!Ju-ItzsB2j9KDnEC3~xVxD;f|n+SVS)8SZUvF@6BM_w_NLGxH58sK
ziXt)(_Q)A%+3H0Ze|zesxE>en5payQ(<iix6tJ!@7T7A6r!A`3t1*gdA$Tf!Wyd6h
zagQc}v(N1CTVAB_Lb=_Jia}fz6^lMoQOIOvLjc70r+2Gw!wsIA1_t^;73RWo{w(Yq
zb%;G(4(E438i>L039u-~U!p_)E<l4o{^igpBc}l=TQ=*vEx(CPsC@azohqFt8<vEO
z!_e2~BgE{j-7;DDAz0Pi7P(>kggu-@yQKE{p;Q#cj`!;iIoZPL{-EU#D>AEp05$Z=
zEG1o~b$=4*AT&k-mg@9|*iRZk=4C0yY_t-5yJM4FMu3J&(-qauPc*0Hs)g}N^YT;M
zsshq2Q;I7qJ6#of5~@CQTppTK#Xm!98GVWP`wmM6?`hgD^HRBx%kAXFB*`#f(iUj<
zbeb>OO{tQ3S@5IBr0OMb7QUt%Lfqt$A_{(n*{V>yf&#xGEx%9K=JRF#iA%^H;c{B9
z(wgU2MY&f}ZwCU5S=-&8gnP<YN=n|(MKJqIW$5sQ2mrSQewAz+ti1I@lK8LT#?%9{
zl6WQ!Y4OLla89{3wBN%J(u0=GsiK_vgC{CmnEzcK0f8Wz5w`T+1`&*9+0Y|)-Bt9#
z$+5-bo~aKezg6VQb~XpS4i#b4l)Ol<3XKA&0Ux5J`CvGOoi_fxST2~|vcGidl@q3s
zjZr65wFq;#bFjnYlvO43nJ6$>Anw$Ywi5p8LM9>#4!g)1uLo}U0W<~DP$DYz#p@>`
zjM67%;c!Vi>6y_-W)`6PxW53!xUgmLFY`w3rlv|h=>c>w;S?C*gQ!zUkd&w6F_9r0
zfxn|^e-+D{9-`j7Ag&?Ok*wU@%kG#=O{iU%f|WM~<=n3gLtoY;T{tFaqMh5|Pl=4C
zP2Wp+G6;O5p*(;5iHSS5&eUR_qe$Zxa^K?<cSK>m{KGP45mk38y<;(%iZCmyDI<9`
zszvPqcAAw?Bw*f6olhnfaW+2O;rF!+xdRecB=WU(QAZKBtSLstbwkKdUGf4wS}O2B
zr7tA{7v6eQH}^z!l#-Q`8=FyFU%AAxCU$&Y5-!WSn0RU(n2IdqQAC5Q>>3-k2_a|8
z1bEvL?4$a9B%~Vgm&OO7vkN0-Bo?!gLIfUjXe6Z-=tEUHgme+4eyYd*%&v9iIh$lK
zh5XDqtzvT8RIc&nL}hh0>HB?7&>=M}MqS*jY*clYK^w`ZtYrB0p!44BK!I3f=JQ`X
z^#4w5HAJDAYHPAL_+O7<FHG7EC4u$ov<p2BfnH52bm20-8bkPg8Vd_1t?zC6+VZsh
zFfaG@?WJ|MU54&J95JWPGShnvm-0J{wt@6qg#`@qPTc&th-_`<pF@Uk3WN{7kDHS~
z7tIJ~f+qqs$8D;1QgRJV@8b1*dkvdMWPzVQU>V`L70rq+@A<iNdDpyBOQx)hQVf(O
z3Guo9j>Q|zIP8DMP*^^roWJ<s{&*PBt>-Ki^foM8TbJ8AKr}bu6>*Aw)%PGy4hW(_
zpArQasCn6#7^a8SneH7^QY~9BMHEEi*lx98g(rPM!#+!Wavau|(&2Yl8I2;84S^#H
z&`Y|(t@3#cYDE|8imE~tq!{V_i9l(Fow|x|utaRyJ7x7lk7E10%c8u524zR^w8crV
zOoa^7VTg5q=#{}Fd^fd_b}Wv9vY%6*K(gkLQnO+hG&9$WR8gBF;m}e`_7jU<?2fMA
zEet|dPR<8au7%09DRV)a|3X@9NXN2~ERhO=4nieOQ6^&QW)o8s?k7X96R(qyanwIc
zNp8iGiu23lH~by@^AKX=oWMu7Z{pnWuI~sMJ2m3;#<jPdHVdOiKugH!6=Dqg@S$W%
za4OPAV|ewQqy$^M;_LlfNT%^p)rxhHZK+~xRpdd90<hHGMT#quEAfu6FieAqZ>Yod
zrQ{AP9*D7!$0>hgUi&$cq+ou(A-tG3%|={t)fY)Dphap05mSph>$D~=6ZB$t>DJmj
zz{IuC4p)H`I>-~gY+uu!rQy{B7lAYJ%P;Pk;qif>Oe;#E{+!00Uh<(q`q49_fbXR6
zJCG`Dhz~7ZQIuMn-}q<(ZLf+R{;$!_*uZf4O?_fi4y$5#Tdbs@)euA>6u{%;k}xH$
z7Q4WDmbu(Wv}-~816}<{@RQ81uWD68Sk88l;ll`-fq6E*4kFXE=)bg~-NN5%ebz95
zZ(TxDuvPS)LA6|$ia^cppRvqt59AT++<L{N>?jf}km?D%z|!afgKohrwCAzKnxa=o
zBpy=d`8XrRJ)ZPumGL1Avufak)a?R?2Ab0ruUwipU4Pv&`Q9aNhZ#89oo`tbAUAPz
zbQPLue<@(-&))z_F&+;BzAw2kSN|A;bfSewJjA827|WQew`0MS<}ZlfC3ikP<$L4D
z-TUQlZ&Q5;AT5&0d4P<O2*A+v<7|0b+I9lY;r+q`-QW>549oM4He&_Bpa$Q3!vx1~
zBmI%K*5_p5U$7vHbokh_v9`X>LoB_;o)_|nKDYsqx}p?7e@XO_#9~j@q;l?bzEL{x
z;K$uK)AVlg@b1Vmf!Ok?Z$Zw|4TjG@rX+exHHd<3pSd1n+@;@KUYB^OYz|%U@bypR
z<Nf!*<cD^p(j#FX-UyjEOD)dePIG};>`uh+V=PZp5E9PdA9S2Ajsl3fxF(dC{QJRS
zzr7vSER4L0M~F*e1HCjCf5{|GG;dm1XPFwS$(A>cRg~TSO(0Us5?pqJKb$)|<EO4D
zDq3|y%b3s8?_KQv%^tUo2v50z47nnC?`*ImJ7JQYIv2w2f-sYF9wZ*|Spg;Wp|cba
zY!$=@=AXChD=Ng@jq_CZ*qx)#Uhw=7-1}HP0QUxAtQ7PU@T1R$+sncXe~#{IadMW5
z;6=;&dPJ*?PRO5S*^F?RWm*cyIzdwfmS&8pjF7&tQI>Z0SYX&RLZV*>EvM0)9%>oR
zgOo^eK^&Q{ESf1q0U^*F>{;u^w9_qn1R6f;WQ-8Vfw$36Vx1vi%kr{JH00<InS?Wh
zaQRl<$LhR^!D*po6uWM|Zr5E5c4!x85y>Jx37n=sIeg=L(Dvcx^s^EmH%S1pz80+4
zpL2Cz>Z?&=5t=;HhV{FdG;4h_Wfg^=5hYRjE+Izh9m$!c%;<$Aj+;W&jJ%D^^D*v?
zzY3%84Lda3?QY<H#V++*X9LDhkzG0ez66;j(tKKZXK5I6vj4as4|>?f5EV|KnyPP{
znI=b<?1`6oe_l`clz3TlDuHGum#%#FOEZ1gV%g9RH$#yzBNtmA@O`-sKKe8BU7IZG
z%UZO888S(rCLrbMxU`j^fIdhmoK*2s#pL#{W4ph3^cC7_ipvcXSQm(a#ynV2hIXYk
z**`KXUSV0_mTwAa!nNuSoSAs>#~7+Y`wvU%uZm{10ZHFJy!1TLPpLdI&>P*NH-*ZQ
zx99h^tjY%}cG^vd5!BTy<#rdG>cqwJ^3~k@Q9XN~?UnqvJFP9hymox{RkMY$1|!pj
zHcDeQPG;v0fvbC}7>8M%a34PhuDN!E>7ZzlOCy%wr>Knf7LEPETwI-qr=B&v8L6ul
zm#W|16`!}vFweo)^^EUp^El;pYMs{JF0EK!U3k<@N%$Z%HtTR0Y=od7tnL28_OmKs
zZa?*?*^(<5Fpqrks82W{_^SeKLna2F>yKE}fa0HS3n^UeS{S=RjM75EYy@BB=hxyL
zv)2(xO#U+tabc(WyRsk#nV%WW`*u7Dt%(7TM+#}!Eb1xGYqB_e5)bHI9C+s(cg4xI
zJD;=Bqsb+aQp-F`_9mBJXZif1m}cpEc5|CDcIOT#<Mm?wT9m$s5nU-+f5xl4y#u>A
zq0&vG=usRvO}s^I6Wazc_|cVpUsf@`SW81|V~UOZ=wUzo#i#iV2m6bq2B!=ae5qQ|
z_2?~w8~jX?Uo68kmpQ`sw(05iQ{_++A^whSr5|cN;~OmWYvlt0UHC}48#YSa=b-iu
zv~b}ulbFnBlGh4hC-n^QeZD7)3!b2=$3OzHZe{_PMfqhs1$tkh{sk0Ns$zt(Rdgz6
zd_|-Y7wdrYfLY#OA^PDAJ`L{FSrO5n4)R;k%^Lf6CUGUIvfwn1+>peVP20xQaoNZI
zQ6t<Yme-T@3rgKFbmYTYU9{b$(ujk!bxcj`=qum)pP=#?P2iEsZfLOHjcE*eX(Ea6
zpG(F?5w}x|_S+_y{<y&CUqY;7GB56|9((9tb~2n6j?JK&ZfWHaiG4gUlOLWSl~o#1
z2Y8gUjPz4oCuv!sx-9z#;;$vFQ~Yim7l8OiLu%>DlzLRXEO#=?;|a@lfh*AooX5~K
z#VqLumOwgc=G!o{-YhmrTL(!|n&jYQ)VplnK}SmNDiM;Xi9{xJBzo#}F>Z9zn=17k
zJPMf`s(fW=?ALmgXVldUKam%%m2DC`34EfxCjU>tF-S#bg>q#*FSmiGF*N<B+?5db
z#}*X7jgh$%mrt=kJGaP!qP2)JS!4v99D+3#?6*rK%XH9g#|V4sNYj1&q&Ge&`mR|v
zQzub?q#W*iVLwf-Z@f=OomU=BCsUR>O%rQOlM)z?l{$GEdb_HN05*{#8Tj?+<aqkx
zoZqQY-|xTRk*bDS+Mvvj2ZOl@rH!twXtyninZt=<*Rfr(6{qIozGE+&`b!!=qQ*{2
zm?CxgfsW#zBhI{&97<2(cxAuWMAF2dYDYLqicYHyHR_C{^KM%ffhtx;$*P#uG0cUK
zp(L^~KO0blSsG==w%l=@9ib|Soy_#ohuy{I^iqIL;?rYBhY6w6r9TM>CI(#o^qHVv
zIf8gocJwUOzLP{k%}K(FfU@lGD00t4^1UDEjTk6Hhh9K`k1g1ZnKDBs=oy)iM|7eQ
zK$@EO__b174bMji+Huu}dL90D!QuP*kFT}KqlN1<I7u7{mC!x)b_gmqb0`OKWgNR=
zj+KY-k#0(*p99up{;XH0w|gYhQ}fB6YL${}jRYNToD=S>;EB{?q(2-fGC61)^`C{+
zY(i^IG?O$*t6D`S;zf0N(lE@E5@X6RoL#KZ{XLE4U!*-imY`aW2HZQzCUJTej?I(4
z)?1yR(h`ZT%gbv|&BiECi_#iF^eMGJlS&f5U&e8$r0y{c=w%MVM9^m~<(=k%Zk5<U
z1FQ5~S;Im4*s^Q5gDPwsy`aX&hgftzmecOVSHyX**ni{Zn8tVG7`{+5w&-c+xxE<F
zAIbC2$9=({j*JN6eg(`W!N^XVmNWa|N9}YMY+X782kT#}f6-&EZ=KM8<f`^GYX6d@
z%j2e(K+QZ-79501#uir_8fz)2Cx>ta&s@PhKqhBdXUqC@igP9x2O4JEaSm@`Fpwq!
zWPrwS2E6T@L*S}qPutLSs}uG^(@8!qEt<5|N|_%f503w|z?}3g2|Iy0;oAR*l3D$d
zuFkOrz2<U7B%ruK2XvWJd<eE+if`^4X+RuOxkubf43<s}<?dRiH?;i}0@^zr*}=hk
z5WY|TKK?y={^$lNHpKC^bTA?=A&&JyDm&0?RZ&a>u1j5E5aTO_(`i_et#G$+AE^TX
zyA)Jh*YNa<#<I7vEobDm!feRCQ&jDHuCc|~X6uRuXetl9h2map_H~VFMCA{+v8%_x
zMwZ=#Lf&7NiAW_p{<|xRIQ>)e5AhRVT)+UKzNXvn58lbn95^to-IT6Mo`bshxyJ1B
zahd$2-w)mzusZ3E19CX47Mi^G$(HG(!UvwsVREWFl0^13?C^c;h|&g?wBAp}yv{lo
z_hXtk9Ls=l%<m$p?_rj<UR}A2o~E|#FL1R1uO%Ik**S{bZESG_SFH6lR>$1vn7<$g
zzv+>3Y%BaQKo|-5_z8PR3ML}7eCK=>EpE3{m&Csu7dQKJ#y?*(m#%R;K<&qF!v>uZ
zqv$IHX{#8z7;S!EHI$2oDQ9BiW!!w%DD@z=Une<1G=}lD(QkUfb9OF@yRssLC+z+b
zG!xg-MVj*4pyttDAM_xjm|)d&w^hP7q55|-yHes_4mU0>K;xf_g~d>QC9gwIe&UEX
z>E;m!FahCy-MJ4XdDAh-Mxy=wtpfF|s_IrWN3P(0Z?Skw<Syn{g=VsFR!sqqB#~hb
z9`AX$(YDdNt>io%a(_*U9l;T4?l-Z9(>tvjNJc#}qV(TcX}ej=b1hqM-xq);CW5%1
z!olCTcyj?NBJWz!qWmc$9H4V}mNN8D09jf9pn!bVb(kBQK{Nk~rN4%sAt`>)8<J2Z
zhwKd8O(IvG!>a0Hca3Utc|$}o!Jg$PGdCYreR&@q|DB*~`iXHD5kP@Vk-;8vr3R3>
zL(+nHV-Ea-6n?U&I&%E7=xg3cr9}&bD4Rw_l5k!>E3aYi!()<1Jh(?$qH&@c2!Usj
zA%edP#|5J?FceAkT}u%ygah)1BC!bNyl_51j0*O3xD9=Kos*AN6;pw|=*2kV1oSHn
zv55g6dl6{S<ava4zrsvlQ?A9lP;_WFoDUr0>*9Ys=xcaqTqy<{O2N#i-dC=Qr3SEN
zzfP>K_yMeDSvoUc1CU{(2ts)30^m>#c#sxr`~Vh_TE@#iSc6e#i65Hr?7kdh^Hwr?
zBu>k7tdXp1NK4kotk)Lhe>Xd;1Y7NxXTC)p?pza=*9!tGwJK<em&Rz<r+*PlC^zJ8
z+}62qc8AI;Dgv;UBM04Y-<^Gf+m|A?#IyqPI*D1(|IB>4i{b<|$iHQeWK}5`4X&iJ
zt3#AVQOep#C2r}kG?Ru#x|}DN(ukC!Xy)pbmrwM+J!oxFSq|&tNGcWyvvvVEm@~SL
z%Zr?Na#p+qjECcGmMmFZ?O3H`qSr-}BE4F0JG*`y=v}Eh`nk?r@aNP)UXfj8L(sb2
z#C7$?Z>t*Qptzqj`IWHpdXF=U<K++K(+e;PM-*bqVF*r4<q|$p<G#!S6J?)=JQT^o
zeb-PK@R?_t-;F!mG{z&QqalS=cpg~swHqWFyB;tA)@cGtOpX?-T#MxZ`F-X_dgQR&
zo*^kCT}R@oumsNGc%|L!Wb8Jd3^(n5UOT!DKRtT{QJV||rsddW6s8cO{!j(g&nqp&
z%gNiMl5stXi{umZs)DLYtJQ<hDtTn+52gnY^tG8+qwO*A$|1QrOwrD@bZSKm0sG^r
zS^7wpqyAN^&MJK_7E7sR6Ymb?!xEfoa=drT{9I`R=9MHd7tiJeHPM4H8)%V1C&gGX
zFuJLLMXY*!Y8iOoecO+nf3C*Y18G><#Z27;xckJQud9WslqmJn)L&yFvsOGpUwT8t
z$Q1Qo8yBFz7dUQa+PT0vSp!t~FG7Kcn5U@7Js*HK^bqfuI`~gqL^dwBP--(kHh`qE
z*D4?*y@G{SNE?9fW7}0WK-$<V16?f#rFPoIX|orflg{H$$v=1(a8-fX^r1H-97Z-}
z1;NOGHgQ@7J#=dw*r$1&$uiXKReYzFSw?PGHF--VjVK1oOsWX8&MpRU8#LNhP+&{W
z?Vl%_p>W67aXCe1dj)t2vGCUUaVU#>Ne_A9=;!VzmD<3|sk%HR56y|q92FlM{5UL+
zm)P^+{&9L2rtz9m)dZ9YRH?A?gJa`K?O@RGKIEV|>XC(e1f2-!-fh<+DYr}|w=Tu0
zgq%ru1{YJL=hbAM!}CZR{XiKN-B!njxw4OUhS;y(W>(OcBdJYSatsyzm@g@{T^{Q?
zqqeAbmpGfv<AZLrUJ4e4)qYz+X<axQM6sfgsj00=#r|tQkT}=7B5iC<uo@7IlEEP~
z7y4t&bs5FDaagBjH2mW)cE{CuToeCQW@5H3-`;G;O3#<4%0xKxch;ef5i0t8Z|VC#
zibVnGcij}fz2y{4t*_+FxuKe&y<$rCzq(-6!QiG6wTe=qSV+H$1v5&BNrIrM^F>|X
z!(6A#gL@r3JpKom#7`l#5(IB<Fktg!)X)(LyrX8q>+V8ol1}~b-^7#MhXqh^u;wuJ
zmt^TecM|YdY&g1<siR8{Szo~I@}gous(y6d+g#4$1wO9m)sT~A>%X|uasq~wD7Xty
z>!{U;hUeuH>!buTY-Q7nkZU)+3Wf96ZWuz!^!0ZL_T9iFcM&q+Y0ei66P8if#XoXZ
zS~UA(`AtFk)G6G1IWEk`#=*KcEa7dPrm0YW2+lqkPN7IpNzwUVAwfD&Lj6P-Wfwg*
zb1gAEXv>zl$H8!%@M<TM?WNIoAsKSnBa(l(EhPdsgi?jldYEKODz|XbjDr~NB8fmd
zi94T<q?vdOWhjxsKfrH5d6XoJj0}veBCe{{|Cd;{=qlhO<8mJviv&+qh9zY0Gjse?
zw)BPRl*l5|f?CAgcrLNMr`c+bUb~N77pdi;$GG3`<>&Cr9*RWR-CGPZo|j~H0z|p^
zBM%J#lY<x7xU8>CYJLx+Lzv`dLc)J?H)g>%Y$(Nx>QWrAsgCHqxK*ehft0g9{C(FW
z?MjpSQL0QvSaLzrr%YCUm;(LT>VvUoMV#{9*E&^|4C$JHN6}gybr|x8>&o#`kCIId
z^qv)Y(klPni1cEj0sFbajF1CeVD-on$6KjsSG{H!n4=F>PXtqWGVTkCRO8I>Vn+wv
z@YUri;s5YjTqgb2RZZlAhL-j-q9w!A+#qh7x~*T$&}h?i=?FhUi4Q>{Iy(8_;jOa@
zm5?Qflnq|^1ZI0nYSB*TD2pUc1KbWFl!uVV*vM<RQQon|tyPv>FGz8{cuT{q8|Ze1
zOC0l4VHPhz-rZk`0`7&j?bJ5_KQ{-L*FCmz_62H&^nI!tOiMjJ4Ic-8-J*ft#z8nS
z5P6}OgfocBw)Zz!Bw;IT=OSxLvPEVGhW`j~*8F@qWwWKBV7l(b$HW{%_IHf*wFd8|
z)i$O>{~Kf7uR~t_hOXc}9kfF5%sCD~JxZCVUkBVVTr_oM>a=>4z@tFGN9Gq}i9L0Q
zMEl=d&=Bzz{aiUIwS*2w*DjDwLSqMvroTsGj^dWqP`H${`%jt?+rBd<Sm<wckv{+B
zgCL!ttq)!BbFa(g{s`BZ$fG3d1<t9goZS_rH-LQUiB?fw_m2~`s(VSvKapK^192nB
z%iH>|cvG2axoY>!*`8FTx(#EwwGL!HhPkJ=b0)OR26LVgtC#l7Li5vrI~=_dOM~=4
z-frm@`{VYMI*t$L_Si$psRR0<Z`ZzoQB(F!D>&65(|6_{JT!b@XgV-s>0ayV2@A^4
z{To=cPneX^hf+-~u5Etmx76jcCG9hfWBD5bIexZ?z|MNzsU!7IDE+f>P9N0b7&Y3L
zD(Bhd--mAU^hPzZ2l=88WxQUQQ%H}1ajBbOZ&rxzB;{Mj7_`KY*fgUsv71H;c(O{y
zRcW$e{@55oWr~Z{#f&@t=o@a3=`4V438Un_%<7n0cfHmOiez{b_x_?pO?tNJk>jQ7
zIS^i=1580|HuW>Wbe~tCrD>*#D@Qa?CGSdTv5zVTzHltuB(?2l3KP4poL=dJn-6ld
ze{Vl+ma0DXp<ct2g%MbdPs6l(aPDMPTV8vqoP&NZ2wrfXZN+2x?)5*<jkZz2hP8&y
z?T;j%JQp5IpjNB=EEHu_;fZr(ilY#;B+2K|y-@%3K4JUC69fY33hFsuZ^f$*<(KoV
zjMHQeR#L+YUpeOcRDFiit!%UcMBH8Kwy%DdbA~N72+72T2wYVpyU)oMk>6PBs?iPB
zQ3cRUwIx%<BO=oB_N;MN6vYaLBB_+IPSASQg8sV|@COV)$s`+bnDUh>rpl8CN`B?1
z`T{Z*dvEjox<5l4-S4FZheLZGc|U!2IsEGAC(L#0Yttedfcs2iQcYyQcWanx<QDq~
zKw>>nHt$j|m>Rjv$DfTrGNCQ}24ujr!M!TNo7wiLE$x?6o3#UikdvvyPbY~FDb`|+
zDLc|~ai(pCgKL!aYk&xVtBo9ACN<Mj&JBgpwKrMzkL|<^eaUcNr2bC;y$(Y0r69vw
zH=a!44M>15;-Hiy%@Ny-D+ucg8e&g70DGE@eqM)6CEMS;J+c>Lp`zk6Pk-<r_9kfM
zPCkS97-21p0xJw$C`O2*VwZ}E5dYI)iVpY^K0nX+dW7lnCY;5kbDu)ayIy3|`Xjkq
z9Kn9_0wbpmkg>hVEZ=`q;>%c+s(aM3zrTEw7m%P@eWWERH%K46@<|RN9Vw!CIc|<V
zSX_EK(E*c1OR_ccP-lyP?f`08u#QM&4pTwvvLccpIqrUu<5&)kGfno%ujHVxI1OYk
z*u_J8gK;Ee@CdiGen}I}K$FpcdOVu`C7W+B$?38K;?RN!1!4y(AuH>wX7i=!l1ZHf
z%`JppOt+8<Nt3$iCE`HvSb!$cNQQh`0taF#!=Ss4SC||%D~a2J615D#K87EhfTaAy
z>?hql`5UpXPnZ~@yi=hIFR(Qsd+%WvyWxSd$ch>k;LqTTvLD;1$r8tI%^mRoky-L@
zHZ=3qfn$MRT$mfOMPoF*PziB!t4O{^dPTI1<Oa3@h}K3db+CHKmF18kV9zmYY-5cz
z^@XUT2@c$d)kSNTo*cTxK)VGryQf-ZbS>LK7`cY=_fl|Ut8mgkuk`(NK3Kf|zXU;F
zm9&OD#Vi=$=-8rzj5H)Ts``fa*v@I9Ax^5+!=U~U+*D1<c&vV)66O}+=LAe4A3b_i
z8XIy0#eo$?jy6igdKOguROk;jSz!SKgCgo7KPc=&<pQoS^ObD8Mk@4(fjTMx)f}Bk
zVnk8D{4k&%e(}Z@zqUaLAj|}GZ9C;c?55+&Q;Kq1ebbB&sWc22o^sR|Nwiw)9pa7V
zj^_w$R54*4<%k4P3mP+#vV%{b8jU!<Z0j>NrwV{z=M0h!{8AvXpyCEXT#);grV;X@
zyNgb$#pmf!NeWiuQa-ep3Li-+Yon=RZj5)31cQ8<c?cD6iEWXN9(cIQ7&MC_c0<^M
zIq{)P2%UI+rkvlTkW8h&>x`Fp0w)Xgf&#!c1#BQ6yfj0+I3{Vbh#}iR(9El;LO>FE
z)ShM?9)bee(Xo&`sIU|xglL0JAh#9+WaKQ5Ab#Q*ef@~)MI9qJhr&!ILokR>7Fdo2
zxa{p_RBcGCzAs9;{rUWwX38q5RhEgA=#^bFQaL_RDpj})%MkMXapo4@OeWZRm@>Nk
zA{=Qu52W~NI3}TzQ^j!U=EPXz&5J$_<OJe5QBSAhM&}L_g=CaVO0T77Gc~idY~VH1
zXh^c3vIvq`A*8X|Ddi?giFwg&6+oTGjaY)>Q*)-54WCug;FQtR@JvYXvOZk~YDA--
zE*h)EaL!IySRcV^4ypZQWpn9?a)E14KouZn9oeuyHN}E&$|prDz3WXi=7(EG8sQd_
zS#W3aat82uui%Qnl?iLFL@*`T=L|*vNkwX{PL+*x2~*YsZ(O7l<}p%5(1=U9pojvb
zA?PLAm@e1|yRh`55%9ae!!cexhFq}M#7A?#OAhT46cd}OGXkYO2Z<*J4Kuw8=j8^I
zQiwt)0xcscH^<~KYxHmeB?2tD+0+vZ4!w?32^1mN@}G|2#&-xp`Z2~BI3${Z_%?%o
zqTesLLKe6~^KD?rOVxJ^K$=#2&f;dJ;;S|f#}mpp5lT0uIkCgPwKiP<$fr|`Y04*v
z(Ao~$05Bl>M1%%ng+Z;0uEA|-i-r{HOw3Q>gxv$*I6X%fD|3YsXTAYiE6_HGf`Wx~
z2m~wo5sQd<VZ|?I?dHPIA@5xFhgZ|464;bdljy8%Q%Ef{@bIsONCftPUGNc-iv>W4
z@CX3mlrkoBtPD{xSR&}g_uM8uMVaNDCuP-XJoJR;co^TO5ES{4L<*W4R-%lnDbFgB
zq37Y?1AwdG^&RKY&3%JbS>e4)J(CqNb+jPig#Z~Qcoy$^G5YmSf>s>u3r%_In3JG-
zS$q7><xL;v>ECo|bkD)GEW0VBQxRDU$V|NRm3*~i-HWgxuaQth-;ih@d02E-yDD1J
z4y8uc?3F*P0}zz1@HW8uu@v~I^)G7F#yl^d;3dEwan+m!lj4B%2pPd0kpW*OPStB4
zYb}B_Q$U~SEL_U8k$EHVB$YgmK_>_h(@I`A(wCb=foTS7CBTJv<_Ihsrz@}l<S6dF
zmtRBn@AxG7)HiPW`<|epc!C|Fo;a-Dl`iJ7_|pN##Rp}3Lt_P$KQ++%k9w2OB|@ku
z*HcmkFQ)3MOZ4$8R02?FsY!!+AS%Hl4-N}8JX%#V@=>27RPi&#by#n8F6IX98x1G`
z3KlIh?wb~j;f3AJ)^Iq?f}u=k2(0}P9T`Lss)%tQBZTY%79=J_`loHNJKPzJ+R3Ut
zD2|sR!;>T5w_OnpxSH*o)^MCK*`ZaG*sX-pwH?m9Tdy|l%6N$tj@aqlx=EB`3~P-Q
zYYO0-s)xgv$8_yk&XgGz8pX*`kw{imP34RFMHOl7uLzN*$jKzRqF~mbF$qEPxp`5<
zXF5PHWWY3Yjh>bLA9CIO^mffo9Y>wU4TkWu7krUNWN`so<}K7Xd2NY3Tj1D|%r|%7
ztHKJM4EW~hj%K~9e%leyeLX|x-C#ThKB4TiSV$QbA-yEbgY<Rx91~nHKW6#c;UHgV
zH{Q?P&;VQ^eRH5PMnw_-j}d{+h!L?L<EnfDFm2(YQ$oaWLFda--zj-!t{@FQF1+I+
zKqSqw#gTA+rwkT;M<fx|zWG?;ypY=aQcfV~`Ku}1V8oT(rie#C(Ww(rH-v_K%>WKT
zbz>@J6&hd-s}l^oCzqb@vvDw*cu$IiI)NNdL>F%fShy3Xfs#60MSveLDUv)Q1hMi+
zR(8RHV+c?_9#MX?a*-`E$%s%*E+mWy3~{F}N--dP&;pyIP#>W?sdjkDr6VCy9S~=k
zKECdBGu&Dfb5C_(ML2}#R5&dKc^x%u<x@X3qccmxkq~x=o3vf132RX9Aa!9S2n7vc
zXjleB;Uf+3c1IS0%mS~Wu;c0Z**s=mYNZUHhF9+4)k(R*T}Ko^QGN~DWm0pPSk<K1
zN=6|-!Rvu})k2+>4hkf{4_V~hk8i7+r4!rJHg&jU8J;p|B1>GEhu0A0dV@l~q$zWA
zG#@`VFT!889tn6%>dg5Xn|j6>r|zm{nM3zPj2~ql2LrfVOsr{=lvP-NO2AODBPSI!
zgVo$bm=g)!HOm&-dS*wJ8oqvBr_rlztm1H0vL*^Os&PQwMF?^_56apEQ;l0N3n`ja
zLzUnPPMc>sAg=<5$5!H|JDIK|QbKfquxD~b4gkRb3Ewn{5%Cs8l)l0jxSd1>P`?2m
zZPSXD(7;GoMBKD@E$x_msh&<4_lW8gd<MND^NwrlllCNu#m5xN$7R6sg2TDdr_G{c
zb#!IeT^FQWO)=kTUy$D+<`Z4A{tgf8MdJG*$Wsw%q-KB39E^uRtbw4ZgaP}b%UYXA
zywPfNC0qiqz|0aLqck%s!CE0&9|p)G#1V<liw!^zoCNH|84aKhT13N>CYW0Yfig*I
zub1hP25d|CL{)&$eM`sMrdn{o9-OvhNg~`1dqw(lEs8G8CC=;RuwVR?i#y+SE7g!F
zfs`Pk+Je=uTx1`SlbntW*DMz9;wM^&V*)WUO)hZCIw>h)wx`Un+*^PiH>_$kp2P?S
z+9i7=AAK{i6cb;-ML7*lwGqb(IF;=+ffDb1u_0FUSZl_K^-NYwTwQrD+qTNXFfvW%
zssXgH4SA(<4HSq$BHkd5XsLg02fqV9L-!ddu*0K@l1e-040xa_FCyDIodPrx61eEt
z6qr(pP|QDrpZhT2nFg2!Eu4NY^d`zR9fKjD8)vdv8+qRe#LEdjoJ{?HO<p7ueps&+
zx7?%~7zBHB%=FC!EE^n;+WoZa;~`z=K{hH6B<YvqOe9ON1p<Kpl#Cbx`=DFaY0S6*
zBZh!roj@D3;qBNmZ0GqH1U}7xD%%FiuqLybgUsMt=Fwh>zYz)>JO-m~$|RyfK*(8&
z8M;XWQ5PVk(SsEVMJkdmYBgbWV@DW}HP&Qc^iiFW43W@-#@TWMstz8t-FDe-LwJrV
zi>@(|ig-ru(POv=QIoyk3u3Sj?V1VVCLx!A{JWA6f${oIDN3{w8+i7F<Dk*G&W(z2
z(_-@%SiH$UWn`PEe(!^`h_{h``l7MKjKZ2rdg3x(4o}^&=eRwR-#TGu$g!Io%EF?7
z01vIBwws&1ml~5BmTp`b(;|-zBT*Gttt6XB7ls8r^f_ktOh-h(E56kTTmjU4O4_SQ
zx4Z;Z<vaMX9JXL;XE{V^Ob8{R#(!F6?($yMG#^fvnC3kUiLM|vIVjg;oMQ~(A>H;2
zwpCcT1#1VWTnY!v3N}ys%{JhtuH0p9Va8*ct4YsV-l5VV66Mp;w&_LTZ|{O(6ATJ=
zopS{ud;B=}=H@taMsHi9j-xQhs^)L12+MkW(5W53_G~9QaVm|o)PkO#@cGn`Rl=)?
zWjyAr*d18;gJY`QywtwUS+t5Nvh2Z+J{m}#V4)4;pSm)@s}0#=7RHxri)?4%T+ory
zh(JhEqt8^$Bp!s3G4r#@FuF3V2@OI>j8-eUgZi|?_2~>%Q(9o0nSe>5b0R|bKxR!o
z*n+Z8o~eY9`5?WgKIp$Vn54>jYF+0iA$D=txuXYKW))Mr=Q6WcHZLoxl~V)83gDSz
zYYgF%{*pSmvjy!}0sv=7VREtHp&u#doOr?!n_P$1-#P<Efo@{E{g_#oGQ(UHi1UQA
zq&!*-6J%i?lugto&kMuP&j)xfIX5se&3U#;t3)`oBFUnnlcP7`hztAEMNDtQZ>P0*
z*C<eZ;s%wxkZkBmikiioI5I>=Nt)|G#Tx13g+devX~lQXu}Fy32mOL&6~tz$=%CbY
z;IA!IiRt#ZMNBho0x?G)PHa;vXG>TT$m4_b#<Fc7#~OM|bD;9LavX!89NIQW|NUL}
c3pR|ZqsN9us*c9G)yL`(6B;oO(FbuIAPj;}PXGV_

diff --git a/doc/fonts/OpenSans-Italic-webfont.svg b/doc/fonts/OpenSans-Italic-webfont.svg
deleted file mode 100644
index e1075dc..0000000
--- a/doc/fonts/OpenSans-Italic-webfont.svg
+++ /dev/null
@@ -1,1830 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sansitalic" horiz-adv-x="1128" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1165" d="M0 0zM-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87zM870 0h-168l234 1096h168zM983 1376q0 56 32 91.5t83 35.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-40 0 -66 24.5t-26 69.5z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1165" d="M0 0zM-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87zM868 0h-168l332 1556h168z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1815" d="M545 -492q-71 0 -125 21v141q61 -22 115 -22q68 0 111 57.5t69 181.5l227 1082h-481l-232 -1098q-39 -189 -120 -276t-213 -87q-69 0 -125 21v141q64 -22 112 -22q70 0 114 58t69 181l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5 t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h482l24 108q45 197 126 280t243 83q41 0 97.5 -11t92.5 -26l-45 -129q-76 29 -137 29q-89 0 -135 -51t-74 -175l-24 -108h239l-26 -127h-238l-231 -1098q-43 -195 -123.5 -279t-210.5 -84z M1522 0h-168l233 1096h168zM1634 1376q0 54 32 90.5t83 36.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-38 0 -65 24.5t-27 69.5z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1815" d="M1520 0h-168l331 1556h168zM545 -492q-71 0 -125 21v141q61 -22 115 -22q68 0 111 57.5t69 181.5l227 1082h-481l-232 -1098q-39 -189 -120 -276t-213 -87q-69 0 -125 21v141q64 -22 112 -22q70 0 114 58t69 181l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5 t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h482l24 108q45 197 126 280t243 83q41 0 97.5 -11t92.5 -26l-45 -129q-76 29 -137 29q-89 0 -135 -51t-74 -175l-24 -108h239l-26 -127h-238l-231 -1098 q-43 -195 -123.5 -279t-210.5 -84z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="530" d="M555 1462l-274 -1059h-109q49 307 176 1059h207zM43 78q0 76 39.5 120t107.5 44q45 0 73 -27.5t28 -81.5q0 -68 -39 -115t-105 -47q-49 0 -76.5 28t-27.5 79z" />
-<glyph unicode="&#x22;" horiz-adv-x="791" d="M485 1462l-153 -528h-107l72 528h188zM834 1462l-154 -528h-107l72 528h189z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M1036 899l-98 -340h285l-13 -129h-309l-125 -430h-139l129 430h-303l-127 -430h-133l121 430h-261l13 129h284l101 340h-277l13 127h301l123 436h139l-125 -436h305l127 436h133l-125 -436h264l-12 -127h-291zM500 559h303l96 340h-303z" />
-<glyph unicode="$" d="M942 492q0 -162 -112.5 -263t-309.5 -123l-49 -225h-133l49 223q-195 14 -315 72v154q82 -41 175.5 -63.5t166.5 -22.5l98 452q-139 49 -201.5 123.5t-62.5 188.5q0 159 108 255t299 113l39 176h133l-39 -178q159 -12 283 -76l-63 -135q-121 63 -248 72l-94 -440 q149 -55 212.5 -125t63.5 -178zM549 250q107 13 170 75t63 154q0 54 -33 96t-114 74zM627 1235q-108 -11 -167 -69t-59 -156q0 -53 34.5 -97.5t107.5 -70.5z" />
-<glyph unicode="%" horiz-adv-x="1624" d="M1468 1462l-1085 -1462h-152l1086 1462h151zM1284 772q-67 0 -119.5 -64.5t-84 -188.5t-31.5 -240q0 -173 106 -173q65 0 117 65t86.5 198.5t34.5 236.5q0 166 -109 166zM1532 621q0 -107 -31.5 -236t-82 -217.5t-121 -138t-156.5 -49.5q-110 0 -171 74.5t-61 219.5 q0 166 50.5 318.5t136.5 228.5t200 76q116 0 176 -71.5t60 -204.5zM543 1358q-66 0 -119 -63t-85 -187.5t-32 -243.5q0 -172 107 -172q52 0 94 39.5t73.5 114t50.5 175t19 171.5q0 166 -108 166zM791 1206q0 -108 -32 -237.5t-82.5 -217.5t-120.5 -137t-157 -49 q-109 0 -170 75t-61 220q0 166 50.5 318.5t136.5 228.5t200 76q116 0 176 -72t60 -205z" />
-<glyph unicode="&#x26;" horiz-adv-x="1372" d="M737 1348q-105 0 -163 -60t-58 -170q0 -120 82 -235q139 71 191 110t83 85t31 104q0 77 -42.5 121.5t-123.5 44.5zM471 119q87 0 168 33t195 124l-306 433q-128 -67 -184 -116t-85.5 -107.5t-29.5 -131.5q0 -106 66.5 -170.5t175.5 -64.5zM66 342q0 148 90 257.5 t303 211.5q-103 165 -103 309q0 164 106 264.5t281 100.5q149 0 236.5 -79t87.5 -212q0 -78 -32.5 -137t-87.5 -108t-127.5 -90t-153.5 -83l278 -389q127 110 199 295h168q-101 -236 -283 -412l203 -270h-201l-117 166q-120 -100 -230 -143t-247 -43q-168 0 -269 96 t-101 266z" />
-<glyph unicode="'" horiz-adv-x="444" d="M485 1462l-153 -528h-107l72 528h188z" />
-<glyph unicode="(" horiz-adv-x="584" d="M82 272q0 339 120 627t384 563h157q-246 -270 -371.5 -570t-125.5 -618q0 -339 114 -598h-131q-147 266 -147 596z" />
-<glyph unicode=")" horiz-adv-x="584" d="M500 864q0 -341 -121.5 -629.5t-382.5 -558.5h-156q496 551 496 1188q0 341 -113 598h131q146 -269 146 -598z" />
-<glyph unicode="*" horiz-adv-x="1130" d="M854 1528l-123 -383l422 18l-8 -157l-393 47l180 -383l-166 -52l-113 406l-258 -344l-116 121l309 284l-373 109l55 154l371 -185l41 400z" />
-<glyph unicode="+" d="M516 651h-389v142h389v391h141v-391h390v-142h-390v-387h-141v387z" />
-<glyph unicode="," horiz-adv-x="492" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187z" />
-<glyph unicode="-" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" />
-<glyph unicode="." horiz-adv-x="518" d="M43 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" />
-<glyph unicode="/" horiz-adv-x="717" d="M893 1462l-813 -1462h-174l813 1462h174z" />
-<glyph unicode="0" d="M1092 1014q0 -295 -78.5 -539t-214 -369.5t-314.5 -125.5q-176 0 -270 127.5t-94 369.5q0 270 82 514.5t216.5 369t307.5 124.5q365 0 365 -471zM717 1341q-113 0 -209 -115.5t-155.5 -323t-59.5 -423.5q0 -172 50 -264t161 -92q115 0 209 114t150.5 328t56.5 453 q0 323 -203 323z" />
-<glyph unicode="1" d="M588 0h-172l196 913q59 261 88 359q-50 -53 -139 -111l-178 -110l-80 127l449 284h149z" />
-<glyph unicode="2" d="M911 0h-899l31 147l465 420q102 93 176.5 163.5t123 133t72 124t23.5 136.5q0 99 -60 157t-163 58q-77 0 -150.5 -28.5t-162.5 -96.5l-82 115q191 154 413 154q176 0 278.5 -88.5t102.5 -243.5q0 -111 -39.5 -204t-131 -197t-294.5 -281l-352 -307v-8h678z" />
-<glyph unicode="3" d="M1073 1159q0 -156 -101 -264.5t-280 -140.5v-9q124 -23 195 -106.5t71 -208.5q0 -133 -62 -234.5t-181 -158.5t-283 -57q-210 0 -385 79v164q94 -49 199 -75.5t190 -26.5q162 0 252 79.5t90 217.5q0 131 -79 198.5t-220 67.5h-131l31 143h139q165 0 274 87t109 227 q0 92 -58 146t-157 54q-80 0 -157 -27t-175 -93l-80 118q195 144 424 144q179 0 277 -87t98 -237z" />
-<glyph unicode="4" d="M1067 334h-233l-72 -334h-164l74 334h-656l29 158l834 978h196l-207 -983h232zM705 487q46 220 78 373t116 445h-8q-17 -29 -66.5 -96.5t-72.5 -96.5l-533 -625h486z" />
-<glyph unicode="5" d="M598 893q182 0 289.5 -104.5t107.5 -282.5q0 -161 -73 -283t-204 -182.5t-308 -60.5q-193 0 -330 79v164q164 -102 334 -102q191 0 298 96t107 268q0 126 -73.5 199.5t-204.5 73.5q-48 0 -97 -6.5t-139 -30.5l-74 57l197 684h668l-33 -153h-522l-127 -439q87 23 184 23z " />
-<glyph unicode="6" d="M133 424q0 209 60.5 415t163.5 351.5t246 219t327 73.5q111 0 184 -23l-35 -145q-68 22 -170 22q-212 0 -356.5 -149t-212.5 -443h8q59 79 146.5 126t193.5 47q154 0 244 -98.5t90 -270.5q0 -161 -66.5 -294.5t-180.5 -204t-261 -70.5q-182 0 -281.5 115t-99.5 329z M532 121q94 0 167.5 54t114 149t40.5 208q0 248 -221 248q-66 0 -128 -28.5t-110 -76t-72 -104.5t-24 -155q0 -137 60.5 -216t172.5 -79z" />
-<glyph unicode="7" d="M174 0l768 1313h-719l31 149h891l-27 -139l-764 -1323h-180z" />
-<glyph unicode="8" d="M741 1485q174 0 271.5 -86.5t97.5 -235.5q0 -129 -78 -225t-266 -176q127 -78 180 -165t53 -202q0 -122 -60 -217.5t-172.5 -146.5t-264.5 -51q-190 0 -298 98.5t-108 267.5q0 148 95 256t296 184q-95 69 -135.5 144.5t-40.5 171.5q0 111 54.5 198.5t153.5 136t222 48.5z M608 700q-185 -60 -261.5 -143.5t-76.5 -202.5q0 -107 69 -170t181 -63q139 0 222 74t83 196q0 99 -52 174t-165 135zM729 1341q-114 0 -182 -65.5t-68 -175.5q0 -82 39 -144t127 -116q161 60 228 131.5t67 173.5q0 90 -57.5 143t-153.5 53z" />
-<glyph unicode="9" d="M1067 1034q0 -194 -56 -406.5t-147.5 -360t-221.5 -217.5t-302 -70q-136 0 -242 34v158q134 -47 246 -47q202 0 327 141t189 441h-10q-51 -75 -132.5 -118.5t-180.5 -43.5q-169 0 -261 98.5t-92 288.5q0 153 64.5 280.5t180 199t259.5 71.5q180 0 279.5 -114.5 t99.5 -334.5zM682 1341q-150 0 -241 -113t-91 -290q0 -124 54.5 -190t162.5 -66q76 0 140 28.5t108.5 81.5t65 114t20.5 151q0 131 -59 207.5t-160 76.5z" />
-<glyph unicode=":" horiz-adv-x="518" d="M43 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM203 956q0 77 40 122.5t111 45.5q97 0 97 -104q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26.5t-27 75.5z" />
-<glyph unicode=";" horiz-adv-x="518" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187zM203 956q0 77 40 122.5t111 45.5q97 0 97 -104q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26.5t-27 75.5z" />
-<glyph unicode="&#x3c;" d="M1040 242l-919 422v98l919 479v-149l-747 -371l747 -328v-151z" />
-<glyph unicode="=" d="M127 858v139h920v-139h-920zM127 444v142h920v-142h-920z" />
-<glyph unicode="&#x3e;" d="M121 393l745 328l-745 371v149l919 -479v-98l-919 -422v151z" />
-<glyph unicode="?" horiz-adv-x="874" d="M260 403q22 130 72.5 213.5t165.5 174.5q128 100 168 144t63 94t23 112q0 93 -51.5 143.5t-147.5 50.5q-81 0 -155 -25.5t-140 -56.5l-61 129q92 51 192 76t182 25q167 0 259 -84t92 -238q0 -123 -65.5 -226.5t-225.5 -223.5q-125 -91 -169 -147.5t-67 -160.5h-135z M158 74q0 77 40 122.5t111 45.5q44 0 70.5 -26t26.5 -79q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26t-27 77z" />
-<glyph unicode="@" horiz-adv-x="1735" d="M1679 852q0 -179 -55 -324t-155 -227t-222 -82q-197 0 -213 184h-8q-111 -184 -291 -184q-115 0 -180.5 75.5t-65.5 209.5q0 157 68 284t188.5 199t260.5 72q65 0 127.5 -12t150.5 -48q-64 -242 -98 -368t-31 -172q0 -117 102 -117q78 0 141.5 67t100.5 183.5t37 243.5 q0 239 -128 367t-370 128q-228 0 -406.5 -107t-277 -295.5t-98.5 -416.5q0 -270 143.5 -418.5t409.5 -148.5q197 0 420 86v-127q-219 -90 -443 -90q-314 0 -494.5 184.5t-180.5 505.5q0 261 126.5 485.5t343.5 347.5t486 123q191 0 329 -75.5t210.5 -213.5t72.5 -319z M985 938q-94 0 -174 -55t-126 -153t-46 -212q0 -93 33 -134.5t98 -41.5q187 0 272 315l70 258q-63 23 -127 23z" />
-<glyph unicode="A" horiz-adv-x="1137" d="M813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394z" />
-<glyph unicode="B" horiz-adv-x="1225" d="M770 1462q432 0 432 -336q0 -141 -87 -238t-245 -126v-10q115 -32 176.5 -110.5t61.5 -188.5q0 -212 -152 -332.5t-407 -120.5h-463l309 1462h375zM434 836h248q156 0 249 73t93 199q0 104 -66.5 155.5t-209.5 51.5h-211zM287 145h266q181 0 278 80.5t97 227.5 q0 116 -74.5 177.5t-214.5 61.5h-236z" />
-<glyph unicode="C" horiz-adv-x="1198" d="M942 1331q-174 0 -311.5 -97t-218 -284.5t-80.5 -408.5q0 -187 97.5 -298.5t268.5 -111.5q139 0 322 57v-149q-86 -31 -164 -45t-188 -14q-242 0 -380 149.5t-138 407.5q0 261 105.5 485.5t283.5 342.5t403 118q197 0 348 -80l-69 -141q-138 69 -279 69z" />
-<glyph unicode="D" horiz-adv-x="1364" d="M1300 877q0 -261 -105 -461t-300 -308t-457 -108h-352l309 1462h342q276 0 419.5 -149.5t143.5 -435.5zM449 147q202 0 355 91.5t234.5 258.5t81.5 382t-103 325.5t-302 110.5h-178l-250 -1168h162z" />
-<glyph unicode="E" horiz-adv-x="1047" d="M821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565z" />
-<glyph unicode="F" horiz-adv-x="967" d="M258 0h-172l309 1462h735l-30 -153h-568l-110 -533h528l-32 -153h-529z" />
-<glyph unicode="G" horiz-adv-x="1386" d="M821 766h459l-154 -711q-216 -75 -419 -75q-264 0 -410.5 144.5t-146.5 403.5q0 269 101.5 489.5t281.5 343t399 122.5q117 0 219.5 -20t206.5 -64l-66 -152q-77 34 -165.5 59t-194.5 25q-169 0 -307.5 -101.5t-215.5 -283.5t-77 -407q0 -190 102.5 -299t286.5 -109 q154 0 260 39l96 444h-289z" />
-<glyph unicode="H" horiz-adv-x="1389" d="M1085 0h-167l143 688h-660l-145 -688h-170l309 1462h170l-131 -622h660l133 622h168z" />
-<glyph unicode="I" horiz-adv-x="559" d="M86 0l311 1462h168l-311 -1462h-168z" />
-<glyph unicode="J" horiz-adv-x="547" d="M-166 -385q-105 0 -153 25l6 147q69 -20 145 -20q100 0 165.5 62.5t90.5 182.5l307 1450h170l-309 -1468q-79 -379 -422 -379z" />
-<glyph unicode="K" horiz-adv-x="1141" d="M1034 0h-186q-72 181 -146.5 359.5t-146.5 361.5l-174 -131l-125 -590h-170l309 1462h170l-151 -710l700 710h209l-639 -637z" />
-<glyph unicode="L" horiz-adv-x="971" d="M86 0l309 1462h170l-276 -1308h565l-33 -154h-735z" />
-<glyph unicode="M" horiz-adv-x="1714" d="M676 0l-166 1296h-8q-7 -72 -28.5 -197.5t-37.5 -199.5l-190 -899h-162l309 1462h244l149 -1204h9l659 1204h266l-303 -1462h-174q126 590 193 905.5t94 392.5h-6l-717 -1298h-131z" />
-<glyph unicode="N" horiz-adv-x="1438" d="M1139 0h-181l-460 1223h-6q-32 -221 -74 -418l-172 -805h-162l309 1462h180l459 -1220h6q30 224 72 405l174 815h164z" />
-<glyph unicode="O" horiz-adv-x="1475" d="M1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5t70 403 q0 199 -94 310.5t-261 111.5z" />
-<glyph unicode="P" horiz-adv-x="1159" d="M1159 1085q0 -248 -164 -379t-481 -131h-135l-123 -575h-170l309 1462h330q214 0 324 -94.5t110 -282.5zM410 721h133q216 0 328 91t112 267q0 125 -69.5 180.5t-213.5 55.5h-163z" />
-<glyph unicode="Q" horiz-adv-x="1475" d="M874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q158 0 279 100t187.5 280.5t66.5 399.5q0 199 -94 310.5t-261 111.5zM725 -18l-17 -2h-16q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424 q0 -333 -139 -576t-375 -321l274 -358h-219z" />
-<glyph unicode="R" horiz-adv-x="1165" d="M385 608l-129 -608h-170l309 1462h320q446 0 446 -366q0 -348 -368 -449l239 -647h-186l-209 608h-252zM532 1313q-102 -494 -116 -559h168q193 0 297 85t104 244q0 121 -67.5 175.5t-219.5 54.5h-166z" />
-<glyph unicode="S" horiz-adv-x="1028" d="M913 424q0 -211 -140.5 -327.5t-395.5 -116.5q-106 0 -186.5 14.5t-151.5 48.5v170q162 -84 340 -84q162 0 257 75.5t95 207.5q0 78 -52.5 137.5t-195.5 140.5q-151 85 -209.5 170t-58.5 201q0 187 132 304.5t347 117.5q99 0 184.5 -19t180.5 -65l-66 -150 q-66 38 -148 60t-151 22q-134 0 -215.5 -69.5t-81.5 -188.5q0 -54 17 -92.5t54 -72.5t142 -95q147 -88 198.5 -138t78 -110.5t26.5 -140.5z" />
-<glyph unicode="T" horiz-adv-x="1020" d="M487 0h-172l277 1311h-406l33 151h985l-30 -151h-408z" />
-<glyph unicode="U" horiz-adv-x="1384" d="M1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170z" />
-<glyph unicode="V" horiz-adv-x="1122" d="M479 197q61 144 162 338l479 927h191l-781 -1462h-180l-162 1462h170l97 -930q20 -196 20 -335h4z" />
-<glyph unicode="W" horiz-adv-x="1745" d="M1257 0h-170l-49 965q-8 136 -8 282h-6q-25 -72 -61 -154.5t-504 -1092.5h-174l-62 1462h170l31 -901l2 -88q0 -98 -10 -258h6q89 243 156 383l405 864h178l43 -860q9 -153 9 -304l-1 -83h9q75 224 131 354l387 893h182z" />
-<glyph unicode="X" horiz-adv-x="1063" d="M956 0h-180l-213 641l-481 -641h-186l596 776l-263 686h172l203 -563l443 563h186l-555 -694z" />
-<glyph unicode="Y" horiz-adv-x="1030" d="M537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170z" />
-<glyph unicode="Z" horiz-adv-x="1087" d="M885 0h-901l28 137l924 1170h-655l32 155h858l-26 -139l-924 -1169h697z" />
-<glyph unicode="[" horiz-adv-x="586" d="M371 -324h-387l381 1786h387l-31 -141h-227l-318 -1503h227z" />
-<glyph unicode="\" horiz-adv-x="717" d="M375 1462l217 -1462h-154l-217 1462h154z" />
-<glyph unicode="]" horiz-adv-x="586" d="M-119 -182h225l320 1503h-227l30 141h389l-380 -1786h-388z" />
-<glyph unicode="^" horiz-adv-x="1059" d="M53 553l598 920h109l266 -920h-145l-201 747l-467 -747h-160z" />
-<glyph unicode="_" horiz-adv-x="807" d="M623 -324h-811l30 140h811z" />
-<glyph unicode="`" horiz-adv-x="1135" d="M903 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="a" horiz-adv-x="1157" d="M639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233t-51 -310 q0 -114 47 -170.5t132 -56.5z" />
-<glyph unicode="b" horiz-adv-x="1182" d="M545 -20q-97 0 -170.5 51t-110.5 139h-10l-70 -170h-125l330 1556h168q-51 -242 -78.5 -370.5t-75.5 -300.5h9q93 118 183.5 173.5t186.5 55.5q141 0 220 -99t79 -272q0 -209 -68.5 -386.5t-191 -277t-276.5 -99.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295 q0 -110 55.5 -168.5t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" />
-<glyph unicode="c" horiz-adv-x="922" d="M506 -20q-194 0 -301 107t-107 302q0 200 74 369t204.5 263.5t293.5 94.5q137 0 268 -51l-47 -141q-120 51 -219 51q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -128 66.5 -199t183.5 -71q72 0 136 20t126 47v-143q-124 -63 -276 -63z" />
-<glyph unicode="d" horiz-adv-x="1182" d="M639 1114q194 0 281 -190h10q17 155 45 274l78 358h166l-330 -1556h-139l22 209h-8q-101 -125 -189 -177t-182 -52q-139 0 -217 98t-78 272q0 214 72 392t194.5 275t274.5 97zM449 119q94 0 194 93.5t158.5 239t58.5 296.5q0 111 -54 169t-157 58q-101 0 -187.5 -82.5 t-139 -232t-52.5 -314.5q0 -227 179 -227z" />
-<glyph unicode="e" horiz-adv-x="1010" d="M492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35z" />
-<glyph unicode="f" horiz-adv-x="641" d="M-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87z" />
-<glyph unicode="g" horiz-adv-x="1026" d="M1100 1096l-25 -107l-211 -24q41 -62 41 -158q0 -191 -116.5 -304.5t-311.5 -113.5q-55 0 -84 8q-139 -53 -139 -131q0 -41 33 -54.5t96 -21.5l117 -14q181 -22 262.5 -88t81.5 -194q0 -184 -146 -285t-411 -101q-194 0 -304 73.5t-110 207.5q0 105 72 182t233 131 q-78 41 -78 121q0 69 51 118.5t142 92.5q-63 32 -103 94.5t-40 145.5q0 194 119.5 318t305.5 124q78 0 154 -20h371zM35 -195q0 -77 65 -122t193 -45q182 0 284.5 63.5t102.5 179.5q0 62 -54 98t-184 50l-159 16q-120 -25 -184 -88t-64 -152zM313 680q0 -85 45 -129.5 t125 -44.5q79 0 138 42t90.5 115.5t31.5 159.5q0 82 -44 125t-126 43q-78 0 -136.5 -40.5t-91 -113t-32.5 -157.5z" />
-<glyph unicode="h" horiz-adv-x="1182" d="M729 0l148 692q18 94 18 135q0 148 -147 148q-89 0 -173.5 -59t-149 -171.5t-97.5 -271.5l-101 -473h-168l330 1556h168q-18 -82 -34.5 -159t-34 -156.5t-38 -166.5t-47.5 -189h11q94 123 185.5 176t191.5 53q131 0 202.5 -72t71.5 -204q0 -62 -23 -166 q-39 -193 -145 -672h-168z" />
-<glyph unicode="i" horiz-adv-x="520" d="M227 0h-168l234 1096h168zM340 1376q0 56 32 91.5t83 35.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-40 0 -66 24.5t-26 69.5z" />
-<glyph unicode="j" horiz-adv-x="520" d="M-135 -492q-69 0 -123 21v141q61 -22 119 -22q125 0 168 205l264 1243h166l-266 -1258q-36 -171 -114.5 -250.5t-213.5 -79.5zM340 1376q0 56 32 91.5t83 35.5q86 0 86 -90q0 -55 -33.5 -93t-77.5 -38q-38 0 -64 24.5t-26 69.5z" />
-<glyph unicode="k" horiz-adv-x="999" d="M330 559l526 537h201l-469 -467l295 -629h-187l-235 524l-152 -123l-82 -401h-170l330 1556h170l-129 -602t-102 -395h4z" />
-<glyph unicode="l" horiz-adv-x="520" d="M225 0h-168l332 1556h168z" />
-<glyph unicode="m" horiz-adv-x="1786" d="M696 0l148 692q18 94 18 135q0 70 -31 109t-106 39q-84 0 -163.5 -60t-140 -171.5t-93.5 -268.5l-101 -475h-168l234 1096h139l-22 -203h10q87 119 173.5 171t178.5 52q113 0 174 -65t72 -181h8q86 125 183 185.5t196 60.5q127 0 196.5 -68t69.5 -198q0 -68 -22 -178 l-144 -672h-170l148 692q20 104 20 146q0 62 -34.5 99.5t-108.5 37.5q-81 0 -160 -58t-138.5 -164.5t-90.5 -252.5l-107 -500h-168z" />
-<glyph unicode="n" horiz-adv-x="1182" d="M729 0l148 692q20 104 20 144q0 63 -35.5 101t-113.5 38q-89 0 -173.5 -60t-149 -171t-97.5 -269l-101 -475h-168l234 1096h139l-22 -203h10q96 122 185.5 172.5t185.5 50.5q127 0 200.5 -69.5t73.5 -194.5q0 -79 -23 -180l-143 -672h-170z" />
-<glyph unicode="o" horiz-adv-x="1149" d="M643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5z" />
-<glyph unicode="p" horiz-adv-x="1182" d="M545 -20q-97 0 -170 50t-113 140h-10l-4 -38q-3 -25 -10.5 -70t-114.5 -554h-166l336 1588h139l-26 -209h8q179 227 372 227q137 0 216 -97.5t79 -273.5q0 -212 -69 -389t-191 -275.5t-276 -98.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295q0 -110 55.5 -168.5 t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" />
-<glyph unicode="q" horiz-adv-x="1182" d="M641 1116q94 0 165.5 -50.5t108.5 -141.5h13l67 172h125l-336 -1588h-166l101 480q9 45 57 221h-8q-95 -121 -185 -175t-186 -54q-140 0 -219.5 97.5t-79.5 272.5q0 212 72.5 392t196 277t274.5 97zM449 119q92 0 190 92t158.5 237t60.5 300q0 105 -54.5 166t-152.5 61 q-101 0 -189 -84.5t-140 -233t-52 -311.5q0 -227 179 -227z" />
-<glyph unicode="r" horiz-adv-x="811" d="M752 1116q69 0 120 -14l-36 -150q-53 13 -105 13q-91 0 -170.5 -60t-139 -166.5t-87.5 -236.5l-107 -502h-168l234 1096h139l-22 -203h10q72 95 119 136.5t98.5 64t114.5 22.5z" />
-<glyph unicode="s" horiz-adv-x="877" d="M735 311q0 -156 -110.5 -243.5t-311.5 -87.5q-169 0 -305 69v158q70 -42 151 -65t150 -23q126 0 190 50t64 128q0 57 -35 96t-151 107q-130 73 -184 143t-54 166q0 138 101 222.5t266 84.5q171 0 330 -74l-54 -137l-56 25q-101 43 -220 43q-93 0 -146 -43.5t-53 -112.5 q0 -56 35.5 -96t146.5 -103q107 -60 153.5 -103t69.5 -92.5t23 -111.5z" />
-<glyph unicode="t" horiz-adv-x="664" d="M395 117q55 0 144 26v-129q-34 -14 -84 -24t-80 -10q-125 0 -191.5 59.5t-66.5 177.5q0 66 18 150l127 602h-172l14 73l185 78l125 228h98l-55 -252h274l-26 -127h-273l-129 -604q-18 -87 -18 -132q0 -56 29 -86t81 -30z" />
-<glyph unicode="u" horiz-adv-x="1182" d="M451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170z" />
-<glyph unicode="v" horiz-adv-x="946" d="M223 0l-125 1096h168l64 -613q24 -258 24 -362h6q127 275 179 371l325 604h178l-591 -1096h-228z" />
-<glyph unicode="w" horiz-adv-x="1468" d="M831 0l-32 602q-4 94 -4 172v156h-9l-50 -118l-83 -189l-291 -623h-202l-43 1096h164l18 -594v-88q0 -147 -8 -269h6q47 124 137 322l295 629h182l37 -594q6 -168 6 -262v-53l-2 -42h6q28 86 83 218.5t323 732.5h178l-506 -1096h-205z" />
-<glyph unicode="x" horiz-adv-x="979" d="M467 434l-346 -434h-195l475 565l-239 531h170l174 -412l330 412h194l-455 -539l252 -557h-168z" />
-<glyph unicode="y" horiz-adv-x="946" d="M98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136z" />
-<glyph unicode="z" horiz-adv-x="909" d="M690 0h-719l23 117l694 854h-479l27 125h657l-29 -140l-680 -831h531z" />
-<glyph unicode="{" horiz-adv-x="715" d="M442 -324q-141 0 -216.5 52.5t-75.5 171.5q0 52 20 141q33 146 51.5 227.5t14.5 102.5q0 143 -209 143l32 143q118 0 189.5 43.5t93.5 147.5l68 326q34 160 117.5 224t254.5 64h33l-31 -141q-105 0 -151 -36.5t-66 -123.5l-71 -321q-28 -123 -91 -184t-167 -78v-5 q151 -41 151 -213q0 -59 -18 -131l-47 -211q-15 -58 -15 -98q0 -53 36.5 -77.5t119.5 -24.5v-142h-23z" />
-<glyph unicode="|" d="M541 1556h139v-2052h-139v2052z" />
-<glyph unicode="}" horiz-adv-x="715" d="M285 1462q144 0 220.5 -52.5t76.5 -170.5q0 -48 -21 -141l-49 -219q-16 -68 -16 -111q0 -143 209 -143l-33 -144q-119 0 -190 -43t-93 -147l-67 -326q-36 -164 -119 -226.5t-264 -62.5h-13v142q115 0 167 36t71 123l72 322q25 117 88 179.5t170 80.5v6q-150 42 -150 211 q0 59 18 131l50 213q14 65 14 99q0 53 -40.5 77.5t-139.5 24.5l28 141h11z" />
-<glyph unicode="~" d="M348 713q-54 0 -118.5 -34.5t-114.5 -86.5v151q98 109 243 109q69 0 127 -14.5t144 -51.5q64 -27 112.5 -41t98.5 -14q55 0 119.5 33t115.5 88v-150q-100 -110 -244 -110q-72 0 -135 16.5t-135 48.5q-75 32 -120 44t-93 12z" />
-<glyph unicode="&#xa1;" horiz-adv-x="530" d="M260 684h109l-176 -1057h-207zM250 950q0 76 40.5 122t110.5 46q44 0 70.5 -26t26.5 -80q0 -71 -40.5 -117.5t-105.5 -46.5q-48 0 -75 25.5t-27 76.5z" />
-<glyph unicode="&#xa2;" d="M582 -20h-125l43 215q-132 34 -203.5 137.5t-71.5 257.5q0 185 63.5 344t178.5 258.5t260 120.5l35 170h123l-37 -168q119 -9 217 -49l-47 -142q-109 52 -219 52q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -125 66 -198t184 -73q72 0 136 20t126 48v-143 q-123 -62 -286 -66z" />
-<glyph unicode="&#xa3;" d="M842 1481q184 0 336 -86l-66 -133q-146 79 -278 79q-213 0 -263 -237l-69 -326h370l-26 -127h-371l-47 -219q-22 -98 -66 -166.5t-124 -111.5h725l-33 -154h-953l27 141q205 46 258 289l47 221h-200l26 127h201l76 350q75 353 430 353z" />
-<glyph unicode="&#xa4;" d="M229 723q0 117 68 215l-129 129l92 92l127 -129q103 70 217 70t215 -70l129 129l92 -90l-129 -129q70 -104 70 -217q0 -119 -70 -217l127 -127l-90 -90l-129 127q-98 -68 -215 -68q-119 0 -217 70l-127 -127l-90 90l127 127q-68 96 -68 215zM358 723q0 -103 71.5 -174.5 t174.5 -71.5q104 0 177 71.5t73 174.5q0 104 -73 177t-177 73q-102 0 -174 -72.5t-72 -177.5z" />
-<glyph unicode="&#xa5;" d="M582 715l491 747h187l-533 -770h231l-28 -133h-297l-33 -160h297l-29 -133h-295l-57 -266h-154l56 266h-291l29 133h290l33 160h-291l29 133h225l-202 770h163z" />
-<glyph unicode="&#xa6;" d="M541 1556h139v-776h-139v776zM541 281h139v-777h-139v777z" />
-<glyph unicode="&#xa7;" horiz-adv-x="995" d="M174 770q0 201 238 307q-119 70 -119 203q0 127 103.5 206t279.5 79q189 0 321 -68l-53 -123q-148 60 -266 60q-102 0 -162.5 -40.5t-60.5 -109.5q0 -49 38 -83.5t162 -90.5q100 -44 149 -83.5t75 -89.5t26 -114q0 -97 -61 -180t-172 -139q114 -71 114 -189 q0 -152 -114 -237.5t-318 -85.5q-176 0 -295 61v148q56 -34 136.5 -56t156.5 -22q133 0 204 44.5t71 129.5q0 48 -50.5 89t-152.5 87q-138 61 -194 130.5t-56 166.5zM514 1010q-82 -26 -135 -87.5t-53 -131.5t50.5 -117t198.5 -111q80 44 127.5 107t47.5 131 q0 60 -49.5 105.5t-186.5 103.5z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1135" d="M457 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM821 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M928 1059q-125 0 -191.5 -87t-66.5 -241q0 -169 65 -249.5t193 -80.5q82 0 211 43v-122q-66 -28 -113 -38t-104 -10q-192 0 -297 119.5t-105 339.5q0 208 110 330.5t300 122.5q130 0 248 -60l-60 -120q-106 53 -190 53zM139 731q0 200 100 375t275 276t377 101 q197 0 370 -97t277 -272t104 -383q0 -204 -100.5 -376.5t-273 -273.5t-377.5 -101q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM244 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5 q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="686" d="M498 1479q114 0 153 -103h6l37 90h86l-139 -665h-92l14 117h-4q-40 -56 -90 -93t-123 -37q-77 0 -126.5 60t-49.5 166q0 127 41.5 234.5t116.5 169t170 61.5zM381 891q61 0 112.5 49t86 137.5t34.5 167.5q0 62 -28.5 96.5t-85.5 34.5q-92 0 -154.5 -103t-62.5 -243 q0 -139 98 -139z" />
-<glyph unicode="&#xab;" horiz-adv-x="958" d="M88 584l391 374l78 -81l-297 -328l172 -387l-113 -49l-231 442v29zM483 541l367 405l86 -69l-283 -365l158 -350l-113 -49l-215 397v31z" />
-<glyph unicode="&#xac;" d="M1047 793v-529h-140v387h-780v142h920z" />
-<glyph unicode="&#xad;" horiz-adv-x="639" d="M55 469zM55 469l35 158h479l-34 -158h-480z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M139 731q0 200 100 375t275 276t377 101q197 0 370 -97t277 -272t104 -383q0 -204 -100.5 -376.5t-273 -273.5t-377.5 -101q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM244 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5 q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5zM1194 915q0 -78 -47.5 -141t-132.5 -98l227 -385h-149l-207 352h-113v-352h-127v880h229q163 0 241.5 -63t78.5 -193zM772 762h92q195 0 195 149q0 76 -47.5 107t-149.5 31h-90v-287z " />
-<glyph unicode="&#xaf;" horiz-adv-x="782" d="M1012 1556h-785l33 132h787z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M215 1171q0 128 90.5 220t220.5 92q83 0 155.5 -41.5t114.5 -114t42 -156.5q0 -128 -90.5 -218.5t-221.5 -90.5t-221 90.5t-90 218.5zM328 1171q0 -80 58 -138t140 -58q83 0 140 58.5t57 137.5q0 82 -57.5 140.5t-139.5 58.5q-80 0 -139 -58.5t-59 -140.5z" />
-<glyph unicode="&#xb1;" d="M516 643h-389v141h389v392h141v-392h390v-141h-390v-387h-141v387zM127 0v141h920v-141h-920z" />
-<glyph unicode="&#xb2;" horiz-adv-x="717" d="M657 586h-561l23 106l264 228q115 100 158.5 149.5t63.5 93t20 90.5q0 53 -31 85t-90 32q-90 0 -195 -80l-59 90q125 101 274 101q109 0 171.5 -56.5t62.5 -150.5q0 -99 -52.5 -179.5t-197.5 -205.5l-221 -187h395z" />
-<glyph unicode="&#xb3;" horiz-adv-x="717" d="M549 1036q69 -17 108 -68t39 -120q0 -132 -91 -205.5t-253 -73.5q-125 0 -233 56v127q125 -72 239 -72q205 0 205 170q0 137 -178 137h-90l22 107h95q97 0 155 41t58 112q0 60 -34.5 90.5t-93.5 30.5q-102 0 -196 -68l-55 93q109 88 268 88q114 0 178 -56t64 -151 q0 -180 -207 -234v-4z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1135" d="M532 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1194" d="M295 266q0 -147 147 -147q89 0 172 59t148.5 171t99.5 269l105 478h163l-233 -1096h-139l24 205h-12q-93 -121 -183 -173t-188 -52q-112 0 -163 96h-9q-11 -78 -22.5 -148t-83.5 -420h-164l336 1588h168l-148 -695q-18 -92 -18 -135z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1206 -260h-114v1661h-213v-1661h-115v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h557v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="518" d="M170 587zM170 690q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" />
-<glyph unicode="&#xb8;" horiz-adv-x="420" d="M211 -276q0 -98 -81 -157t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" />
-<glyph unicode="&#xb9;" horiz-adv-x="717" d="M537 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90z" />
-<glyph unicode="&#xba;" horiz-adv-x="688" d="M745 1219q0 -191 -88.5 -311t-240.5 -120q-113 0 -180.5 71t-67.5 196q0 117 42 215.5t117.5 153.5t174.5 55q117 0 180 -67t63 -193zM500 1376q-102 0 -160.5 -87.5t-58.5 -229.5q0 -85 38 -127.5t107 -42.5q94 0 152.5 88.5t58.5 232.5q0 166 -137 166z" />
-<glyph unicode="&#xbb;" horiz-adv-x="958" d="M872 485l-393 -370l-78 82l297 323l-172 391l113 50l233 -447v-29zM477 528l-368 -401l-86 70l282 360l-158 354l113 50l217 -402v-31z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1518" d="M123 0zM1362 1462l-1086 -1462h-153l1085 1462h154zM483 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90zM1327 203h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM1095 320q69 322 90 395 q-20 -36 -110 -149l-205 -246h225z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1518" d="M66 0zM427 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90zM1305 1462l-1086 -1462h-153l1085 1462h154zM1343 1h-561l23 106l264 228q115 100 158.5 149.5t63.5 93t20 90.5q0 53 -31 85t-90 32q-90 0 -195 -80l-59 90 q125 101 274 101q109 0 171.5 -56.5t62.5 -150.5q0 -99 -52.5 -179.5t-197.5 -205.5l-221 -187h395z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1565" d="M87 0zM517 1036q69 -17 108 -68t39 -120q0 -132 -91 -205.5t-253 -73.5q-125 0 -233 56v127q125 -72 239 -72q205 0 205 170q0 137 -178 137h-90l22 107h95q97 0 155 41t58 112q0 60 -34.5 90.5t-93.5 30.5q-102 0 -196 -68l-55 93q109 88 268 88q114 0 178 -56t64 -151 q0 -180 -207 -234v-4zM1512 1462l-1086 -1462h-153l1085 1462h154zM1477 203h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM1245 320q69 322 90 395q-20 -36 -110 -149l-205 -246h225z" />
-<glyph unicode="&#xbf;" horiz-adv-x="874" d="M657 680q-22 -130 -72 -212t-165 -175l-95 -75q-159 -127 -159 -275q0 -93 51.5 -144t147.5 -51q80 0 154 25.5t140 56.5l62 -129q-90 -48 -189 -74t-186 -26q-168 0 -259 83.5t-91 237.5q0 124 66 228t225 223q132 98 172.5 152.5t62.5 154.5h135zM760 1010 q0 -77 -40.5 -122.5t-111.5 -45.5q-43 0 -69.5 26t-26.5 78q0 71 40 118.5t107 47.5q47 0 74 -25.5t27 -76.5z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM863 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM679 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM1080 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27 z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM934 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18 t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM523 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM887 1716q0 46 28 79.5 t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM991 1585q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM887 1583 q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1673" d="M1448 0h-737l98 465h-438l-293 -465h-197l938 1462h938l-33 -153h-565l-100 -469h528l-28 -150h-529l-115 -538h566zM840 621l147 688h-84l-434 -688h371z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1198" d="M150 0zM942 1331q-174 0 -311.5 -97t-218 -284.5t-80.5 -408.5q0 -187 97.5 -298.5t268.5 -111.5q139 0 322 57v-149q-86 -31 -164 -45t-188 -14q-242 0 -380 149.5t-138 407.5q0 261 105.5 485.5t283.5 342.5t403 118q197 0 348 -80l-69 -141q-138 69 -279 69zM758 -276 q0 -98 -81 -157t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM898 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM657 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xca;" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM1084 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM523 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM887 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34 q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xcc;" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM593 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xcd;" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM412 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xce;" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM808 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xcf;" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM265 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM629 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1364" d="M1300 877q0 -261 -105 -461t-300 -308t-457 -108h-352l135 649h-149l32 150h150l141 663h342q276 0 419.5 -149.5t143.5 -435.5zM449 147q202 0 355 91.5t234.5 258.5t81.5 382t-103 325.5t-302 110.5h-178l-111 -516h330l-33 -150h-330l-106 -502h162z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1438" d="M84 0zM1139 0h-181l-460 1223h-6q-32 -221 -74 -418l-172 -805h-162l309 1462h180l459 -1220h6q30 224 72 405l174 815h164zM1102 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5 t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1007 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM821 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1227 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1067 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM664 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM1028 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xd7;" d="M487 723l-319 321l98 99l320 -320l323 320l99 -96l-324 -324l322 -322l-97 -96l-323 320l-320 -318l-96 96z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1475" d="M1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-200 0 -332 96l-129 -160l-112 92l137 170q-106 136 -106 371q0 264 96 482t263.5 336t377.5 118q99 0 178.5 -27t151.5 -84l131 166l114 -92l-149 -184q48 -62 73 -156t25 -201zM874 1333q-157 0 -281 -101 t-192.5 -281t-68.5 -398q0 -135 41 -227l737 919q-90 88 -236 88zM1229 911q0 118 -33 205l-733 -911q91 -74 233 -74q152 0 272.5 97.5t190.5 279.5t70 403z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM991 1579h-104q-61 61 -128.5 154 t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xda;" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM823 1606q56 60 125.5 151.5t106.5 149.5 h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM1217 1579h-103q-57 48 -161 189 q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM643 1716q0 46 28 79.5t74 33.5 q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM1007 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1030" d="M188 0zM537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170zM616 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xde;" horiz-adv-x="1159" d="M1106 829q0 -248 -164 -379t-483 -131h-133l-70 -319h-170l309 1462h170l-53 -256h160q213 0 323.5 -95t110.5 -282zM354 465h135q215 0 328 91t113 267q0 126 -70 181t-215 55h-166z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1182" d="M-133 -492q-69 0 -123 21v143q61 -22 111 -22q65 0 107 47.5t65 157.5l280 1314q43 200 156 299t307 99q162 0 252 -71t90 -196q0 -57 -21 -106.5t-61.5 -95t-178.5 -150.5q-110 -83 -110 -151q0 -56 95 -122q47 -34 101 -87.5t79.5 -110t25.5 -123.5 q0 -175 -108.5 -274.5t-292.5 -99.5q-175 0 -268 71v160q51 -41 118.5 -66.5t129.5 -25.5q113 0 181 58t68 159q0 40 -10.5 71t-33.5 59t-89 83q-88 69 -122.5 124t-34.5 115q0 53 18.5 96t49.5 78.5t124 104.5q80 56 111 87.5t48 65t17 70.5q0 64 -52.5 100.5t-141.5 36.5 q-119 0 -186 -62.5t-95 -190.5l-274 -1303q-40 -189 -121 -276t-211 -87z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM824 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM600 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM1005 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM856 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM454 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM818 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM951 1456q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM847 1454q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1669" d="M1165 -20q-108 0 -189.5 39.5t-121.5 119.5l-31 -139h-114l26 209h-8q-109 -132 -191.5 -180.5t-177.5 -48.5q-122 0 -191 99t-69 269q0 206 70.5 385t191.5 281t263 102q82 0 145 -48.5t102 -143.5h11l67 172h109l-31 -146q123 166 332 166q119 0 192.5 -68t73.5 -184 q0 -182 -166.5 -283.5t-472.5 -101.5h-39l-4 -80q0 -131 62.5 -204.5t193.5 -73.5q55 0 116.5 16.5t178.5 67.5v-150q-164 -75 -328 -75zM412 119q95 0 188.5 91.5t153 240.5t59.5 299q0 103 -45.5 164t-122.5 61q-99 0 -187 -86.5t-138 -231.5t-50 -309q0 -114 37 -171.5 t105 -57.5zM1325 973q-117 0 -211 -94.5t-141 -260.5h14q226 0 348.5 58.5t122.5 169.5q0 61 -35 94t-98 33z" />
-<glyph unicode="&#xe7;" horiz-adv-x="922" d="M98 0zM506 -20q-194 0 -301 107t-107 302q0 200 74 369t204.5 263.5t293.5 94.5q137 0 268 -51l-47 -141q-120 51 -219 51q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -128 66.5 -199t183.5 -71q72 0 136 20t126 47v-143q-124 -63 -276 -63zM592 -276q0 -98 -81 -157 t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM777 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM585 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xea;" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM966 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM413 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM777 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34 q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xec;" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM492 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xed;" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM324 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xee;" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM708 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xef;" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM161 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM525 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1165" d="M676 1343q-66 58 -146 113l95 117q118 -84 188 -154l260 146l64 -105l-240 -133q87 -115 126.5 -240.5t39.5 -269.5q0 -253 -71.5 -447t-203 -292t-311.5 -98q-182 0 -284.5 104t-102.5 289q0 160 67.5 298t187 217t267.5 79q105 0 181.5 -45.5t111.5 -124.5l6 2v17 q0 136 -36.5 240t-110.5 197l-270 -149l-56 108zM487 121q107 0 190 56t134 168t51 226q0 118 -65.5 187t-178.5 69q-109 0 -189 -57.5t-123.5 -161t-43.5 -231.5q0 -126 57.5 -191t167.5 -65z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1182" d="M59 0zM729 0l148 692q20 104 20 144q0 63 -35.5 101t-113.5 38q-89 0 -173.5 -60t-149 -171t-97.5 -269l-101 -475h-168l234 1096h139l-22 -203h10q96 122 185.5 172.5t185.5 50.5q127 0 200.5 -69.5t73.5 -194.5q0 -79 -23 -180l-143 -672h-170zM871 1243 q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM798 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM589 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM997 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM844 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM433 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM797 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xf7;" d="M127 651v142h920v-142h-920zM475 373q0 121 111 121q53 0 82.5 -30.5t29.5 -90.5q0 -58 -30 -89.5t-82 -31.5t-81.5 31t-29.5 90zM475 1071q0 121 111 121q53 0 82.5 -30.5t29.5 -90.5q0 -58 -30 -89.5t-82 -31.5t-81.5 31t-29.5 90z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1149" d="M1047 705q0 -189 -69.5 -360t-191.5 -266t-276 -95q-146 0 -246 65l-98 -125l-105 82l109 135q-68 103 -68 265q0 194 73.5 361t195.5 255t272 88q146 0 252 -68l104 129l105 -79l-119 -129q62 -97 62 -258zM647 971q-108 0 -195.5 -73t-137.5 -202t-50 -280 q0 -92 17 -137l518 645q-54 47 -152 47zM885 688q0 84 -13 119l-514 -641q57 -45 158 -45q103 0 188.5 71.5t133 200.5t47.5 295z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM800 1241h-104q-61 61 -128.5 154t-95.5 153v21 h181q43 -136 147 -303v-25z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM636 1268q56 60 125.5 151.5t106.5 149.5h190 v-21q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM1024 1241h-103q-57 48 -161 189 q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM457 1378q0 46 28 79.5t74 33.5q78 0 78 -80 q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM821 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#xfd;" horiz-adv-x="946" d="M0 0zM98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136zM500 1268q56 60 125.5 151.5t106.5 149.5h190v-21 q-38 -49 -140 -151t-177 -156h-105v27z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1182" d="M545 -20q-98 0 -172 51t-113 139h-10q-8 -104 -25 -176l-102 -486h-166l432 2048h168q-95 -441 -115 -522t-39 -149h9q101 125 189 177t183 52q139 0 218 -97.5t79 -273.5q0 -212 -69 -389t-191 -275.5t-276 -98.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295 q0 -110 55.5 -168.5t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" />
-<glyph unicode="&#xff;" horiz-adv-x="946" d="M0 0zM98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136zM335 1378q0 46 28 79.5t74 33.5q78 0 78 -80 q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM699 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" />
-<glyph unicode="&#x131;" horiz-adv-x="520" d="M227 0h-168l234 1096h168z" />
-<glyph unicode="&#x152;" horiz-adv-x="1751" d="M1524 0h-674q-78 -20 -158 -20q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q152 0 237 -23h709l-31 -153h-565l-100 -469h528l-31 -150h-528l-115 -538h565zM696 131q69 0 123 19l246 1161q-76 22 -191 22q-157 0 -281 -101t-192.5 -281t-68.5 -398 q0 -199 98 -310.5t266 -111.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1769" d="M1251 -20q-270 0 -356 225q-69 -107 -171.5 -164t-225.5 -57q-184 0 -292 114t-108 308q0 193 75 360t201 255.5t281 88.5q270 0 359 -225q75 109 177.5 170t221.5 61q139 0 217 -65.5t78 -186.5q0 -183 -164.5 -284t-468.5 -101h-41l-4 -80q0 -131 61.5 -204.5 t190.5 -73.5q75 0 145 24.5t150 59.5v-150q-162 -75 -326 -75zM649 969q-109 0 -196 -73t-135 -202t-48 -284q0 -141 62 -214t172 -73q177 0 278 160.5t101 427.5q0 124 -59.5 191t-174.5 67zM1413 973q-125 0 -220.5 -94.5t-139.5 -260.5h18q231 0 351 61t120 177 q0 48 -32 82.5t-97 34.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1030" d="M188 0zM537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170zM452 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM816 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22 t-23.5 62z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1135" d="M1014 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M989 1456q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM885 1454q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1135" d="M838 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" />
-<glyph unicode="&#x2011;" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" />
-<glyph unicode="&#x2012;" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" />
-<glyph unicode="&#x2013;" horiz-adv-x="983" d="M55 469l35 160h823l-34 -160h-824z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1966" d="M55 469l35 160h1806l-34 -160h-1807z" />
-<glyph unicode="&#x2018;" horiz-adv-x="348" d="M129 961l-6 22q98 211 270 479h127q-147 -345 -203 -501h-188z" />
-<glyph unicode="&#x2019;" horiz-adv-x="348" d="M516 1462l8 -22q-40 -91 -111 -218.5t-159 -260.5h-129q134 298 203 501h188z" />
-<glyph unicode="&#x201a;" horiz-adv-x="492" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187z" />
-<glyph unicode="&#x201c;" horiz-adv-x="719" d="M500 961l-8 22q80 181 272 479h127q-162 -379 -203 -501h-188zM129 961l-6 22q98 211 270 479h127q-147 -345 -203 -501h-188z" />
-<glyph unicode="&#x201d;" horiz-adv-x="719" d="M516 1462l8 -22q-40 -91 -111 -218.5t-159 -260.5h-129q134 298 203 501h188zM885 1462l10 -22q-94 -206 -274 -479h-127q57 126 115.5 272.5t86.5 228.5h189z" />
-<glyph unicode="&#x201e;" horiz-adv-x="858" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187zM659 238l9 -23q-95 -205 -271 -479h-129q140 316 203 502h188z" />
-<glyph unicode="&#x2022;" horiz-adv-x="774" d="M199 684q0 145 73.5 231t198.5 86q92 0 139 -49t47 -141q0 -141 -74 -230t-202 -89q-89 0 -135.5 49.5t-46.5 142.5z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1563" d="M43 0zM563 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM1085 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM43 74q0 77 40.5 122.5 t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="580" d="M88 578l391 380l78 -81l-297 -334l172 -381l-113 -49l-231 436v29z" />
-<glyph unicode="&#x203a;" horiz-adv-x="580" d="M492 496l-392 -381l-77 82l296 333l-172 381l113 50l232 -437v-28z" />
-<glyph unicode="&#x2044;" horiz-adv-x="268" d="M752 1462l-1086 -1462h-153l1085 1462h154z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="717" d="M713 788h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM481 905q69 322 90 395q-20 -36 -110 -149l-205 -246h225z" />
-<glyph unicode="&#x20ac;" d="M928 1329q-140 0 -254 -99t-189 -298h426l-26 -133h-441q-21 -65 -32 -164h381l-29 -131h-361q0 -373 297 -373q123 0 256 55v-147q-127 -59 -278 -59q-212 0 -328.5 133.5t-116.5 378.5v12h-170l27 131h154q8 80 30 164h-151l27 133h159q97 267 259.5 408t369.5 141 q89 0 160 -21.5t141 -70.5l-80 -138q-113 78 -231 78z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1534" d="M438 741h-121v617h-196v104h516v-104h-199v-617zM1014 741l-189 551h-6q4 -52 4 -121v-430h-118v721h180l182 -557l193 557h170v-721h-121v430q0 73 4 121h-6l-197 -551h-96z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1095" d="M0 1095h1095v-1095h-1095v1095z" />
-<glyph horiz-adv-x="1182" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-Italic-webfont.woff b/doc/fonts/OpenSans-Italic-webfont.woff
deleted file mode 100644
index ff652e64356b538c001423b6aedefcf1ee66cd17..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23188
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
V0sn=t1dXu;07L)*QLkt0007vJ)35*l

diff --git a/doc/fonts/OpenSans-Light-webfont.eot b/doc/fonts/OpenSans-Light-webfont.eot
deleted file mode 100644
index 14868406aa7d728a88d63963f119635813b5d30e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19514
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

diff --git a/doc/fonts/OpenSans-Light-webfont.svg b/doc/fonts/OpenSans-Light-webfont.svg
deleted file mode 100644
index 11a472c..0000000
--- a/doc/fonts/OpenSans-Light-webfont.svg
+++ /dev/null
@@ -1,1831 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sanslight" horiz-adv-x="1169" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1077" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM895 0h-99v1087h99v-1087zM782 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71 t-48.5 -26q-63 0 -63 97z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1077" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM895 0h-99v1556h99v-1556z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1692" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1200 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5 q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1510 0h-99v1087h99v-1087zM1397 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1692" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1200 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5 q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1510 0h-99v1556h99v-1556z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="492" d="M276 377h-61l-29 1085h119zM164 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
-<glyph unicode="&#x22;" horiz-adv-x="723" d="M260 1462l-33 -528h-61l-33 528h127zM590 1462l-33 -528h-61l-33 528h127z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M967 928l-76 -398h303v-79h-320l-86 -451h-90l88 451h-360l-86 -451h-88l86 451h-283v79h299l76 398h-297v80h311l86 454h91l-89 -454h365l88 454h86l-88 -454h285v-80h-301zM440 530h363l78 398h-363z" />
-<glyph unicode="$" d="M991 440q0 -133 -99 -217t-274 -106v-236h-81v232q-92 2 -200.5 22.5t-172.5 50.5v103q75 -36 179.5 -61t193.5 -25v508q-145 44 -215 88t-102 104t-32 146q0 124 94.5 208.5t254.5 104.5v192h81v-190q197 -9 351 -72l-33 -90q-141 62 -318 72v-486q213 -66 293 -144 t80 -204zM881 444q0 85 -63 140.5t-200 95.5v-471q122 13 192.5 75t70.5 160zM297 1049q0 -86 57 -141t183 -93v453q-119 -16 -179.5 -76t-60.5 -143z" />
-<glyph unicode="%" horiz-adv-x="1653" d="M211 1026q0 -186 45 -279.5t141 -93.5q193 0 193 373q0 184 -49.5 276.5t-143.5 92.5q-96 0 -141 -92.5t-45 -276.5zM688 1026q0 -226 -75 -343.5t-216 -117.5q-133 0 -208.5 120.5t-75.5 340.5q0 223 72 340t212 117q139 0 215 -120.5t76 -336.5zM1063 438 q0 -185 45 -277.5t141 -92.5q193 0 193 370q0 369 -193 369q-96 0 -141 -91.5t-45 -277.5zM1540 438q0 -226 -74 -343.5t-215 -117.5q-136 0 -211 121.5t-75 339.5q0 225 73.5 341t212.5 116q137 0 213 -120t76 -337zM1280 1462l-811 -1462h-96l811 1462h96z" />
-<glyph unicode="&#x26;" horiz-adv-x="1460" d="M123 371q0 138 73.5 235t274.5 205l-75 82q-66 71 -98 139t-32 142q0 143 95.5 227t256.5 84q155 0 245.5 -81t90.5 -224q0 -105 -70 -192.5t-253 -194.5l452 -457q61 72 104 157t75 201h96q-63 -246 -209 -426l266 -268h-135l-193 197q-92 -90 -164 -131.5t-157.5 -63.5 t-194.5 -22q-209 0 -328.5 103t-119.5 288zM578 70q128 0 234.5 43.5t209.5 146.5l-483 485q-136 -72 -196.5 -122.5t-88 -109.5t-27.5 -138q0 -143 93 -224t258 -81zM373 1176q0 -79 40 -146t152 -174q159 85 221 159t62 169q0 94 -62 152.5t-168 58.5q-114 0 -179.5 -58 t-65.5 -161z" />
-<glyph unicode="'" horiz-adv-x="393" d="M260 1462l-33 -528h-61l-33 528h127z" />
-<glyph unicode="(" horiz-adv-x="557" d="M82 561q0 265 77.5 496t223.5 405h113q-148 -182 -227 -412.5t-79 -486.5q0 -483 304 -887h-111q-147 170 -224 397t-77 488z" />
-<glyph unicode=")" horiz-adv-x="557" d="M475 561q0 -263 -77.5 -490t-223.5 -395h-111q304 404 304 887q0 257 -79 487.5t-227 411.5h113q147 -175 224 -406.5t77 -494.5z" />
-<glyph unicode="*" horiz-adv-x="1128" d="M631 1556l-37 -405l405 104l21 -131l-395 -39l247 -340l-124 -71l-191 379l-180 -379l-125 71l242 340l-390 39l19 131l401 -104l-39 405h146z" />
-<glyph unicode="+" d="M625 764h434v-82h-434v-432h-82v432h-432v82h432v434h82v-434z" />
-<glyph unicode="," horiz-adv-x="440" d="M295 238l12 -21q-75 -265 -174 -481h-65q77 275 110 502h117z" />
-<glyph unicode="-" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
-<glyph unicode="." horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
-<glyph unicode="/" horiz-adv-x="698" d="M674 1462l-545 -1462h-104l544 1462h105z" />
-<glyph unicode="0" d="M1055 735q0 -385 -117.5 -570t-355.5 -185q-229 0 -348 190.5t-119 564.5q0 382 115.5 566t351.5 184q231 0 352 -190.5t121 -559.5zM223 735q0 -340 89 -502.5t270 -162.5q189 0 275.5 168t86.5 497q0 324 -86.5 492t-275.5 168t-274 -168t-85 -492z" />
-<glyph unicode="1" d="M682 0h-98v1065q0 145 12 301q-15 -15 -31 -29t-309 -243l-57 71l397 297h86v-1462z" />
-<glyph unicode="2" d="M1028 0h-915v88l389 406q164 170 230 260t97 172t31 172q0 131 -86 213t-223 82q-183 0 -350 -133l-54 69q183 154 406 154q191 0 300.5 -102t109.5 -281q0 -145 -73.5 -280.5t-268.5 -334.5l-375 -385v-4h782v-96z" />
-<glyph unicode="3" d="M979 1118q0 -136 -85.5 -229t-229.5 -119v-6q176 -22 268 -112t92 -242q0 -205 -139.5 -317.5t-401.5 -112.5q-223 0 -389 83v99q84 -44 188.5 -69t196.5 -25q221 0 332 89.5t111 252.5q0 145 -113.5 223t-333.5 78h-158v96h160q182 0 288.5 86.5t106.5 234.5 q0 122 -86.5 195.5t-226.5 73.5q-109 0 -199 -30.5t-202 -104.5l-49 67q85 71 205 112.5t243 41.5q202 0 312 -95.5t110 -269.5z" />
-<glyph unicode="4" d="M1141 373h-252v-373h-94v373h-752v67l725 1030h121v-1011h252v-86zM795 459v418q0 302 14 507h-8q-20 -37 -123 -188l-516 -737h633z" />
-<glyph unicode="5" d="M537 879q234 0 368.5 -113t134.5 -311q0 -225 -140 -350t-386 -125q-109 0 -207 21.5t-164 61.5v103q108 -55 192 -76.5t179 -21.5q192 0 308 101.5t116 274.5q0 163 -113 256t-307 93q-130 0 -272 -39l-60 39l58 669h704v-96h-610l-45 -516q156 29 244 29z" />
-<glyph unicode="6" d="M131 623q0 285 77.5 479.5t220 288.5t343.5 94q94 0 172 -23v-88q-73 27 -176 27q-247 0 -384.5 -178t-154.5 -518h13q76 98 174 148t207 50q205 0 320.5 -117t115.5 -323q0 -224 -121.5 -353.5t-327.5 -129.5q-222 0 -350.5 169.5t-128.5 473.5zM610 68q164 0 255 103 t91 294q0 168 -90 262t-245 94q-102 0 -189.5 -45t-139.5 -119.5t-52 -152.5q0 -111 49.5 -213.5t134 -162.5t186.5 -60z" />
-<glyph unicode="7" d="M334 0l602 1366h-827v96h946v-73l-604 -1389h-117z" />
-<glyph unicode="8" d="M582 1487q186 0 299.5 -95t113.5 -257q0 -112 -70.5 -198t-228.5 -159q192 -79 270 -173t78 -228q0 -181 -126.5 -289t-339.5 -108q-221 0 -339 101t-118 294q0 131 83 230t257 169q-161 76 -227 160.5t-66 202.5q0 105 53 184.5t148.5 122.5t212.5 43zM223 360 q0 -138 93.5 -214t261.5 -76q164 0 264 80.5t100 218.5q0 124 -78.5 201.5t-302.5 162.5q-184 -71 -261 -157t-77 -216zM580 1397q-141 0 -226.5 -69.5t-85.5 -190.5q0 -70 31.5 -123.5t91 -97t199.5 -101.5q163 63 234 139t71 183q0 120 -84.5 190t-230.5 70z" />
-<glyph unicode="9" d="M1036 842q0 -288 -75.5 -482t-220 -287t-349.5 -93q-104 0 -192 26v86q43 -14 103.5 -21.5t92.5 -7.5q247 0 387 178.5t156 520.5h-12q-73 -96 -174 -147.5t-211 -51.5q-203 0 -316.5 112t-113.5 318q0 220 124.5 356t323.5 136q144 0 252 -75.5t166.5 -221.5t58.5 -346z M559 1397q-158 0 -252 -106.5t-94 -291.5q0 -174 87 -264t249 -90q101 0 188.5 45t139 119.5t51.5 151.5q0 117 -46.5 219t-130 159.5t-192.5 57.5z" />
-<glyph unicode=":" horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
-<glyph unicode=";" horiz-adv-x="487" d="M303 238l12 -21q-75 -265 -174 -481h-65q29 97 62 245.5t48 256.5h117zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
-<glyph unicode="&#x3c;" d="M1059 266l-948 416v61l948 474v-95l-823 -405l823 -355v-96z" />
-<glyph unicode="=" d="M111 885v82h948v-82h-948zM111 477v82h948v-82h-948z" />
-<glyph unicode="&#x3e;" d="M111 362l823 355l-823 405v95l948 -474v-61l-948 -416v96z" />
-<glyph unicode="?" horiz-adv-x="862" d="M293 377v37q0 123 37.5 201t138.5 167l91 79q72 61 103 121t31 138q0 127 -83.5 202t-219.5 75q-79 0 -148 -17.5t-149 -56.5l-37 80q110 48 184.5 64t153.5 16q183 0 288 -98.5t105 -270.5q0 -68 -18 -119t-50.5 -94.5t-78.5 -84t-102 -87.5q-64 -54 -98.5 -98.5 t-50 -93.5t-15.5 -146v-14h-82zM260 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
-<glyph unicode="@" horiz-adv-x="1815" d="M1702 725q0 -228 -90.5 -366t-245.5 -138q-89 0 -144.5 54t-64.5 147h-4q-43 -100 -124 -150.5t-189 -50.5q-148 0 -229 96.5t-81 270.5q0 202 120.5 330.5t314.5 128.5q138 0 286 -41l-22 -464v-30q0 -104 35 -156.5t116 -52.5q103 0 168.5 116.5t65.5 303.5 q0 194 -79 340t-225.5 224.5t-334.5 78.5q-230 0 -405.5 -99.5t-270 -281.5t-94.5 -418q0 -322 167 -497.5t474 -175.5q93 0 188.5 18t231.5 70v-99q-203 -80 -414 -80q-349 0 -544 200.5t-195 557.5q0 256 108.5 460.5t307 317.5t448.5 113q215 0 380.5 -89t255 -254.5 t89.5 -383.5zM633 590q0 -143 55 -215t174 -72q255 0 273 346l16 291q-79 27 -193 27q-149 0 -237 -102.5t-88 -274.5z" />
-<glyph unicode="A" horiz-adv-x="1229" d="M911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174z" />
-<glyph unicode="B" horiz-adv-x="1284" d="M207 1462h401q271 0 398 -92t127 -278q0 -127 -77.5 -211.5t-226.5 -108.5v-6q175 -26 257.5 -110.5t82.5 -235.5q0 -202 -134 -311t-380 -109h-448v1462zM309 811h322q206 0 299.5 68.5t93.5 214.5t-105.5 212t-314.5 66h-295v-561zM309 721v-631h344q406 0 406 330 q0 301 -428 301h-322z" />
-<glyph unicode="C" horiz-adv-x="1272" d="M831 1391q-275 0 -433 -176t-158 -482q0 -313 149 -486t426 -173q184 0 338 47v-90q-145 -51 -362 -51q-308 0 -485 199t-177 556q0 223 84.5 393t243 262.5t368.5 92.5q214 0 383 -80l-41 -92q-160 80 -336 80z" />
-<glyph unicode="D" horiz-adv-x="1446" d="M1317 745q0 -368 -193 -556.5t-567 -188.5h-350v1462h395q350 0 532.5 -183t182.5 -534zM1206 741q0 314 -159.5 472.5t-468.5 158.5h-269v-1282h242q655 0 655 651z" />
-<glyph unicode="E" horiz-adv-x="1130" d="M1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94z" />
-<glyph unicode="F" horiz-adv-x="1028" d="M309 0h-102v1462h801v-94h-699v-620h660v-95h-660v-653z" />
-<glyph unicode="G" horiz-adv-x="1481" d="M782 737h539v-667q-212 -90 -477 -90q-346 0 -530.5 195.5t-184.5 553.5q0 223 91.5 395.5t262 266.5t391.5 94q239 0 429 -88l-41 -92q-190 88 -394 88q-289 0 -458.5 -178.5t-169.5 -481.5q0 -330 161 -496.5t473 -166.5q202 0 343 57v514h-435v96z" />
-<glyph unicode="H" horiz-adv-x="1473" d="M1266 0h-103v719h-854v-719h-102v1462h102v-649h854v649h103v-1462z" />
-<glyph unicode="I" horiz-adv-x="516" d="M207 0v1462h102v-1462h-102z" />
-<glyph unicode="J" horiz-adv-x="506" d="M-33 -369q-92 0 -151 27v88q78 -20 149 -20q242 0 242 264v1472h102v-1462q0 -369 -342 -369z" />
-<glyph unicode="K" horiz-adv-x="1190" d="M1190 0h-125l-561 772l-195 -172v-600h-102v1462h102v-760l162 162l573 598h130l-599 -618z" />
-<glyph unicode="L" horiz-adv-x="1051" d="M207 0v1462h102v-1366h697v-96h-799z" />
-<glyph unicode="M" horiz-adv-x="1767" d="M850 0l-545 1350h-8q8 -124 8 -254v-1096h-98v1462h158l518 -1286h6l518 1286h154v-1462h-103v1108q0 116 12 240h-8l-547 -1348h-65z" />
-<glyph unicode="N" horiz-adv-x="1477" d="M1270 0h-103l-866 1298h-8q12 -232 12 -350v-948h-98v1462h102l865 -1296h6q-9 180 -9 342v954h99v-1462z" />
-<glyph unicode="O" horiz-adv-x="1565" d="M1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483z" />
-<glyph unicode="P" horiz-adv-x="1198" d="M1087 1042q0 -212 -144 -325t-408 -113h-226v-604h-102v1462h358q522 0 522 -420zM309 692h201q247 0 357 81.5t110 264.5q0 169 -104 250.5t-322 81.5h-242v-678z" />
-<glyph unicode="Q" horiz-adv-x="1565" d="M1436 733q0 -294 -126 -486.5t-349 -246.5l333 -348h-166l-282 330l-33 -2h-31q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5 t-401.5 168.5q-261 0 -402.5 -170t-141.5 -483z" />
-<glyph unicode="R" horiz-adv-x="1217" d="M309 637v-637h-102v1462h348q272 0 402 -100.5t130 -302.5q0 -147 -77.5 -248t-235.5 -145l397 -666h-122l-377 637h-363zM309 725h279q185 0 287 82.5t102 243.5q0 167 -100 243t-326 76h-242v-645z" />
-<glyph unicode="S" horiz-adv-x="1116" d="M1014 377q0 -183 -134.5 -290t-357.5 -107q-268 0 -411 59v102q158 -67 403 -67q180 0 285.5 82.5t105.5 216.5q0 83 -35 137.5t-114 99.5t-232 97q-224 77 -309.5 166.5t-85.5 238.5q0 164 128.5 267.5t330.5 103.5q206 0 387 -78l-37 -88q-182 76 -348 76 q-162 0 -258 -75t-96 -204q0 -81 29.5 -133t96.5 -93.5t230 -99.5q171 -59 257 -114.5t125.5 -126t39.5 -170.5z" />
-<glyph unicode="T" horiz-adv-x="1073" d="M588 0h-103v1366h-475v96h1053v-96h-475v-1366z" />
-<glyph unicode="U" horiz-adv-x="1473" d="M1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102z" />
-<glyph unicode="V" horiz-adv-x="1182" d="M1071 1462h111l-547 -1462h-90l-545 1462h109l368 -995q84 -225 113 -338q20 75 79 233z" />
-<glyph unicode="W" horiz-adv-x="1827" d="M1372 0h-84l-321 1128q-40 139 -60 228q-16 -87 -45.5 -200t-322.5 -1156h-86l-402 1462h107l256 -942q15 -57 28 -105.5t23.5 -91t19 -82t15.5 -79.5q24 136 102 413l250 887h113l293 -1018q51 -176 73 -284q13 72 33.5 153t308.5 1149h103z" />
-<glyph unicode="X" horiz-adv-x="1102" d="M1102 0h-117l-432 682l-440 -682h-113l492 762l-447 700h115l395 -626l401 626h109l-453 -698z" />
-<glyph unicode="Y" horiz-adv-x="1081" d="M543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117z" />
-<glyph unicode="Z" horiz-adv-x="1180" d="M1098 0h-1016v76l856 1290h-817v96h954v-76l-858 -1290h881v-96z" />
-<glyph unicode="[" horiz-adv-x="653" d="M602 -324h-428v1786h428v-94h-330v-1597h330v-95z" />
-<glyph unicode="\" horiz-adv-x="698" d="M127 1462l547 -1462h-103l-546 1462h102z" />
-<glyph unicode="]" horiz-adv-x="653" d="M51 -229h330v1597h-330v94h428v-1786h-428v95z" />
-<glyph unicode="^" d="M88 561l465 912h68l460 -912h-100l-395 791l-398 -791h-100z" />
-<glyph unicode="_" horiz-adv-x="842" d="M846 -266h-850v82h850v-82z" />
-<glyph unicode="`" horiz-adv-x="1182" d="M776 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="a" horiz-adv-x="1085" d="M842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5z" />
-<glyph unicode="b" horiz-adv-x="1219" d="M641 1108q228 0 343.5 -143.5t115.5 -419.5q0 -271 -121.5 -418t-341.5 -147q-116 0 -209 48t-147 136h-9l-28 -164h-62v1556h99v-391q0 -88 -4 -162l-3 -85h7q62 98 149.5 144t210.5 46zM639 1018q-192 0 -275 -110t-83 -363v-17q0 -246 86.5 -353t269.5 -107 q178 0 268 124.5t90 354.5q0 471 -356 471z" />
-<glyph unicode="c" horiz-adv-x="973" d="M616 -20q-233 0 -365 147t-132 410q0 270 137 420.5t375 150.5q141 0 270 -49l-27 -88q-141 47 -245 47q-200 0 -303 -123.5t-103 -355.5q0 -220 103 -344.5t288 -124.5q148 0 275 53v-92q-104 -51 -273 -51z" />
-<glyph unicode="d" horiz-adv-x="1219" d="M580 1108q118 0 204 -43t154 -147h6q-6 126 -6 247v391h98v-1556h-65l-25 166h-8q-124 -186 -356 -186q-225 0 -344 140t-119 408q0 282 118 431t343 149zM580 1018q-178 0 -267.5 -125t-89.5 -363q0 -462 359 -462q184 0 270 107t86 353v17q0 252 -84.5 362.5 t-273.5 110.5z" />
-<glyph unicode="e" horiz-adv-x="1124" d="M621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5z" />
-<glyph unicode="f" horiz-adv-x="614" d="M586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86z" />
-<glyph unicode="g" horiz-adv-x="1071" d="M1030 1087v-69l-225 -14q90 -112 90 -246q0 -157 -104.5 -254.5t-280.5 -97.5q-74 0 -104 6q-59 -31 -90 -73t-31 -89q0 -52 39.5 -76t132.5 -24h190q177 0 271 -71.5t94 -211.5q0 -172 -139.5 -265.5t-397.5 -93.5q-205 0 -317.5 79t-112.5 220q0 112 69.5 186 t188.5 101q-49 21 -78.5 59.5t-29.5 88.5q0 109 139 192q-95 39 -148 122.5t-53 191.5q0 163 103.5 261.5t279.5 98.5q107 0 166 -21h348zM150 -184q0 -224 333 -224q428 0 428 273q0 98 -67 142t-217 44h-178q-299 0 -299 -235zM233 748q0 -126 76.5 -195.5t204.5 -69.5 q136 0 208.5 69t72.5 200q0 139 -74.5 208.5t-208.5 69.5q-130 0 -204.5 -74.5t-74.5 -207.5z" />
-<glyph unicode="h" horiz-adv-x="1208" d="M940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1556h99v-495l-5 -139h7q61 98 154 142t231 44q370 0 370 -397v-711h-98z" />
-<glyph unicode="i" horiz-adv-x="463" d="M281 0h-99v1087h99v-1087zM168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" />
-<glyph unicode="j" horiz-adv-x="463" d="M37 -492q-80 0 -135 25v86q69 -20 129 -20q151 0 151 176v1312h99v-1298q0 -135 -63.5 -208t-180.5 -73zM168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" />
-<glyph unicode="k" horiz-adv-x="991" d="M279 477l555 610h120l-428 -464l465 -623h-119l-413 549l-178 -162v-387h-99v1556h99v-780l-7 -299h5z" />
-<glyph unicode="l" horiz-adv-x="463" d="M281 0h-99v1556h99v-1556z" />
-<glyph unicode="m" horiz-adv-x="1808" d="M1540 0v713q0 159 -62 232t-190 73q-167 0 -247 -92t-80 -289v-637h-101v743q0 275 -252 275q-171 0 -249 -99.5t-78 -318.5v-600h-99v1087h82l21 -149h6q45 81 128 125.5t183 44.5q257 0 330 -193h4q53 93 142.5 143t203.5 50q178 0 267 -95t89 -302v-711h-98z" />
-<glyph unicode="n" horiz-adv-x="1208" d="M940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1087h84l19 -149h6q106 170 377 170q370 0 370 -397v-711h-98z" />
-<glyph unicode="o" horiz-adv-x="1200" d="M1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5t-97.5 -349.5z " />
-<glyph unicode="p" horiz-adv-x="1219" d="M647 -20q-251 0 -366 188h-7l3 -84q4 -74 4 -162v-414h-99v1579h84l19 -155h6q112 176 358 176q220 0 335.5 -144.5t115.5 -420.5q0 -268 -121.5 -415.5t-331.5 -147.5zM645 68q167 0 258.5 124t91.5 347q0 479 -346 479q-190 0 -279 -104.5t-89 -340.5v-32 q0 -255 85.5 -364t278.5 -109z" />
-<glyph unicode="q" horiz-adv-x="1219" d="M569 -20q-214 0 -332 142t-118 410q0 275 118 425.5t338 150.5q236 0 353 -174h6l18 153h84v-1579h-98v414q0 122 6 248h-6q-118 -190 -369 -190zM571 68q198 0 282.5 109t84.5 366v12q0 245 -85 354t-271 109q-176 0 -267.5 -124t-91.5 -364q0 -229 89.5 -345.5 t258.5 -116.5z" />
-<glyph unicode="r" horiz-adv-x="797" d="M610 1108q69 0 148 -14l-19 -95q-68 17 -141 17q-139 0 -228 -118t-89 -298v-600h-99v1087h84l10 -196h7q67 120 143 168.5t184 48.5z" />
-<glyph unicode="s" horiz-adv-x="954" d="M856 283q0 -146 -111 -224.5t-315 -78.5q-218 0 -346 67v107q164 -82 346 -82q161 0 244.5 53.5t83.5 142.5q0 82 -66.5 138t-218.5 110q-163 59 -229 101.5t-99.5 96t-33.5 130.5q0 122 102.5 193t286.5 71q176 0 334 -66l-37 -90q-160 66 -297 66q-133 0 -211 -44 t-78 -122q0 -85 60.5 -136t236.5 -114q147 -53 214 -95.5t100.5 -96.5t33.5 -127z" />
-<glyph unicode="t" horiz-adv-x="686" d="M469 68q94 0 164 16v-80q-72 -24 -166 -24q-144 0 -212.5 77t-68.5 242v702h-161v58l161 45l50 246h51v-263h319v-86h-319v-688q0 -125 44 -185t138 -60z" />
-<glyph unicode="u" horiz-adv-x="1208" d="M268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98z" />
-<glyph unicode="v" horiz-adv-x="940" d="M420 0l-420 1087h102l281 -739q56 -142 84 -248h6q41 136 84 250l281 737h102l-420 -1087h-100z" />
-<glyph unicode="w" horiz-adv-x="1481" d="M1051 0l-238 727q-23 74 -59 217h-6l-21 -74l-45 -145l-242 -725h-98l-311 1087h106l174 -630q61 -234 80 -344h6q59 234 86 311l224 663h90l213 -661q72 -235 88 -311h6q8 65 80 348l166 624h100l-295 -1087h-104z" />
-<glyph unicode="x" horiz-adv-x="1020" d="M449 559l-379 528h114l324 -458l321 458h109l-373 -528l400 -559h-115l-342 485l-344 -485h-109z" />
-<glyph unicode="y" horiz-adv-x="940" d="M0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5z" />
-<glyph unicode="z" horiz-adv-x="944" d="M858 0h-776v63l645 936h-598v88h727v-63l-649 -936h651v-88z" />
-<glyph unicode="{" horiz-adv-x="723" d="M389 -27q0 -102 59.5 -152.5t202.5 -53.5v-91q-195 0 -277.5 75t-82.5 231v337q0 205 -230 209v80q122 2 176 51t54 148v350q0 299 360 305v-90q-138 -5 -200 -58t-62 -157v-305q0 -130 -44 -194t-142 -85v-8q97 -20 141.5 -83.5t44.5 -186.5v-322z" />
-<glyph unicode="|" horiz-adv-x="1108" d="M508 1561h92v-2067h-92v2067z" />
-<glyph unicode="}" horiz-adv-x="723" d="M334 295q0 123 44.5 186.5t141.5 83.5v8q-97 20 -141.5 84t-44.5 195v305q0 103 -61.5 156.5t-200.5 58.5v90q174 0 267 -77.5t93 -227.5v-350q0 -100 54.5 -148.5t175.5 -50.5v-80q-230 -4 -230 -209v-337q0 -155 -82.5 -230.5t-277.5 -75.5v91q141 2 201.5 52.5 t60.5 153.5v322z" />
-<glyph unicode="~" d="M334 745q-49 0 -108 -30.5t-115 -89.5v94q108 110 233 110q61 0 115 -13.5t155 -57.5q126 -58 220 -58q56 0 109.5 30.5t115.5 94.5v-96q-48 -49 -104.5 -81t-129.5 -32q-116 0 -270 72q-124 57 -221 57z" />
-<glyph unicode="&#xa1;" horiz-adv-x="492" d="M215 711h61l29 -1086h-119zM166 1010q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
-<glyph unicode="&#xa2;" d="M602 190q-186 30 -288.5 175t-102.5 380q0 232 102.5 381.5t288.5 182.5v174h82v-166h14q131 0 275 -55l-31 -84q-134 51 -237 51q-187 0 -288.5 -122.5t-101.5 -358.5q0 -225 100.5 -349.5t280.5 -124.5q131 0 267 58v-92q-110 -56 -267 -56h-12v-204h-82v210z" />
-<glyph unicode="&#xa3;" d="M412 676v-256q0 -116 -35 -196t-113 -128h809v-96h-995v84q110 21 171.5 110t61.5 224v258h-211v82h211v297q0 204 98 315t281 111q175 0 330 -68l-35 -86q-157 66 -295 66q-141 0 -209.5 -81t-68.5 -253v-301h411v-82h-411z" />
-<glyph unicode="&#xa4;" d="M991 723q0 -151 -90 -256l139 -141l-59 -60l-137 142q-110 -93 -260 -93q-153 0 -260 93l-138 -142l-59 60l139 141q-90 106 -90 256q0 147 90 258l-139 141l59 60l138 -142q103 93 260 93q155 0 260 -93l137 142l59 -60l-139 -141q90 -111 90 -258zM584 395 q134 0 228.5 95.5t94.5 232.5q0 136 -95 233t-228 97q-134 0 -229 -97t-95 -233t94.5 -232t229.5 -96z" />
-<glyph unicode="&#xa5;" d="M586 666l428 796h110l-432 -788h283v-82h-338v-205h338v-82h-338v-305h-105v305h-337v82h337v205h-337v82h278l-430 788h117z" />
-<glyph unicode="&#xa6;" horiz-adv-x="1108" d="M508 1561h92v-764h-92v764zM508 258h92v-764h-92v764z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1057" d="M145 813q0 83 50.5 152.5t138.5 107.5q-86 47 -125 102t-39 136q0 117 101.5 183.5t275.5 66.5q175 0 336 -64l-35 -80q-91 34 -158.5 47t-144.5 13q-134 0 -205.5 -44.5t-71.5 -119.5q0 -54 25.5 -88.5t85.5 -65.5t188 -74q192 -64 264 -132.5t72 -170.5 q0 -173 -186 -274q86 -42 129 -96t43 -136q0 -135 -113 -207.5t-311 -72.5q-92 0 -171 15t-165 52v95q182 -78 332 -78q162 0 247 49.5t85 140.5q0 55 -25 87.5t-88.5 65.5t-190.5 79q-200 73 -272 141.5t-72 169.5zM246 825q0 -65 31.5 -104t105.5 -75t250 -99 q82 41 126 98t44 121q0 62 -32 102t-108.5 77t-236.5 87q-81 -23 -130.5 -79t-49.5 -128z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1182" d="M336 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM717 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M897 1092q-142 0 -222.5 -94.5t-80.5 -264.5q0 -186 74.5 -275t220.5 -89q84 0 198 43v-88q-102 -45 -208 -45q-187 0 -288.5 115t-101.5 331q0 208 111 332.5t297 124.5q119 0 227 -52l-37 -83q-98 45 -190 45zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100 t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329z " />
-<glyph unicode="&#xaa;" horiz-adv-x="686" d="M512 813l-25 72q-84 -84 -202 -84q-95 0 -151 49t-56 139q0 100 80 151.5t241 59.5l95 4v43q0 77 -38 114.5t-106 37.5q-87 0 -196 -49l-33 73q117 56 231 56q228 0 228 -215v-451h-68zM168 993q0 -54 35 -85t96 -31q90 0 142.5 50t52.5 142v64l-88 -5 q-116 -6 -177 -36.5t-61 -98.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="885" d="M82 543l309 393l62 -43l-254 -363l254 -362l-62 -43l-309 391v27zM442 543l310 393l61 -43l-254 -363l254 -362l-61 -43l-310 391v27z" />
-<glyph unicode="&#xac;" d="M1038 764v-494h-82v412h-845v82h927z" />
-<glyph unicode="&#xad;" horiz-adv-x="659" d="M92 512zM92 512v82h475v-82h-475z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M709 731h112q91 0 143 46.5t52 135.5q0 172 -197 172h-110v-354zM1120 918q0 -79 -38.5 -139.5t-110.5 -94.5l237 -393h-121l-210 360h-168v-360h-101v880h211q143 0 222 -62t79 -191zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377 q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329z" />
-<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M1030 1556h-1036v82h1036v-82z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M139 1184q0 132 86.5 215.5t212.5 83.5t212.5 -83.5t86.5 -215.5t-86.5 -215.5t-212.5 -83.5q-130 0 -214.5 83t-84.5 216zM229 1184q0 -91 61 -154t148 -63q86 0 147.5 62t61.5 155q0 92 -60 154.5t-149 62.5q-90 0 -149.5 -64t-59.5 -153z" />
-<glyph unicode="&#xb1;" d="M111 1zM111 1v82h948v-82h-948zM625 764h434v-82h-434v-432h-82v432h-432v82h432v434h82v-434z" />
-<glyph unicode="&#xb2;" horiz-adv-x="688" d="M629 586h-576v78l242 237q125 121 172 193t47 149q0 71 -46.5 112.5t-123.5 41.5q-108 0 -217 -82l-49 65q119 103 270 103q124 0 194 -63.5t70 -174.5q0 -47 -13 -89t-40 -85.5t-68.5 -90t-308.5 -306.5h447v-88z" />
-<glyph unicode="&#xb3;" horiz-adv-x="688" d="M616 1260q0 -78 -44 -131.5t-117 -75.5q186 -45 186 -211q0 -130 -88.5 -201.5t-247.5 -71.5q-144 0 -264 60v88q136 -62 266 -62q115 0 174.5 49t59.5 136q0 83 -59.5 122t-178.5 39h-131v84h135q105 0 158 43.5t53 120.5q0 67 -47 107.5t-127 40.5q-128 0 -246 -78 l-47 70q130 94 293 94q127 0 199.5 -60t72.5 -163z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1182" d="M393 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1221" d="M281 1087v-704q0 -164 69 -238.5t213 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-50 -77 -150 -123.5t-217 -46.5q-99 0 -167.5 27.5t-119.5 84.5q5 -92 5 -170v-414h-99v1579h99z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1106 -260h-100v1722h-228v-1722h-100v819q-64 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h543v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="487" d="M162 623zM162 721q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
-<glyph unicode="&#xb8;" horiz-adv-x="420" d="M393 -291q0 -100 -67.5 -150.5t-188.5 -50.5q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" />
-<glyph unicode="&#xb9;" horiz-adv-x="688" d="M350 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77z" />
-<glyph unicode="&#xba;" horiz-adv-x="739" d="M670 1141q0 -161 -80 -250.5t-223 -89.5t-220 86t-77 254q0 162 78 250t223 88q142 0 220.5 -87t78.5 -251zM160 1141q0 -264 209 -264t209 264q0 131 -50 194.5t-159 63.5t-159 -63.5t-50 -194.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="885" d="M803 518l-309 -393l-62 43l254 362l-254 363l62 43l309 -391v-27zM442 518l-309 -393l-61 43l254 362l-254 363l61 43l309 -391v-27z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1516" d="M59 0zM333 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77zM1148 1462l-811 -1462h-94l811 1462h94zM1392 242h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM1173 320v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1516" d="M11 0zM285 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77zM1073 1462l-811 -1462h-94l811 1462h94zM1403 1h-576v78l242 237q125 121 172 193t47 149q0 71 -46.5 112.5t-123.5 41.5q-108 0 -217 -82l-49 65q119 103 270 103q124 0 194 -63.5t70 -174.5 q0 -47 -13 -89t-40 -85.5t-68.5 -90t-308.5 -306.5h447v-88z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1516" d="M41 0zM616 1260q0 -78 -44 -131.5t-117 -75.5q186 -45 186 -211q0 -130 -88.5 -201.5t-247.5 -71.5q-144 0 -264 60v88q136 -62 266 -62q115 0 174.5 49t59.5 136q0 83 -59.5 122t-178.5 39h-131v84h135q105 0 158 43.5t53 120.5q0 67 -47 107.5t-127 40.5 q-128 0 -246 -78l-47 70q130 94 293 94q127 0 199.5 -60t72.5 -163zM1300 1462l-811 -1462h-94l811 1462h94zM1495 242h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM1276 320v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" />
-<glyph unicode="&#xbf;" horiz-adv-x="862" d="M569 711v-37q0 -125 -39.5 -204.5t-136.5 -164.5l-90 -79q-73 -61 -104 -120.5t-31 -138.5q0 -124 82 -200t221 -76q125 0 233 46l64 27l37 -79q-111 -48 -185.5 -64t-152.5 -16q-184 0 -288.5 99t-104.5 269q0 70 20 124t58.5 102t171.5 159q64 53 98.5 98.5t49.5 94 t15 145.5v15h82zM440 1010q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM720 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM504 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM328 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM784 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59 q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM367 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM748 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM836 1610q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM482 1610q0 -66 37.5 -103.5t99.5 -37.5 t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5q-62 0 -99.5 -38t-37.5 -101z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1653" d="M1528 0h-717v516h-475l-227 -516h-111l653 1462h877v-94h-615v-553h576v-94h-576v-627h615v-94zM377 608h434v760h-100z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1272" d="M129 0zM831 1391q-275 0 -433 -176t-158 -482q0 -313 149 -486t426 -173q184 0 338 47v-90q-145 -51 -362 -51q-308 0 -485 199t-177 556q0 223 84.5 393t243 262.5t368.5 92.5q214 0 383 -80l-41 -92q-160 80 -336 80zM911 -291q0 -100 -67.5 -150.5t-188.5 -50.5 q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM697 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM463 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xca;" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM315 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM354 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM735 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xcc;" horiz-adv-x="516" d="M0 0zM207 0v1462h102v-1462h-102zM320 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xcd;" horiz-adv-x="516" d="M191 0zM207 0v1462h102v-1462h-102zM191 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xce;" horiz-adv-x="516" d="M0 0zM207 0v1462h102v-1462h-102zM-32 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xcf;" horiz-adv-x="516" d="M5 0zM207 0v1462h102v-1462h-102zM5 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM386 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1466" d="M1317 745q0 -368 -193 -556.5t-567 -188.5h-350v678h-160v94h160v690h395q350 0 532.5 -183t182.5 -534zM1206 741q0 314 -159.5 472.5t-468.5 158.5h-269v-600h406v-94h-406v-588h242q655 0 655 651z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1477" d="M207 0zM1270 0h-103l-866 1298h-8q12 -232 12 -350v-948h-98v1462h102l865 -1296h6q-9 180 -9 342v954h99v-1462zM897 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59 q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM885 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM686 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM492 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM940 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM529 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM910 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xd7;" d="M584 780l409 408l58 -58l-408 -407l406 -408l-58 -57l-407 408l-406 -408l-57 57l405 408l-407 407l57 58z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1565" d="M1436 733q0 -348 -174 -550.5t-480 -202.5q-236 0 -395 120l-86 -120l-74 59l90 127q-188 200 -188 569q0 349 175.5 549.5t479.5 200.5q232 0 392 -121l108 152l72 -60l-111 -153q191 -207 191 -570zM1325 733q0 315 -139 486l-742 -1037q133 -106 338 -106 q264 0 403.5 170t139.5 487zM240 733q0 -312 139 -483l739 1034q-133 102 -334 102q-261 0 -402.5 -170t-141.5 -483z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM833 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xda;" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM633 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM444 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207 q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM481 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM862 1727q0 46 15.5 66 t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1081" d="M0 0zM543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117zM434 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xde;" horiz-adv-x="1198" d="M1087 778q0 -212 -144 -325t-408 -113h-226v-340h-102v1462h102v-264h256q522 0 522 -420zM309 428h201q247 0 357 81.5t110 264.5q0 169 -104 250.5t-322 81.5h-242v-678z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1194" d="M961 1284q0 -139 -139 -250q-81 -64 -110.5 -100.5t-29.5 -75.5q0 -44 14.5 -68t51.5 -57t102 -78q106 -75 151.5 -124.5t68 -103t22.5 -120.5q0 -156 -88 -241.5t-246 -85.5q-95 0 -174.5 18.5t-126.5 48.5v107q65 -38 148.5 -62t152.5 -24q114 0 174.5 54.5t60.5 160.5 q0 83 -39 144t-149 136q-127 87 -175 147t-48 146q0 60 32.5 110t106.5 108q74 57 106.5 105.5t32.5 106.5q0 93 -70 143t-202 50q-145 0 -226 -69t-81 -196v-1214h-99v1206q0 173 103.5 267t292.5 94q188 0 285.5 -72.5t97.5 -210.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM638 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM422 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM251 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM697 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5 h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM282 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM663 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM759 1456q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM405 1456q0 -66 37.5 -103.5t99.5 -37.5t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5 q-62 0 -99.5 -38t-37.5 -101z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1731" d="M1243 -20q-295 0 -397 256q-68 -133 -168 -194.5t-252 -61.5q-156 0 -242 82.5t-86 226.5q0 154 125 243t377 97l201 6v72q0 155 -61.5 234t-198.5 79q-148 0 -305 -84l-37 86q173 84 346 84q261 0 325 -211q111 213 347 213q184 0 289.5 -134.5t105.5 -363.5v-80h-715 q0 -460 348 -460q85 0 150 12t174 57v-90q-92 -41 -165 -55t-161 -14zM434 70q169 0 266 99.5t97 276.5v107l-187 -8q-219 -11 -313 -71.5t-94 -188.5q0 -102 61 -158.5t170 -56.5zM1217 1020q-284 0 -314 -402h604q0 188 -77.5 295t-212.5 107z" />
-<glyph unicode="&#xe7;" horiz-adv-x="973" d="M119 0zM616 -20q-233 0 -365 147t-132 410q0 270 137 420.5t375 150.5q141 0 270 -49l-27 -88q-141 47 -245 47q-200 0 -303 -123.5t-103 -355.5q0 -220 103 -344.5t288 -124.5q148 0 275 53v-92q-104 -51 -273 -51zM723 -291q0 -100 -67.5 -150.5t-188.5 -50.5 q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM685 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM452 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xea;" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM290 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM331 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM712 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xec;" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM349 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xed;" horiz-adv-x="463" d="M107 0zM281 0h-99v1087h99v-1087zM107 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xee;" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM-58 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xef;" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM-21 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM360 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1174" d="M1055 559q0 -276 -124 -427.5t-349 -151.5q-214 0 -339.5 130t-125.5 361q0 228 126.5 357.5t342.5 129.5q108 0 187.5 -33t148.5 -96l4 2q-64 270 -269 459l-270 -157l-49 77l244 146q-86 62 -199 119l45 81q147 -69 248 -145l225 137l49 -84l-202 -121 q154 -151 230.5 -353t76.5 -431zM950 557q0 146 -97 228.5t-267 82.5q-185 0 -275 -100.5t-90 -304.5q0 -186 94.5 -289.5t268.5 -103.5q179 0 272.5 123t93.5 364z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1208" d="M182 0zM940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1087h84l19 -149h6q106 170 377 170q370 0 370 -397v-711h-98zM779 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5 t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM718 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM499 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM309 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM761 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM346 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM727 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xf7;" d="M111 682v82h948v-82h-948zM504 1075q0 99 80 99q82 0 82 -99q0 -52 -23.5 -75t-58.5 -23q-34 0 -57 23t-23 75zM504 371q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1200" d="M1081 545q0 -266 -129 -415.5t-356 -149.5q-173 0 -291 98l-86 -113l-72 58l93 120q-121 153 -121 402q0 266 129 414.5t354 148.5q179 0 301 -104l96 124l74 -55l-104 -137q112 -147 112 -391zM223 545q0 -200 78 -322l543 705q-98 90 -246 90q-180 0 -277.5 -123.5 t-97.5 -349.5zM977 545q0 190 -72 309l-543 -702q94 -82 238 -82q180 0 278.5 125.5t98.5 349.5z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM687 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM495 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM313 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70 v16z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM350 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM731 1389q0 46 15.5 66t47.5 20q64 0 64 -86 t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#xfd;" horiz-adv-x="940" d="M0 0zM0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5zM361 1257q73 79 144.5 171.5t97.5 140.5h141v-17 q-36 -52 -122.5 -138t-190.5 -173h-70v16z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1219" d="M281 918q114 190 368 190q220 0 335.5 -144.5t115.5 -420.5q0 -268 -121.5 -415.5t-331.5 -147.5q-251 0 -366 188h-7l3 -84q4 -74 4 -162v-414h-99v2048h99v-391l-7 -247h7zM645 68q167 0 258.5 124t91.5 347q0 479 -348 479q-193 0 -279.5 -105t-86.5 -354v-18 q0 -255 85.5 -364t278.5 -109z" />
-<glyph unicode="&#xff;" horiz-adv-x="940" d="M0 0zM0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5zM214 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86 q-63 0 -63 86zM595 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#x131;" horiz-adv-x="463" d="M281 0h-99v1087h99v-1087z" />
-<glyph unicode="&#x152;" horiz-adv-x="1839" d="M1714 0h-756q-76 -16 -176 -16q-305 0 -479 200t-174 551q0 347 174.5 545.5t480.5 198.5q78 0 183 -17h747v-94h-655v-553h616v-94h-616v-627h655v-94zM782 80q109 0 174 18v1266q-62 16 -172 16q-262 0 -403 -167.5t-141 -479.5q0 -315 140.5 -484t401.5 -169z" />
-<glyph unicode="&#x153;" horiz-adv-x="1942" d="M1438 -20q-156 0 -266.5 67.5t-165.5 198.5q-59 -128 -158 -197t-252 -69q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q151 0 251 -70t157 -209q110 279 399 279q192 0 303 -134t111 -364v-80h-762q2 -230 100.5 -345t276.5 -115q93 0 163.5 13t178.5 56 v-90q-92 -40 -170 -54.5t-172 -14.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5q174 0 265 122.5t91 352.5q0 224 -93 348.5t-265 124.5q-180 0 -277.5 -123.5t-97.5 -349.5zM1409 1020q-155 0 -242 -104t-102 -298h653q0 189 -82 295.5t-227 106.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1081" d="M0 0zM543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117zM288 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM669 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1182" d="M299 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M805 1456q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM451 1456q0 -66 37.5 -103.5t99.5 -37.5t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5q-62 0 -99.5 -38t-37.5 -101z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1182" d="M780 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
-<glyph unicode="&#x2011;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
-<glyph unicode="&#x2012;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M82 512v82h860v-82h-860z" />
-<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M82 512v82h1884v-82h-1884z" />
-<glyph unicode="&#x2018;" horiz-adv-x="297" d="M41 961l-12 20q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117z" />
-<glyph unicode="&#x2019;" horiz-adv-x="297" d="M256 1462l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117z" />
-<glyph unicode="&#x201a;" horiz-adv-x="451" d="M68 0zM295 238l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117z" />
-<glyph unicode="&#x201c;" horiz-adv-x="614" d="M358 961l-12 20q34 120 83 255t91 226h66q-30 -98 -63 -248.5t-48 -252.5h-117zM41 961l-12 20q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117z" />
-<glyph unicode="&#x201d;" horiz-adv-x="614" d="M256 1462l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117zM573 1462l13 -20q-36 -128 -85 -261t-89 -220h-66q30 98 63 248.5t48 252.5h116z" />
-<glyph unicode="&#x201e;" horiz-adv-x="768" d="M68 0zM295 238l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117zM612 238l13 -20q-36 -128 -85 -261t-89 -220h-66q30 98 63 248.5t48 252.5h116z" />
-<glyph unicode="&#x2022;" horiz-adv-x="770" d="M231 748q0 89 40.5 134.5t113.5 45.5t113.5 -47t40.5 -133q0 -85 -41 -133t-113 -48t-113 47t-41 134z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1466" d="M162 0zM162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM651 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM1141 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="524" d="M82 543l309 393l62 -43l-254 -363l254 -362l-62 -43l-309 391v27z" />
-<glyph unicode="&#x203a;" horiz-adv-x="524" d="M442 518l-309 -393l-61 43l254 362l-254 363l61 43l309 -391v-27z" />
-<glyph unicode="&#x2044;" horiz-adv-x="246" d="M573 1462l-811 -1462h-94l811 1462h94z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="688" d="M657 827h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM438 905v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" />
-<glyph unicode="&#x20ac;" d="M803 1397q-174 0 -288 -125.5t-155 -364.5h502v-82h-510l-4 -104v-24q0 -65 4 -87h449v-82h-443q30 -217 147.5 -338.5t301.5 -121.5q148 0 287 65v-94q-81 -34 -150.5 -46.5t-140.5 -12.5q-228 0 -367.5 140t-181.5 408h-180v82h172q-4 38 -4 113l4 102h-172v82h184 q39 272 183 425t362 153q88 0 161 -17t148 -57l-39 -86q-132 72 -270 72z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1485" d="M313 741h-86v643h-217v78h522v-78h-219v-643zM913 741l-221 609h-6l4 -201v-408h-82v721h125l221 -606l224 606h125v-721h-86v398l4 207h-7l-227 -605h-74z" />
-<glyph unicode="&#x2212;" d="M111 682v82h948v-82h-948z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1085" d="M0 1085h1085v-1085h-1085v1085z" />
-<glyph horiz-adv-x="1219" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-Light-webfont.woff b/doc/fonts/OpenSans-Light-webfont.woff
deleted file mode 100644
index e786074813a27d0a7a249047832988d5bf0fe756..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22248
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
R1dXu;07L)*QLkr2008v)*B$@>

diff --git a/doc/fonts/OpenSans-LightItalic-webfont.eot b/doc/fonts/OpenSans-LightItalic-webfont.eot
deleted file mode 100644
index 8f445929ffb03b50e98c2a2f7d831a0cb1b276a2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20535
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
Z%0#`NexefPFV?Xj51H#Y#AC7WXn+Jg($4?@

diff --git a/doc/fonts/OpenSans-LightItalic-webfont.svg b/doc/fonts/OpenSans-LightItalic-webfont.svg
deleted file mode 100644
index 431d7e3..0000000
--- a/doc/fonts/OpenSans-LightItalic-webfont.svg
+++ /dev/null
@@ -1,1835 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sanslight_italic" horiz-adv-x="1128" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb00;" horiz-adv-x="1155" d="M-131 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76q73 0 166 -31 l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1040" d="M0 0zM739 0h-98l231 1087h96zM915 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31 l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1042" d="M0 0zM737 0h-94l334 1556h94zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248 l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1616" d="M0 0zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76 q73 0 166 -31l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z M1315 0h-98l231 1087h96zM1491 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1626" d="M0 0zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76 q73 0 166 -31l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z M1321 0h-94l334 1556h94z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="502" d="M248 377h-62l203 1085h119zM80 57q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-68 -34.5q-67 0 -67 73z" />
-<glyph unicode="&#x22;" horiz-adv-x="721" d="M455 1462l-146 -528h-61l80 528h127zM784 1462l-145 -528h-61l79 528h127z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M389 530l119 398h-297l8 80h311l134 454h90l-136 -454h365l135 454h86l-135 -454h285l-8 -80h-302l-118 -398h303l-8 -79h-320l-133 -451h-90l135 451h-360l-134 -451h-88l134 451h-283l8 79h299zM475 530h363l120 398h-362z" />
-<glyph unicode="$" d="M928 467q0 -151 -110.5 -243t-297.5 -103l-53 -240h-82l51 240q-79 2 -158 18t-137 43v94q65 -34 153.5 -53.5t160.5 -19.5l110 512q-110 53 -153 91t-66.5 87.5t-23.5 116.5q0 155 105.5 250.5t272.5 99.5l41 192h80l-41 -192q149 -5 277 -68l-35 -78q-110 61 -256 70 l-109 -514q124 -60 172.5 -99.5t73.5 -88.5t25 -115zM537 203q142 7 223.5 74.5t81.5 183.5q0 76 -48 129.5t-157 97.5zM686 1284q-134 -9 -205 -80t-71 -186q0 -78 37 -128.5t137 -96.5z" />
-<glyph unicode="%" horiz-adv-x="1556" d="M1458 1462l-1139 -1462h-106l1135 1462h110zM1520 612q0 -175 -50 -327t-136 -230t-197 -78q-112 0 -172 75.5t-60 223.5q0 160 52 312t138 229.5t193 77.5q121 0 176.5 -71.5t55.5 -211.5zM1284 821q-80 0 -146.5 -72.5t-106.5 -202.5t-40 -263q0 -116 41 -174t113 -58 q130 0 209.5 166.5t79.5 386.5q0 109 -36 163t-114 54zM760 1198q0 -175 -50 -327t-136 -230t-197 -78q-112 0 -172 75.5t-60 223.5q0 160 52 312t138 229.5t193 77.5q232 0 232 -283zM524 1407q-79 0 -145 -71.5t-107 -203t-41 -264.5q0 -115 41 -173t113 -58 q84 0 148.5 72t102.5 204t38 277q0 109 -36 163t-114 54z" />
-<glyph unicode="&#x26;" horiz-adv-x="1331" d="M748 1395q-125 0 -194 -68t-69 -192q0 -132 109 -281q203 89 279.5 163.5t76.5 182.5q0 91 -56.5 143t-145.5 52zM465 63q108 0 211.5 42.5t222.5 146.5l-352 493q-164 -79 -232 -134.5t-103.5 -124t-35.5 -158.5q0 -119 78 -192t211 -73zM78 324q0 162 99 277.5 t325 215.5l-41 67q-78 128 -78 251q0 157 101 253.5t264 96.5q145 0 227 -76.5t82 -206.5q0 -85 -41 -154t-121 -128t-256 -138l330 -463q73 75 135.5 176.5t91.5 186.5h111q-102 -247 -285 -436l184 -246h-123l-131 184q-121 -108 -242 -156t-266 -48q-167 0 -266.5 94 t-99.5 250z" />
-<glyph unicode="'" horiz-adv-x="403" d="M461 1462l-146 -528h-61l80 528h127z" />
-<glyph unicode="(" horiz-adv-x="526" d="M104 270q0 343 122 633t382 559h105q-259 -276 -384.5 -568t-125.5 -618q0 -317 127 -600h-80q-146 262 -146 594z" />
-<glyph unicode=")" horiz-adv-x="526" d="M453 868q0 -345 -123.5 -636t-380.5 -556h-105q257 274 383.5 566.5t126.5 619.5q0 148 -28.5 294t-98.5 306h80q146 -262 146 -594z" />
-<glyph unicode="*" horiz-adv-x="1137" d="M834 1540l-109 -405l438 8l-8 -107l-416 29l181 -401l-115 -37l-135 417l-285 -348l-78 78l318 318l-392 125l39 102l394 -168l47 408z" />
-<glyph unicode="+" d="M563 672h-401v100h401v404h101v-404h401v-100h-401v-400h-101v400z" />
-<glyph unicode="," horiz-adv-x="451" d="M250 238l8 -23q-34 -92 -114 -233.5t-160 -245.5h-74q79 132 141 271t88 231h111z" />
-<glyph unicode="-" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" />
-<glyph unicode="." horiz-adv-x="485" d="M82 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" />
-<glyph unicode="/" horiz-adv-x="641" d="M827 1462l-817 -1462h-110l815 1462h112z" />
-<glyph unicode="0" d="M1075 1016q0 -201 -41 -405t-116.5 -346t-183.5 -213.5t-242 -71.5q-176 0 -264.5 126.5t-88.5 387.5q0 186 44.5 381.5t124 334t187 207t240.5 68.5q340 0 340 -469zM723 1397q-134 0 -241.5 -113t-173.5 -329t-66 -451q0 -222 62.5 -329t197.5 -107q139 0 244 112 t166 337t61 489q0 199 -59.5 295t-190.5 96z" />
-<glyph unicode="1" d="M537 0h-105l225 1055q19 92 74 293q-42 -36 -75.5 -61t-249.5 -161l-52 78l406 258h90z" />
-<glyph unicode="2" d="M909 0h-870l22 104l449 402q198 177 284 276.5t126.5 186.5t40.5 180q0 112 -66 178t-197 66q-176 0 -333 -129l-54 73q180 146 394 146q173 0 268.5 -85t95.5 -237q0 -110 -43.5 -208.5t-141.5 -211.5t-311 -303l-383 -338v-4h736z" />
-<glyph unicode="3" d="M1049 1174q0 -162 -106 -275t-286 -143v-4q117 -24 185.5 -115.5t68.5 -226.5q0 -134 -64 -233t-179.5 -148t-274.5 -49q-96 0 -184.5 20.5t-153.5 52.5v101q172 -86 344 -86q197 0 303.5 89.5t106.5 252.5q0 145 -89 223t-247 78h-117l21 96h110q209 0 333 95.5 t124 258.5q0 114 -63.5 175t-188.5 61q-167 0 -344 -131l-49 75q84 67 188 104.5t218 37.5q161 0 252.5 -82.5t91.5 -226.5z" />
-<glyph unicode="4" d="M1071 371h-264l-80 -371h-96l80 371h-688l20 96l881 1010h118l-215 -1018h265zM729 459q79 369 119 558.5t86 354.5h-4q-66 -91 -129 -166l-651 -747h579z" />
-<glyph unicode="5" d="M582 879q188 0 292.5 -102t104.5 -279q0 -237 -148 -377.5t-407 -140.5q-84 0 -177.5 20t-158.5 51v107q170 -90 340 -90q208 0 328.5 114.5t120.5 313.5q0 140 -85 219.5t-225 79.5q-133 0 -243 -41l-66 49l193 659h624l-18 -96h-541l-149 -516q98 29 215 29z" />
-<glyph unicode="6" d="M170 428q0 283 105 544.5t269.5 385t383.5 123.5q123 0 182 -21l-18 -90q-86 23 -170 23q-233 0 -393.5 -174t-233.5 -502h8q68 94 164 143t211 49q161 0 250.5 -100.5t89.5 -282.5q0 -156 -60 -281t-171 -195t-257 -70q-171 0 -265.5 119t-94.5 329zM543 68 q112 0 196.5 58.5t130 162t45.5 229.5q0 146 -67 224.5t-195 78.5q-81 0 -154 -31.5t-129 -87t-78 -115t-22 -173.5q0 -164 72.5 -255t200.5 -91z" />
-<glyph unicode="7" d="M244 0l796 1366h-766l23 96h858l-20 -110l-779 -1352h-112z" />
-<glyph unicode="8" d="M737 1485q163 0 258 -85t95 -229q0 -138 -84 -234.5t-285 -172.5q130 -78 190 -170.5t60 -208.5t-58 -208t-165.5 -144.5t-260.5 -52.5q-178 0 -283.5 92.5t-105.5 253.5q0 159 100.5 268.5t321.5 187.5q-100 72 -144 152t-44 180q0 159 114 265t291 106zM610 733 q-218 -73 -313.5 -167.5t-95.5 -225.5q0 -136 77.5 -206.5t219.5 -70.5q168 0 270 91t102 233q0 104 -62 189t-198 157zM727 1399q-130 0 -214.5 -82t-84.5 -203q0 -91 41.5 -159t157.5 -142q192 62 279 144t87 206q0 109 -70.5 172.5t-195.5 63.5z" />
-<glyph unicode="9" d="M1059 1032q0 -288 -101.5 -548t-263.5 -382t-393 -122q-114 0 -186 22v90q87 -29 192 -29q474 0 627 674h-8q-140 -192 -367 -192q-162 0 -255 105t-93 284q0 155 59.5 281t170.5 196t257 70q174 0 267.5 -115.5t93.5 -333.5zM686 1393q-112 0 -197.5 -58.5 t-130.5 -162.5t-45 -230q0 -145 67.5 -225t192.5 -80q83 0 157.5 32.5t129 87.5t76.5 114t22 176q0 166 -71 256t-201 90z" />
-<glyph unicode=":" horiz-adv-x="485" d="M260 989q0 57 25.5 89t68.5 32q66 0 66 -72q0 -55 -25 -89t-67 -34q-68 0 -68 74zM102 55q0 56 25.5 88.5t69.5 32.5q65 0 65 -72q0 -55 -25.5 -88.5t-66.5 -33.5q-68 0 -68 73z" />
-<glyph unicode=";" horiz-adv-x="485" d="M287 238l8 -23q-35 -96 -118.5 -242t-156.5 -237h-73q79 132 141 271t88 231h111zM266 989q0 57 25.5 89t68.5 32q66 0 66 -72q0 -55 -25 -89t-67 -34q-68 0 -68 74z" />
-<glyph unicode="&#x3c;" d="M1051 262l-914 414v74l914 471v-103l-801 -399l801 -350v-107z" />
-<glyph unicode="=" d="M168 885v100h903v-100h-903zM168 461v98h903v-98h-903z" />
-<glyph unicode="&#x3e;" d="M170 369l801 350l-801 399v103l915 -471v-74l-915 -414v107z" />
-<glyph unicode="?" horiz-adv-x="799" d="M242 362l6 29q29 132 82 206.5t157 147.5q118 84 175 145.5t86.5 127.5t29.5 141q0 108 -67.5 170t-182.5 62q-139 0 -307 -101l-39 86q85 49 171.5 78t187.5 29q159 0 250.5 -84.5t91.5 -229.5q0 -127 -66 -234t-231 -226q-85 -61 -132.5 -108.5t-73 -95t-46.5 -143.5 h-92zM170 59q0 56 25 88.5t69 32.5q66 0 66 -71q0 -54 -24.5 -88.5t-67.5 -34.5q-68 0 -68 73z" />
-<glyph unicode="@" horiz-adv-x="1724" d="M1688 858q0 -179 -56 -323.5t-154.5 -227t-211.5 -82.5q-98 0 -154.5 55t-56.5 144h-4q-54 -97 -132.5 -148t-168.5 -51q-112 0 -178 73t-66 202q0 156 63 283t178 198.5t261 71.5q122 0 252 -52l-84 -315q-39 -140 -39 -221q0 -71 34.5 -111.5t100.5 -40.5 q86 0 160 73.5t117.5 198t43.5 251.5q0 156 -65 277t-187 188t-292 67q-235 0 -424.5 -108.5t-295.5 -304t-106 -439.5q0 -288 155 -449t435 -161q207 0 420 82v-90q-210 -82 -428 -82q-203 0 -357.5 82.5t-238.5 239t-84 370.5q0 276 121.5 493.5t337 337t473.5 119.5 q189 0 330.5 -72.5t221 -213t79.5 -314.5zM1008 969q-113 0 -204.5 -59t-142.5 -165.5t-51 -238.5q0 -92 40.5 -142.5t113.5 -50.5q101 0 180.5 89t124.5 255l78 289q-66 23 -139 23z" />
-<glyph unicode="A" horiz-adv-x="1059" d="M805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449z" />
-<glyph unicode="B" horiz-adv-x="1202" d="M412 1462h379q190 0 290.5 -84t100.5 -241q0 -153 -90 -249t-254 -124v-4q125 -31 188.5 -113.5t63.5 -204.5q0 -205 -140.5 -323.5t-390.5 -118.5h-457zM377 811h278q206 0 313 81t107 238q0 119 -78 180.5t-229 61.5h-272zM358 721l-135 -631h342q201 0 309.5 87.5 t108.5 256.5q0 145 -90 216t-275 71h-260z" />
-<glyph unicode="C" horiz-adv-x="1169" d="M961 1389q-197 0 -351.5 -104.5t-245 -304.5t-90.5 -441q0 -225 110.5 -346t317.5 -121q140 0 304 51v-94q-156 -49 -316 -49q-252 0 -386 145t-134 410q0 266 104.5 488t284.5 341t402 119q177 0 307 -68l-45 -90q-55 30 -124.5 47t-137.5 17z" />
-<glyph unicode="D" horiz-adv-x="1350" d="M1288 879q0 -253 -109.5 -461.5t-300.5 -313t-446 -104.5h-330l310 1462h305q282 0 426.5 -147.5t144.5 -435.5zM430 90q226 0 394.5 94.5t261 275.5t92.5 412q0 498 -476 498h-206l-275 -1280h209z" />
-<glyph unicode="E" horiz-adv-x="1067" d="M829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627z" />
-<glyph unicode="F" horiz-adv-x="981" d="M205 0h-103l310 1462h708l-20 -94h-604l-134 -620h570l-21 -95h-569z" />
-<glyph unicode="G" horiz-adv-x="1374" d="M856 735h406l-150 -682q-211 -73 -405 -73q-257 0 -397 146t-140 421q0 265 105 483.5t283.5 335.5t395.5 117q113 0 203 -19t184 -59l-38 -94q-110 46 -189.5 62t-167.5 16q-184 0 -339 -107.5t-244 -301.5t-89 -433q0 -229 114.5 -352t326.5 -123q155 0 309 47l117 526 h-303z" />
-<glyph unicode="H" horiz-adv-x="1366" d="M1063 0h-100l151 719h-760l-149 -719h-103l310 1462h102l-139 -649h760l137 649h100z" />
-<glyph unicode="I" horiz-adv-x="504" d="M102 0l310 1462h98l-309 -1462h-99z" />
-<glyph unicode="J" horiz-adv-x="477" d="M-180 -360q-48 0 -88 8t-56 16l11 92q57 -20 137 -20q213 0 262 241l309 1485h105l-314 -1491q-35 -170 -125 -250.5t-241 -80.5z" />
-<glyph unicode="K" horiz-adv-x="1122" d="M979 0h-111l-342 788l-190 -153l-131 -635h-103l310 1462h102l-158 -723l133 121l680 602h138l-699 -610z" />
-<glyph unicode="L" horiz-adv-x="938" d="M102 0l310 1462h102l-289 -1366h621l-23 -96h-721z" />
-<glyph unicode="M" horiz-adv-x="1669" d="M772 205l733 1257h150l-301 -1462h-101l191 901q79 369 100 447h-6l-780 -1348h-51l-222 1348h-6q-20 -154 -78 -426l-196 -922h-96l309 1462h143l205 -1257h6z" />
-<glyph unicode="N" horiz-adv-x="1372" d="M1069 0h-86l-516 1284h-8q-23 -149 -48 -273t-214 -1011h-95l310 1462h80l522 -1294h8q23 176 74 416l188 878h94z" />
-<glyph unicode="O" horiz-adv-x="1464" d="M1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300t79 430.5 q0 240 -104.5 364t-310.5 124z" />
-<glyph unicode="P" horiz-adv-x="1145" d="M1145 1102q0 -500 -610 -500h-201l-129 -602h-103l310 1462h315q202 0 310 -92.5t108 -267.5zM350 694h191q252 0 373.5 96.5t121.5 305.5q0 274 -329 274h-211z" />
-<glyph unicode="Q" horiz-adv-x="1464" d="M1403 911q0 -216 -70 -418t-186.5 -324t-274.5 -167l267 -350h-142l-231 332l-74 -4q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128 q169 0 300 98.5t210 300t79 430.5q0 240 -104.5 364t-310.5 124z" />
-<glyph unicode="R" horiz-adv-x="1145" d="M336 633l-131 -633h-103l310 1462h303q430 0 430 -360q0 -182 -103.5 -303t-281.5 -152q201 -591 221 -647h-111l-211 633h-323zM358 725h252q208 0 317 95.5t109 281.5q0 268 -329 268h-211z" />
-<glyph unicode="S" horiz-adv-x="1020" d="M895 403q0 -126 -65.5 -224.5t-179.5 -148.5t-269 -50q-88 0 -172.5 17t-171.5 58v109q163 -92 348 -92q188 0 295.5 86.5t107.5 232.5q0 61 -17 104.5t-52.5 78.5t-91 68t-131.5 75q-150 76 -209.5 164t-59.5 206t59 207.5t165 139t237 49.5q99 0 180 -17.5t168 -60.5 l-32 -94q-66 40 -151.5 63t-164.5 23q-163 0 -259.5 -82.5t-96.5 -218.5q0 -103 49 -170t182 -133q154 -79 213.5 -130t89 -113t29.5 -147z" />
-<glyph unicode="T" horiz-adv-x="985" d="M438 0h-102l289 1368h-432l20 94h973l-19 -94h-440z" />
-<glyph unicode="U" horiz-adv-x="1370" d="M1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101z" />
-<glyph unicode="V" horiz-adv-x="1079" d="M457 147q51 111 124 247l572 1068h117l-799 -1462h-88l-182 1462h100l117 -950q26 -217 35 -365h4z" />
-<glyph unicode="W" horiz-adv-x="1702" d="M1018 1341q-27 -76 -62 -153.5t-563 -1187.5h-82l-73 1462h100l47 -1031l4 -165l-2 -86h6q85 226 170 398l434 884h105l61 -878q19 -266 19 -410h6q30 86 61.5 163t493.5 1125h108q-169 -365 -330.5 -731t-328.5 -731h-78l-78 1075q-11 142 -11 219l1 47h-8z" />
-<glyph unicode="X" horiz-adv-x="971" d="M879 0h-107l-254 678l-526 -678h-127l608 766l-272 696h106l240 -626l483 626h119l-555 -719z" />
-<glyph unicode="Y" horiz-adv-x="965" d="M494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100z" />
-<glyph unicode="Z" d="M913 0h-925l22 92l1069 1276h-764l23 94h887l-19 -88l-1069 -1280h799z" />
-<glyph unicode="[" horiz-adv-x="537" d="M369 -324h-426l376 1786h429l-19 -90h-330l-340 -1605h330z" />
-<glyph unicode="\" horiz-adv-x="641" d="M295 1462l242 -1462h-82l-246 1462h86z" />
-<glyph unicode="]" horiz-adv-x="537" d="M203 1462h426l-377 -1786h-428l18 91h330l340 1605h-330z" />
-<glyph unicode="^" horiz-adv-x="1047" d="M70 569l587 906h91l260 -906h-105l-217 809l-500 -809h-116z" />
-<glyph unicode="_" horiz-adv-x="801" d="M625 -291h-807l18 86h807z" />
-<glyph unicode="`" horiz-adv-x="1135" d="M766 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="a" horiz-adv-x="1133" d="M655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82t-164 -245.5 t-64 -325.5q0 -152 50 -223.5t151 -71.5z" />
-<glyph unicode="b" horiz-adv-x="1151" d="M500 -16q-113 0 -186 59t-97 166h-6l-55 -209h-80l327 1556h95q-131 -628 -162 -751h6q93 156 199 229.5t231 73.5q281 0 281 -375q0 -203 -76 -380t-201 -273t-276 -96zM750 1018q-91 0 -180 -61.5t-160.5 -169.5t-106.5 -235t-35 -206q0 -129 64 -202.5t166 -73.5 q124 0 224 83t164 245t64 325q0 152 -49 223.5t-151 71.5z" />
-<glyph unicode="c" horiz-adv-x="887" d="M477 -20q-174 0 -274.5 110.5t-100.5 306.5q0 193 73.5 361.5t198.5 257t290 88.5q134 0 241 -43l-28 -90q-107 47 -218 47q-129 0 -232.5 -77t-162.5 -222t-59 -320q0 -158 73.5 -243.5t208.5 -85.5q71 0 131.5 13t131.5 46v-92q-116 -57 -273 -57z" />
-<glyph unicode="d" horiz-adv-x="1133" d="M655 1104q230 0 279 -219h4q12 66 143 671h99l-330 -1556h-82l45 274h-6q-173 -294 -424 -294q-281 0 -281 374q0 193 71.5 370t197.5 278.5t284 101.5zM406 70q89 0 178.5 62.5t160 168t106.5 231t36 209.5q0 126 -61.5 201.5t-168.5 75.5q-124 0 -224 -83t-164 -242.5 t-64 -327.5q0 -295 201 -295z" />
-<glyph unicode="e" horiz-adv-x="928" d="M469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5t-162.5 -308.5h49 q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5z" />
-<glyph unicode="f" horiz-adv-x="578" d="M-131 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248l-252 -1190q-33 -161 -104 -234.5 t-195 -73.5z" />
-<glyph unicode="g" horiz-adv-x="1040" d="M1100 1087l-17 -79l-243 -11q26 -28 43.5 -84t17.5 -114q0 -109 -54.5 -206.5t-148 -145.5t-213.5 -48q-63 0 -77 9q-80 -33 -124 -73t-44 -81t31.5 -64.5t113.5 -31.5l121 -11q346 -31 346 -264q0 -112 -65 -197.5t-187 -131.5t-291 -46q-186 0 -291.5 72t-105.5 203 q0 236 309 334q-78 42 -78 123q0 123 191 202q-71 36 -110.5 105.5t-39.5 157.5q0 111 53.5 204t148 146t206.5 53q69 0 147 -21h361zM14 -207q0 -101 81 -150t224 -49q203 0 317 74.5t114 204.5q0 85 -62.5 130.5t-218.5 57.5l-160 15q-157 -45 -226 -114.5t-69 -168.5z M285 711q0 -112 58.5 -170t164.5 -58q88 0 154 37t102.5 114t36.5 169q0 104 -56 161.5t-157 57.5q-93 0 -161 -43t-105 -116t-37 -152z" />
-<glyph unicode="h" horiz-adv-x="1143" d="M764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -188t-103.5 -286l-102 -477h-98l332 1556h96l-86 -411q-44 -200 -66 -279h6q78 113 186.5 175.5t229.5 62.5q124 0 192 -65t68 -183q0 -70 -24 -182l-148 -674h-98z" />
-<glyph unicode="i" horiz-adv-x="475" d="M174 0h-98l231 1087h96zM350 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" />
-<glyph unicode="j" horiz-adv-x="475" d="M-166 -492q-62 0 -113 19v92q47 -22 113 -22q82 0 128.5 51.5t72.5 177.5l266 1261h96l-268 -1271q-35 -165 -106.5 -236.5t-188.5 -71.5zM350 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" />
-<glyph unicode="k" horiz-adv-x="944" d="M270 477l609 610h125l-474 -469l297 -618h-106l-264 559l-205 -188l-80 -371h-96l330 1556h96l-166 -780l-70 -299h4z" />
-<glyph unicode="l" horiz-adv-x="475" d="M170 0h-94l334 1556h94z" />
-<glyph unicode="m" horiz-adv-x="1751" d="M711 0l147 674q25 125 25 162q0 182 -154 182q-106 0 -200 -67.5t-159 -188.5t-100 -287l-100 -475h-98l231 1087h80l-33 -210h6q80 113 181.5 170t212.5 57q106 0 163 -67t60 -195h6q77 129 181 195.5t222 66.5q117 0 182.5 -61.5t65.5 -176.5q0 -29 -2.5 -56.5 t-19.5 -119.5l-152 -690h-100l149 680q25 120 25 176q0 77 -43 119.5t-119 42.5q-157 0 -277.5 -137.5t-168.5 -362.5l-109 -518h-102z" />
-<glyph unicode="n" horiz-adv-x="1143" d="M764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -187.5t-103.5 -286.5l-102 -477h-98l231 1087h82l-37 -221h6q164 238 416 238q130 0 195 -64t65 -184q0 -70 -24 -182l-148 -674h-98z" />
-<glyph unicode="o" horiz-adv-x="1124" d="M649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83z" />
-<glyph unicode="p" horiz-adv-x="1149" d="M498 -16q-230 0 -279 219h-4q-13 -72 -149 -695h-99l336 1579h82l-45 -274h6q91 153 195.5 224t228.5 71q135 0 208 -92.5t73 -282.5q0 -195 -72 -371t-197.5 -277t-283.5 -101zM748 1018q-87 0 -174 -58.5t-161.5 -167.5t-110.5 -237.5t-36 -208.5q0 -125 61.5 -200.5 t168.5 -75.5q124 0 225 84t164 243.5t63 325.5q0 295 -200 295z" />
-<glyph unicode="q" horiz-adv-x="1157" d="M651 1104q109 0 183.5 -58t99.5 -167h6l55 208h80l-327 -1556h-95l98 470l64 282h-6q-93 -156 -199 -229.5t-231 -73.5q-281 0 -281 374q0 201 75.5 379t200.5 274.5t277 96.5zM401 70q92 0 182 62.5t160.5 171.5t105 236.5t34.5 200.5q0 130 -63.5 203.5t-166.5 73.5 q-124 0 -224 -83t-164 -245t-64 -325q0 -143 45.5 -219t154.5 -76z" />
-<glyph unicode="r" horiz-adv-x="752" d="M713 1106q69 0 123 -14l-21 -93q-47 15 -113 15q-94 0 -179 -64t-153 -192t-100 -277l-100 -481h-98l231 1087h80l-29 -204h6q73 94 123 135.5t106.5 64.5t123.5 23z" />
-<glyph unicode="s" horiz-adv-x="827" d="M713 295q0 -144 -103 -229.5t-280 -85.5q-173 0 -305 75v107q74 -46 153 -71t148 -25q138 0 211 57.5t73 163.5q0 42 -15.5 74t-50 61.5t-132.5 85.5q-148 80 -200 145.5t-52 159.5q0 128 98.5 209.5t259.5 81.5q75 0 158.5 -17.5t140.5 -46.5l-35 -88q-136 64 -264 64 q-116 0 -186 -53t-70 -138q0 -55 17 -88t60.5 -68.5t119.5 -76.5q114 -63 161.5 -103.5t70 -86.5t22.5 -107z" />
-<glyph unicode="t" horiz-adv-x="616" d="M694 1087l-18 -81h-283l-135 -635q-22 -99 -22 -164q0 -139 126 -139q68 0 152 26v-86q-101 -28 -170 -28q-99 0 -153 54.5t-54 158.5q0 73 29 206l129 607h-182l14 67l184 17l97 253h55l-55 -256h286z" />
-<glyph unicode="u" horiz-adv-x="1143" d="M381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100z" />
-<glyph unicode="v" horiz-adv-x="895" d="M276 0l-172 1087h101l108 -735q26 -165 33 -254h6q51 115 129 256l406 733h102l-600 -1087h-113z" />
-<glyph unicode="w" horiz-adv-x="1393" d="M838 0l-60 686q-14 224 -14 266h-6q-34 -92 -144 -290l-356 -662h-117l-20 1087h92l13 -821l-3 -157h6q61 134 150 297l373 681h77l64 -681q14 -147 14 -297h6l24 61l101 236l320 681h96l-508 -1087h-108z" />
-<glyph unicode="x" horiz-adv-x="922" d="M442 483l-393 -483h-121l471 559l-245 528h100l207 -462l373 462h120l-448 -534l258 -553h-98z" />
-<glyph unicode="y" horiz-adv-x="920" d="M123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184z" />
-<glyph unicode="z" horiz-adv-x="887" d="M700 0h-729l15 72l776 932h-543l17 83h659l-18 -83l-762 -920h602z" />
-<glyph unicode="{" horiz-adv-x="709" d="M424 -324q-256 0 -256 199q0 45 16 115l56 252q18 90 18 127q0 159 -199 159l21 78q126 0 191 49t89 158l89 393q30 135 106 195.5t215 60.5h29l-17 -86q-86 -2 -129 -20.5t-69.5 -61.5t-44.5 -120l-74 -338q-30 -134 -91.5 -194.5t-164.5 -78.5v-4q68 -18 105.5 -68.5 t37.5 -121.5q0 -52 -24 -164l-47 -225q-13 -58 -13 -101q0 -61 37.5 -89t138.5 -28v-86h-20z" />
-<glyph unicode="|" d="M584 1561h100v-2071h-100v2071z" />
-<glyph unicode="}" horiz-adv-x="709" d="M332 1462q131 0 189.5 -51t58.5 -147q0 -41 -17 -115l-55 -252q-19 -95 -19 -127q0 -77 49.5 -118.5t149.5 -41.5l-20 -78q-125 0 -191 -48.5t-90 -157.5l-88 -394q-32 -139 -108.5 -197.5t-213.5 -58.5h-18v86q96 2 138 21t68.5 61t43.5 121l74 338q27 126 87.5 189.5 t168.5 82.5v5q-75 20 -109.5 72.5t-34.5 117.5q0 55 18 131l54 258q12 61 12 101q0 44 -18 69t-54 36t-116 11l20 86h21z" />
-<glyph unicode="~" d="M350 745q-49 0 -108 -30.5t-115 -89.5v94q108 110 233 110q61 0 115 -13.5t156 -57.5q126 -58 219 -58q54 0 107.5 29t117.5 96v-96q-111 -113 -233 -113q-117 0 -271 72q-62 29 -112.5 43t-108.5 14z" />
-<glyph unicode="&#xa1;" horiz-adv-x="502" d="M264 711h62l-203 -1086h-119zM432 1030q0 -56 -25 -88.5t-69 -32.5q-66 0 -66 72q0 55 25 89t68 34q67 0 67 -74z" />
-<glyph unicode="&#xa2;" d="M578 -20h-93l45 215q-132 25 -206 132.5t-74 272.5q0 184 63.5 341t178 253t256.5 111l36 178h90l-38 -176q116 -4 217 -43l-29 -90q-107 47 -217 47q-130 0 -233 -76t-162.5 -221t-59.5 -322q0 -164 74.5 -247t208.5 -83q127 0 264 60v-92q-118 -58 -281 -58z" />
-<glyph unicode="&#xa3;" d="M879 1479q170 0 313 -78l-39 -84l-54 26q-108 50 -231 50q-134 0 -220.5 -74.5t-117.5 -220.5l-73 -340h409l-18 -82h-408l-57 -268q-50 -225 -188 -314h759l-20 -94h-938l16 84q93 11 165.5 95.5t107.5 236.5l57 260h-199l17 82h198l76 350q41 187 155 279t290 92z" />
-<glyph unicode="&#xa4;" d="M262 723q0 118 74 225l-129 129l63 64l127 -129q105 78 230 78q118 0 223 -78l131 129l61 -62l-129 -129q78 -106 78 -227q0 -135 -78 -227l129 -127l-61 -62l-131 127q-104 -76 -223 -76q-126 0 -228 80l-129 -129l-61 62l127 127q-74 98 -74 225zM350 723 q0 -116 80 -196.5t197 -80.5t198.5 81t81.5 196q0 75 -36.5 140t-102.5 104t-141 39q-114 0 -195.5 -82t-81.5 -201z" />
-<glyph unicode="&#xa5;" d="M584 645l544 817h117l-559 -823h266l-16 -76h-315l-39 -190h317l-18 -84h-316l-59 -289h-105l64 289h-299l18 84h299l41 190h-301l17 76h258l-215 823h100z" />
-<glyph unicode="&#xa6;" d="M578 1561h100v-756h-100v756zM578 246h100v-756h-100v756z" />
-<glyph unicode="&#xa7;" horiz-adv-x="995" d="M211 778q0 101 69.5 182t198.5 130q-64 31 -103.5 85.5t-39.5 120.5q0 74 46 134.5t132.5 94.5t202.5 34q163 0 289 -58l-31 -80q-138 54 -264 54q-124 0 -202.5 -46.5t-78.5 -123.5q0 -59 46 -104.5t183 -106.5q112 -52 158.5 -89.5t71 -85t24.5 -110.5 q0 -197 -249 -317q122 -64 122 -197q0 -86 -48 -153.5t-139.5 -105.5t-221.5 -38q-157 0 -275 53v99q47 -27 126 -46.5t153 -19.5q149 0 228 52.5t79 150.5q0 62 -42.5 106t-166.5 96q-155 65 -211.5 130t-56.5 159zM559 1038q-119 -30 -187.5 -97.5t-68.5 -154.5 q0 -57 24.5 -96.5t81 -73t187.5 -81.5q103 49 162 113.5t59 156.5q0 72 -57.5 126t-200.5 107z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1135" d="M836 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM492 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M944 1092q-142 0 -222.5 -94.5t-80.5 -264.5q0 -186 74.5 -275t220.5 -89q85 0 199 43v-88q-104 -45 -209 -45q-187 0 -288 116t-101 330q0 207 110 332t297 125q119 0 227 -52l-36 -83q-99 45 -191 45zM147 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM240 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89q174 0 325 85.5t243 239t92 334.5q0 178 -89 330t-240.5 241t-330.5 89q-182 0 -335 -92t-238.5 -243t-85.5 -325z" />
-<glyph unicode="&#xaa;" horiz-adv-x="643" d="M487 1485q55 0 97.5 -29t66.5 -86h6l35 103h66l-137 -650h-72l22 125h-4q-96 -137 -223 -137q-80 0 -127 56.5t-47 164.5q0 189 90.5 321t226.5 132zM369 885q66 0 133.5 75.5t97.5 184.5q16 51 16 123q0 58 -36 100.5t-93 42.5q-94 0 -161.5 -111.5t-67.5 -271.5 q0 -143 111 -143z" />
-<glyph unicode="&#xab;" horiz-adv-x="860" d="M426 932l57 -49l-317 -336l213 -385l-64 -39l-254 418l2 26zM786 932l58 -49l-314 -336l209 -385l-63 -39l-254 418l2 26z" />
-<glyph unicode="&#xac;" d="M1028 772v-500h-100v400h-803v100h903z" />
-<glyph unicode="&#xad;" horiz-adv-x="629" d="M77 502zM77 502l18 90h457l-16 -90h-459z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M758 731h112q93 0 144 46.5t51 135.5q0 172 -197 172h-110v-354zM1169 918q0 -80 -39.5 -141t-109.5 -93l237 -393h-120l-211 360h-168v-360h-101v880h211q143 0 222 -62t79 -191zM150 731q0 207 103.5 382t276.5 272.5t371 97.5q200 0 375 -100t276 -275t101 -377 q0 -197 -97 -370t-272 -277t-383 -104q-204 0 -376.5 100.5t-273.5 273t-101 377.5zM242 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89q174 0 325 85.5t243 239t92 334.5q0 178 -89 330t-240.5 241t-330.5 89q-182 0 -335 -92t-238.5 -243t-85.5 -325z" />
-<glyph unicode="&#xaf;" horiz-adv-x="655" d="M1001 1556h-653l53 97h654z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M242 1190q0 120 85 206.5t208 86.5q122 0 207 -86.5t85 -206.5q0 -122 -85.5 -207.5t-206.5 -85.5q-122 0 -207.5 85.5t-85.5 207.5zM315 1190q0 -89 64.5 -153t155.5 -64q92 0 155.5 64t63.5 153q0 90 -64 155.5t-155 65.5q-90 0 -155 -65.5t-65 -155.5z" />
-<glyph unicode="&#xb1;" d="M528 629h-401v98h401v406h101v-406h401v-98h-401v-400h-101v400zM127 0v100h903v-100h-903z" />
-<glyph unicode="&#xb2;" horiz-adv-x="643" d="M604 586h-522l16 80l297 258q137 118 182.5 190.5t45.5 153.5q0 59 -38.5 97t-105.5 38q-95 0 -194 -76l-41 62q108 90 239 90q73 0 125 -27t78.5 -72t26.5 -100q0 -106 -59 -198.5t-183 -194.5l-266 -223h416z" />
-<glyph unicode="&#xb3;" horiz-adv-x="643" d="M705 1276q0 -85 -48.5 -148t-154.5 -88v-4q66 -16 105.5 -68t39.5 -124q0 -77 -39 -141t-109 -99t-161 -35q-59 0 -123.5 15.5t-105.5 40.5v90q46 -28 108 -48t125 -20q99 0 159 52.5t60 142.5q0 162 -196 162h-84l16 79h86q102 0 168.5 49.5t66.5 129.5 q0 68 -37.5 102.5t-105.5 34.5q-100 0 -199 -68l-40 64q109 86 251 86q100 0 159 -56.5t59 -148.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1135" d="M580 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1171" d="M238 242q0 -82 48.5 -127t135.5 -45q110 0 207 64.5t162.5 182.5t101.5 285l104 485h99l-234 -1087h-78l29 205h-6q-164 -221 -404 -221q-85 0 -139 32.5t-76 89.5h-6q-18 -132 -51 -284l-63 -314h-97l338 1579h101l-152 -698q-20 -96 -20 -147z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1208 -260h-100v1722h-227v-1722h-101v819q-64 -18 -145 -18q-216 0 -318 125t-102 376q0 260 109 387t342 127h542v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="485" d="M207 625zM207 698q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" />
-<glyph unicode="&#xb8;" horiz-adv-x="420" d="M197 -289q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" />
-<glyph unicode="&#xb9;" horiz-adv-x="643" d="M512 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5t14 60t15.5 59t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59z" />
-<glyph unicode="&#xba;" horiz-adv-x="655" d="M518 1479q105 0 165 -64t60 -180q0 -115 -40 -214t-114 -156.5t-175 -57.5q-114 0 -169 67.5t-55 184.5q0 112 41.5 209.5t116 154t170.5 56.5zM508 1405q-70 0 -124 -46.5t-84 -124.5t-30 -167q0 -186 156 -186q73 0 125.5 46.5t81.5 127.5t29 176q0 83 -39 128.5 t-115 45.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="860" d="M451 123l-58 49l314 336l-209 385l63 39l254 -418l-2 -27zM90 123l-57 49l313 336l-209 385l64 39l254 -418l-2 -27z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1481" d="M129 0zM1319 230h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM1121 302q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291zM1323 1462l-1087 -1462h-107l1086 1462h108zM509 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5t14 60t15.5 59 t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1458" d="M53 0zM1278 1h-522l16 80l297 258q137 118 182.5 190.5t45.5 153.5q0 59 -38.5 97t-105.5 38q-95 0 -194 -76l-41 62q108 90 239 90q73 0 125 -27t78.5 -72t26.5 -100q0 -106 -59 -198.5t-183 -194.5l-266 -223h416zM431 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5 t14 60t15.5 59t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59zM1247 1462l-1087 -1462h-107l1086 1462h108z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1458" d="M71 0zM1380 230h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM1182 302q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291zM667 1276q0 -85 -48.5 -148t-154.5 -88v-4q66 -16 105.5 -68t39.5 -124q0 -77 -39 -141t-109 -99t-161 -35 q-59 0 -123.5 15.5t-105.5 40.5v90q46 -28 108 -48t125 -20q99 0 159 52.5t60 142.5q0 162 -196 162h-84l16 79h86q102 0 168.5 49.5t66.5 129.5q0 68 -37.5 102.5t-105.5 34.5q-100 0 -199 -68l-40 64q109 86 251 86q100 0 159 -56.5t59 -148.5zM1407 1462l-1087 -1462 h-107l1086 1462h108z" />
-<glyph unicode="&#xbf;" horiz-adv-x="799" d="M641 717l-6 -29q-28 -127 -79 -200t-161 -154q-118 -84 -175 -145.5t-86.5 -127.5t-29.5 -141q0 -106 65.5 -168.5t184.5 -62.5q141 0 308 100l38 -86q-85 -49 -170.5 -77.5t-187.5 -28.5q-159 0 -250.5 84.5t-91.5 228.5q0 133 70 240.5t227 220.5q85 61 133.5 109 t73 95t45.5 142h92zM713 1020q0 -56 -25.5 -88.5t-69.5 -32.5q-65 0 -65 72q0 56 25 89.5t67 33.5q68 0 68 -74z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM815 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM668 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM1007 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5 t92.5 -146.5v-29z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM911 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5 q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM879 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM535 1704q0 49 20.5 78t56.5 29q54 0 54 -64 q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM945 1600q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM867 1598 q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36t34.5 93z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1640" d="M1403 0h-727l110 522h-444l-328 -522h-131l946 1462h883l-20 -94h-625l-117 -553h590l-20 -94h-588l-135 -627h626zM408 627h401l156 741h-88z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1169" d="M170 0zM961 1389q-197 0 -351.5 -104.5t-245 -304.5t-90.5 -441q0 -225 110.5 -346t317.5 -121q140 0 304 51v-94q-156 -49 -316 -49q-252 0 -386 145t-134 410q0 266 104.5 488t284.5 341t402 119q177 0 307 -68l-45 -90q-55 30 -124.5 47t-137.5 17zM752 -289 q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM891 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM654 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xca;" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM1036 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM902 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM558 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xcc;" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM525 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xcd;" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM419 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xce;" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM738 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xcf;" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM604 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM260 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1352" d="M1288 879q0 -253 -109.5 -461.5t-300.5 -313t-446 -104.5h-330l144 676h-156l21 96h155l146 690h305q282 0 426.5 -147.5t144.5 -435.5zM430 90q226 0 394.5 94.5t261 275.5t92.5 412q0 498 -476 498h-206l-129 -598h378l-20 -96h-379l-125 -586h209z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1372" d="M102 0zM1069 0h-86l-516 1284h-8q-23 -149 -48 -273t-214 -1011h-95l310 1462h80l522 -1294h8q23 176 74 416l188 878h94zM1062 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14 t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM989 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM844 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1171 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1077 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z " />
-<glyph unicode="&#xd6;" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1031 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM687 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xd7;" d="M551 723l-330 332l70 69l330 -329l333 329l68 -67l-332 -334l332 -332l-68 -67l-333 329l-330 -327l-68 67z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1464" d="M1403 911q0 -187 -52 -365.5t-144.5 -304.5t-223 -193.5t-291.5 -67.5q-215 0 -348 112l-139 -170l-66 64l146 172q-113 149 -113 401q0 263 94 479.5t256.5 330.5t370.5 114q219 0 352 -121l133 168l70 -53l-145 -183q45 -51 72.5 -161t27.5 -222zM879 1389 q-134 0 -244 -59.5t-188.5 -170t-124.5 -267.5t-46 -319q0 -105 21.5 -191t56.5 -138l826 1032q-107 113 -301 113zM1294 901q0 85 -17.5 172t-43.5 129l-821 -1030q107 -100 293 -100q170 0 301 100t209.5 296.5t78.5 432.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM946 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303 v-25z" />
-<glyph unicode="&#xda;" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM838 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5 t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM1148 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54 v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM1022 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29 q-55 0 -55 63zM678 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xdd;" horiz-adv-x="965" d="M193 0zM494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100zM563 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xde;" horiz-adv-x="1145" d="M1087 836q0 -247 -153 -373.5t-457 -126.5h-201l-71 -336h-103l310 1462h102l-57 -266h213q200 0 308.5 -92.5t108.5 -267.5zM293 428h190q256 0 376 98.5t120 302.5q0 275 -330 275h-211z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1094" d="M-162 -492q-73 0 -119 23v90q53 -24 115 -24q79 0 123 50.5t66 153.5l305 1409q80 357 405 357q137 0 215 -61.5t78 -174.5q0 -75 -44.5 -140.5t-166.5 -148.5q-107 -76 -141.5 -124.5t-34.5 -106.5q0 -51 34 -88.5t93 -75.5q96 -63 138 -133.5t42 -165.5 q0 -170 -106.5 -269t-286.5 -99q-143 0 -234 65v109q45 -36 112.5 -59t129.5 -23q132 0 208.5 71t76.5 195q0 75 -31.5 129t-109.5 108q-82 58 -119 110.5t-37 121.5q0 57 21 103t60.5 88.5t137.5 113.5q101 70 131.5 116t30.5 101q0 70 -55 110t-150 40q-129 0 -205 -76 t-108 -229l-291 -1377q-33 -152 -103.5 -220.5t-179.5 -68.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM809 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM586 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM955 1243h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM858 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173 t-124.5 -55z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM835 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM491 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM927 1448q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM849 1446q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36 t34.5 93z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1602" d="M1155 -20q-123 0 -211 60t-117 165l-39 -205h-77l41 254h-9q-94 -142 -189 -208t-208 -66q-120 0 -182 94t-62 270q0 206 70.5 384.5t192.5 277t274 98.5q106 0 166 -56.5t74 -156.5h10l59 192h66l-35 -186q139 207 350 207q112 0 175 -61.5t63 -172.5 q0 -179 -158.5 -271.5t-470.5 -92.5h-39q-8 -51 -8 -96q0 -161 69.5 -250.5t217.5 -89.5q69 0 133.5 21t130.5 52v-94q-80 -37 -147 -53t-140 -16zM369 70q67 0 138.5 42t134 117.5t106 170.5t63.5 199t20 165q0 118 -49 186t-141 68q-123 0 -223 -86t-156.5 -240 t-56.5 -340q0 -150 42.5 -216t121.5 -66zM1317 1018q-119 0 -232 -115.5t-172 -308.5h48q263 0 383 67t120 203q0 71 -38.5 112.5t-108.5 41.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="887" d="M102 0zM477 -20q-174 0 -274.5 110.5t-100.5 306.5q0 193 73.5 361.5t198.5 257t290 88.5q134 0 241 -43l-28 -90q-107 47 -218 47q-129 0 -232.5 -77t-162.5 -222t-59 -320q0 -158 73.5 -243.5t208.5 -85.5q71 0 131.5 13t131.5 46v-92q-116 -57 -273 -57zM574 -289 q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" />
-<glyph unicode="&#xe8;" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM751 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xe9;" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM532 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xea;" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM904 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xeb;" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM780 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM436 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xec;" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM454 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xed;" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM284 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xee;" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM642 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xef;" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM515 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM171 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1124" d="M713 1364q-54 60 -158 139l59 68q32 -26 81 -66t100 -94l266 150l39 -74l-256 -141q87 -116 131.5 -276t44.5 -335q0 -355 -141.5 -555t-399.5 -200q-177 0 -277 106.5t-100 294.5q0 170 63 301.5t178.5 203.5t262.5 72q107 0 188 -49.5t121 -142.5h5q0 139 -43 289 t-115 243l-295 -163l-39 73zM489 70q118 0 208.5 61t144 186.5t53.5 270.5q0 77 -35 142t-100 101.5t-156 36.5q-124 0 -213.5 -61.5t-137.5 -169.5t-48 -248q0 -153 73.5 -236t210.5 -83z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1143" d="M76 0zM764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -187.5t-103.5 -286.5l-102 -477h-98l231 1087h82l-37 -221h6q164 238 416 238q130 0 195 -64t65 -184q0 -70 -24 -182l-148 -674h-98zM874 1249q-40 0 -77.5 19t-75.5 45 q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM744 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM573 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM941 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM839 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM812 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM468 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xf7;" d="M168 672v100h903v-100h-903zM522 373q0 106 96 106q48 0 73.5 -27.5t25.5 -78.5q0 -57 -29 -82t-70 -25q-96 0 -96 107zM522 1071q0 107 96 107q46 0 72.5 -27.5t26.5 -79.5q0 -57 -29 -81.5t-70 -24.5q-96 0 -96 106z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1124" d="M164 127q-66 106 -66 276q0 191 73 358t197 257t281 90q150 0 250 -82l109 133l65 -53l-117 -143q70 -105 70 -263q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-163 0 -254 83l-110 -135l-64 54zM924 702q0 101 -35 179l-608 -742q67 -73 202 -73q127 0 225.5 77.5 t157 228t58.5 330.5zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -125 32 -197l605 739q-74 72 -197 72z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM774 1241h-66q-50 52 -114 144.5 t-99 162.5v21h115q46 -129 164 -303v-25z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM627 1262q66 51 150.5 142 t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM957 1241h-49q-70 60 -161 207 q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM827 1366q0 49 20.5 78t56.5 29 q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM483 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#xfd;" horiz-adv-x="920" d="M0 0zM123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184zM505 1262q66 51 150.5 142t129.5 165h137v-23 q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1163" d="M498 -16q-230 0 -279 219h-4q-13 -72 -149 -695h-99l434 2048h99q-114 -535 -164 -751h6q93 156 199 229.5t231 73.5q133 0 206 -92.5t73 -282.5q0 -195 -72 -371t-197.5 -277t-283.5 -101zM748 1018q-86 0 -172.5 -57.5t-162.5 -169.5t-111.5 -238t-35.5 -207 q0 -125 61.5 -200.5t168.5 -75.5q124 0 225 84t164 243.5t63 325.5q0 295 -200 295z" />
-<glyph unicode="&#xff;" horiz-adv-x="920" d="M0 0zM123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184zM698 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77 t-55 -29q-55 0 -55 63zM354 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#x131;" horiz-adv-x="475" d="M174 0h-98l231 1087h96z" />
-<glyph unicode="&#x152;" horiz-adv-x="1767" d="M1530 0h-666q-25 -6 -77.5 -13t-94.5 -7q-251 0 -385.5 149.5t-134.5 429.5q0 263 96 482t262 330.5t381 111.5q130 0 240 -21h688l-20 -94h-625l-117 -553h590l-20 -94h-588l-135 -627h626zM705 72q68 0 116 12l271 1290q-110 15 -189 15q-182 0 -321.5 -98.5 t-222.5 -293.5t-83 -424q0 -245 109 -373t320 -128z" />
-<glyph unicode="&#x153;" horiz-adv-x="1720" d="M1262 -20q-135 0 -228 69t-125 201q-65 -127 -179 -198.5t-257 -71.5q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90q141 0 237 -74.5t126 -212.5q70 132 182.5 207.5t241.5 75.5q114 0 182 -61t68 -166q0 -181 -163.5 -276t-486.5 -95h-32 q-7 -38 -7 -98q0 -165 74 -251.5t213 -86.5q133 0 277 73v-94q-140 -69 -299 -69zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5q0 154 -73 237t-210 83zM1423 1018q-131 0 -243 -115t-162 -309h49q516 0 516 270 q0 70 -44.5 112t-115.5 42z" />
-<glyph unicode="&#x178;" horiz-adv-x="965" d="M193 0zM494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100zM798 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM454 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1135" d="M958 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M967 1448q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM889 1446q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36t34.5 93z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1135" d="M831 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" />
-<glyph unicode="&#x2011;" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" />
-<glyph unicode="&#x2012;" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" />
-<glyph unicode="&#x2013;" horiz-adv-x="983" d="M66 502l18 90h807l-17 -90h-808z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1966" d="M68 502l18 90h1788l-16 -90h-1790z" />
-<glyph unicode="&#x2018;" horiz-adv-x="299" d="M133 961l-4 22q41 100 116 231t161 248h73q-66 -106 -129.5 -242.5t-103.5 -258.5h-113z" />
-<glyph unicode="&#x2019;" horiz-adv-x="299" d="M475 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113z" />
-<glyph unicode="&#x201a;" horiz-adv-x="451" d="M246 238l4 -23q-40 -97 -115.5 -230t-161.5 -249h-73q68 110 131.5 248t101.5 254h113z" />
-<glyph unicode="&#x201c;" horiz-adv-x="631" d="M133 961l-4 22q41 100 116 231t161 248h73q-66 -106 -129.5 -242.5t-103.5 -258.5h-113zM467 961l-4 22q43 104 120 238.5t156 240.5h74q-66 -106 -129.5 -242.5t-103.5 -258.5h-113z" />
-<glyph unicode="&#x201d;" horiz-adv-x="631" d="M809 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113zM475 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113z" />
-<glyph unicode="&#x201e;" horiz-adv-x="776" d="M561 238l4 -23q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 108 129 242.5t105 259.5h112zM227 238l4 -23q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q73 119 135.5 254.5t98.5 247.5h112z" />
-<glyph unicode="&#x2022;" horiz-adv-x="793" d="M248 682q0 137 63 213t172 76q76 0 116 -39.5t40 -118.5q0 -125 -66 -207t-176 -82q-149 0 -149 158z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1489" d="M69 0zM69 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73zM569 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73zM1071 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="537" d="M451 932l57 -49l-318 -336l213 -385l-63 -39l-254 418l2 26z" />
-<glyph unicode="&#x203a;" horiz-adv-x="537" d="M94 123l-57 49l317 336l-213 385l64 39l254 -418l-2 -27z" />
-<glyph unicode="&#x2044;" horiz-adv-x="274" d="M731 1462l-1087 -1462h-107l1086 1462h108z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="643" d="M657 815h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM459 887q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291z" />
-<glyph unicode="&#x20ac;" d="M991 1389q-186 0 -330.5 -120.5t-226.5 -346.5h457l-21 -82h-460q-30 -98 -39 -217h442l-20 -82h-424q0 -243 89 -356t265 -113q115 0 252 57v-94q-129 -55 -270 -55q-209 0 -325 139.5t-116 394.5v27h-184l16 82h172q5 101 35 217h-170l19 82h174q95 273 270 417 t399 144q166 0 287 -90l-53 -82q-102 78 -238 78z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1534" d="M477 741h-86v643h-217v78h522v-78h-219v-643zM1077 741l-221 609h-6l4 -201v-408h-82v721h125l221 -606l223 606h125v-721h-86v398l4 207h-6l-227 -605h-74z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1085" d="M0 1085h1085v-1085h-1085v1085z" />
-<glyph horiz-adv-x="1133" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-<hkern g1="uniFB00" u2="&#x201d;" k="-123" />
-<hkern g1="uniFB00" u2="&#x2019;" k="-123" />
-<hkern g1="uniFB00" u2="&#x27;" k="-123" />
-<hkern g1="uniFB00" u2="&#x22;" k="-123" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-LightItalic-webfont.woff b/doc/fonts/OpenSans-LightItalic-webfont.woff
deleted file mode 100644
index 43e8b9e6cc061ff17fd2903075cbde12715512b3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23400
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
WxB>r#ump{<1pq_<0a34Kp8x=7I1^|9

diff --git a/doc/fonts/OpenSans-Regular-webfont.eot b/doc/fonts/OpenSans-Regular-webfont.eot
deleted file mode 100644
index 6bbc3cf58cb011a6b4bf3cb1612ce212608f7274..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19836
zcmZsgRZtvUw51zpym5DThsL#WcXxNU5Zv8egL^}8cXxMp4*>!Rfh5d-=k3<aJ`bzv
zTdVedJ9Q*b1pug11^{6HTR^~nii&^$2M>gW1;PMQVF3RzW%ci{fFmPHfCS@z{{K`l
z41n@~^u3v|;D7Xg7dAi*;0~|>xc(Q?0$BW~UjGHq0h<3YJAe<s`9J3QA0Y(j{zp9j
za~%L~|2NGAU<YskIREpg|35t_|DO&3fTWh3`v0B|0Kfs9V*y|v0HhnhD2+XT9Y5t~
zs5fnI<e?biM{U*P$!f<c^Nao$yj1ue@mNRv&*wjxNaYfRp87RIL<WR?;`GmJ#09u4
z@IKw+lghFxea^8(2wEyF>Wd?h+ZWM9EYu5@Hs0EOnnkAtTzP9coXJALmS|h&nzJd%
z7?C@cPUEGrLHk-#NysfAePe#dP9_6D5VGbo4fVVs0)83}G7LoWV`e*{V_8RPK>Iqw
z*X0)8;uQ6FzC+dip(fgJU!9*!>pW6;pdJ$jHReX|0V)o@BosG=sN|PYN^-JAOY{e4
z&QjmR91WNK#}_%Ei?QhW{ab*7Eg=}E)Ft4XeyVhoR4<|byJf1$4VGsxP`9bNB<SB0
z-k#kUvW9ZT<zpaWv7B;XSQ0VkL(%r_Wn7K(V?F!1%pNqg#Anuud+s?&>p-((Wawhx
zlK;u}?+b5Ii!k>ELIS<vQi#wGTX;qTuWtP=J_%Cvy9g-KC=3#re_K(T;><N?uOWs3
zC!_eYeql@~YeYN%mPkRMg$S52($Ot*3HX{p6+v6Ml4XVQii{-IWoyn1RzkN{F;d!T
zwAZi1LZ99bzeIwi1;-v~7p{Go=${A^;&n%S2m3Nwmn+assPd@4+CHF=Q{STlk(*z|
zqmGBYq;ldGaSlvaDf=`Zo#q+%Qul?+u`gE0XoXc9sd;TQVJ2d91g#{$I$gPbM$e7>
zPOH%u!jQg8T>Z_#S<Uu5?i!{4>%<^^|CcOH?XN>$IX|aEQjBic^$pg1`=0Y3Q(mv*
ztDZ~~0GdAF>L|BQmHQ*s3r;T~(0;3p;I?%VHpGPt-k<Mkyh5H%pU-p`emwIn#i6k)
z5PUP@!Ot?A+0k2>XLE3iel2aEIYw5<*Tu6)mB2Zdp4#k4Oz!8SUkT&;Qte`Iq~*4U
zD>qT9mSnB=3s~xUgo_vYp#API=~%dKiKqTMXWvn)p~21nSE!cT5SsJTu)R?b1p!+K
z!OU2E?^HE49L>c*z)KLpsv9>&-7AKaYlMAztV}6vISI-rtA6=8k`=+S>+C0X22_El
zG+i&#b34h$o{gdGZ$>$81)ovjw6Nn76?gBhm&(oX%Gl7C`RDCRpH0f?NEokA^!>;1
z%KC0rbxWq(b)XGCuDPUgvx=VFeE!Yhn7tF%LI~H+p>549%5AqnPWWvF870oRi}Ig6
zBdaI{<c{29vW&BlAu)zG=pD?2!#RvLQn@8-iP$ajLZwF*!><Gtf8AK9TcF)Hgz7WJ
zH6Bv6!P!Hw;7$lNF=ZAzrgFG9E@dUWjHhG^K4x2Etg+++5Qb6#D0TkHze;7O=wF#)
zk5mdCYeDY__UizShV@8;{|E)b@s@)yZPR-5H;bzEz|9eYILaOc+RW0oKLsN$*zRo9
z%52;oY?AA2mYZzho^0tmY)xKhL+S*jd%qT|{-nsAJmV^&jO5dZm*j>Fa=dRbLL@+G
zt@VO%=$Om*EulLy$6I72!E$J{;<n+=Y{`-MtkH5j)2;NcNPl+~G-sKWWoQk;KZx>p
zONB3HLoKgq^6jJF(Q`)L`!cZ+Rr3W%j$jUFFQ>qTy9U3hZ4h|+TM+XM0=d);0+WP*
zH3@dm#w7zwp0FtidDmt@7NF1}mU4P$EY|Wkj4mH3R0-KSyk}mz4A4$XnVzGU1ny;{
zr9K{Wq#=h@cd(g4{+b*Qi^ZU3gD1uJhMpP)`|4#)S7%CUD1V?qjVHn4L!j5zA}ut&
zDHYpt7rryJOpQZQcQ??@EKS$QO8W$u#LG?i4dgC}^LsmrmVoh-0>Cp<6C#oePz@ic
znc{A(*xo*}Gg=DUR{sWZO2O!S=0$cJl7by8{!t-+*TZ&T9bbJ7wa2)MA?uM1^}3pD
z!Mnm7PnG9ji{zTSNtd|?oe?d4$WpWLW4dMJVHy7D6t6X`N}z*zqg8B$JmXh6AP)aX
zx4a+uFaSa*g>S$NC3TbnlQ^&r0ToUZAvLgxBh<1THf>}}Ts{<zuJx3Es$7#?r`x~P
z$VkwvL0l`zXy+FvQ5cks`b$+txT@yKP`TQ?J8(ZEPiLGJW{buB%k|+?_YK7YNN$ED
zHh8>7zD84WCblCDox?M#`(f%UZNrShhw|$nZN-MhhQ<N1O35T8iq+zmammUejnJoL
zmwtt|K7HYH*ZN9&-Y(36JE<jb_%QTk?<q1IUT69-Bg=ak!C^aDc&Uf$Jgt3t^ptWm
z5bu#bADs;53fA$8qsSUK$T39Iy!8bJeYC&aXIh4=oMs`lAu}e#649QIA9qat3XT@K
z&_fjo_N$aIOudT)Rx!;{x88;#GyhH}qidJYhBsn1HM>P+c9hQHAgGJ_IV1b6^2F=-
z?fhtv>A1W^6@54mjz5;7t*e<o8}VqpIMg^ZQyu*3i%}rsiIj(33Wr0OM&EQWkk{B!
zQT0h5j@jxt_OGpKa@Xh-lkom)EF!EOdnEomr%WL8wZobqx4OQDY7&4fVrlj(7qke|
zF@XCuIv-Y~`Ww+d0Yf}gzb`5lw@{&hdR5hQ`ZwpwpDw3yRX-VN6fO@Wa+Y~~ndODW
ze2BGon*dd)x;<S0{8(T+z-BW|f;V$(@Lx{2`E|m}um=4<J4xGMF66^?^XMqgaym!t
zT7k$mN>ptF`~4*cKXD!5$8W)UW}qW-In5GvPn;l{`(-SB7%7zGad2Yj6(!|Yd(VI^
zC&ZiZE>|fAm1H4v7inHh0gbSXh9;d3^mP3F9aj*xVgTHvzV&rhAm#ZR@sy6HY+57}
zeQrb@_!T>7O|l5W&I8EJk4PD+eu7{9fix|s50>4l<-?he4QGVD*`Wl}V0uT=;4nY9
zEm;IJTr)#{>0^c~9uJ7iFJp7d=}N}i50uIDTAPbS1r`Kew4)^8WcXFFN4I32xs6b<
zM&&#yNQ)TAU!+&2w1Dp$`K)N4lwMf`e_{ncP9W&odNN_CQ>@#pvQ|mh$&8I{E#bl>
zB{VRuj9O6?c8!sDjhgs5*MQE6OxJ83X+X`AI_G)kQew9Ci-&)8eq=7sNlRp^bIxEQ
zg|HclB<G0&!YjD6Tc}`1mM95v>2$$1v8c0Wisk@^O2sd<s8Nj3bs-%a`lh=X|7dRB
zMp8u^8L~(~iCSURl_hN4cs$$lxkD105|O2P=ld`X1mPpD-|8P&{Mx!xYn|O=OG#4M
zlSy<I!<Dv*TC?f9%egt>2(kXv7=Ek#Wb8SVE1(H9H$$OHV^iX=5ZwM=Pu02e89|at
zbFfF)-U0D3q8L$vmV7d@9I_-tBZ=NZjrKjDDP1X`vP+F--+M2*vuCD^TJ&x$t+uqT
z{gy!y{<V5GAs@wCS{L^!J{|XTs*Y(AcTX#kcBD`cK1!@&7xyi7t9mI5Op8>@6Tm=L
znG~jgC)-NfHfDLrDM=uoHZM=BNVmK{Pe(M(RjT8*-;1b0XSnNA4?|eUJqsD)D)@};
z{CpywKAqMb9wZ(6Y~4v3R-)tP9!E5UYUGBA5QC#xIu11gw%N*a*Q8(2M!m|E=H27^
zZXFt9A*oM7qF3D|Vt(Kk3UuS_L?(%S$5+s_seNGFSQN>aT|4Kk!7e7pa-zOiWG5|c
z9*LIZxA-x!0O~*=M&|Ask{QPsIKK+<*}x{ZpPV@RFv0}Cxy!_fQ5O%boHd;%F?A!I
zO5Q3|OR+`Cag+~w)1E`G!l8k?0rG9pOi!bU>Nj4|dc0g^TCPr_d(JY#_j4NZwiEyY
zad+EiOP~qG{re_HT!Tu0b}9m&-+EnjeHax=I0qqe8wB6WTvwsvvc>M%#>dW980a;2
zMVnq%$yM7!W$r6;h2PBNLB!~Rfh|Z-k(5|?RbP-d8v>mau#JQf#7N;F!=a*C;qCy?
z-m2K+j18jpX{S=OH5CGrQ#tkR&98;#oJ5MO+Z2@HIhCZe9J-ooRY{5V<E%7Xug8W3
z78K`x<+uHD9=E>4N2VqE#2+mpdE}`C!1{}3U?V2V*Cw6Z>cq&a?X6gN(o2l1eaxDB
zZp*{cNN;-(ALedD2XqzE89oT3lwo4=3mXEO*jLdO;tIv_q~k}02M&l{usI;}&@iUz
zS};fwOPs4NxW-!BNaCWH?9w7-4k@XNVd5jN*`mdTZQRL6xF(d~cf{E$>60g9qm~}Y
zo7$|>Jg_GaK?QkIjVIX6JktAcoEf>akV<tGNGzebwQSNG$x8OD@mQk|b6H)C{}>gU
zWSWB@uUgK$ipXjs88B*f2>-^rktwrEXY&}L*onyN5S?Zl2}fWO%usD4O$9u{&mgWL
zP>D}i8zKqYtdn#5(zA?O9K6f7SI0}a;RPGsZ{G)MVvdyUK55Gb7vW-S)bR572CP?b
za}s;<5HMCsc1n&o(w~fCN%MLk+{Yo2x*$8G91S&vvII6dWWkg-7FUf<pFCnTkD4sG
z67I{ucwsJ?bBqL@L#6H`xC|zom5c}yvmQ~vQ3k|d_|Ld$Rjs+XkFV~ywNkOk2CzyD
z{7sxdbo<RZh-_M!RJvf=-!#puFNz;IP8bicmy#^Qbs29y^%v6{@v*0^pn3)3z$ylG
z?@_(lWf{`O5SyxQQOBq0)Hy;Z6Hk&J<64$0W-JcV^{GgEKXjNz&SYE9lz^P*<>&Y?
z9a_&9hO?#ZUpRyL_MID@2}}j)E_FG>pa1$+&PWrcPS<bW@wOf2W#TxYnNN;nom-B2
zW=u0-7!f}ykL}of)A}~j8K}NcB^v9)@>nWvfu}#_QPg_Nx=~*Hnc^a>lUicEr<AdY
z#*>6y*?-!uaoR-ZkCvaM>bWQNB8YB&B0oyeY2FKgtn%Mx|B|zGtOO1xCMaIm9^>Fp
z|1Zg8OMJ9}eN{aF3gzDii(~7!d|(Za0-`;2k%0_;ZYFVCxV_h^Z`S-Qr|J?3@e{Bp
zWBK#47<K+w+(euTE`^0Q71#1ZCc4sx8doFeTC;>K$Yk)?@m$)2Q@24WltBwoOG0=`
z@y25+2eUMkxw{C4muMZPmuIalcyZHmwYd1)B_%v}UX70wk|SH>5SVaaxUD;o@Dhcd
zh|FNgT%rNB>;WzIlk_BtC5QT>=H@A3%zvd6fyU|_QtC%GbeFenirHKlnE+3UCz2cS
zk;eR6X486;dzQQ*fR3!(Nh;MRJ{bSHddVHbMq<rNL7lW2%>`(MVV%4ojZ;9K@Btr1
zb&lxztBj%mYk@aVL;7;(v{QVF7HXojz~*}pj2?DmX~(V(#+08O<n|vneW%xvK#>eJ
zhm=J|GYGwXImQ+yP_H8Y7I^9%H3M=rIWD285Gfd_$Fs6g-&4TN%3y&_2;W0Zgk}?w
za_=6sPZ)r-$*f_hY`k@=Ayu>ng@d#DTXZ<flo?NIcV(LLa^#LpD@Yb`wN^^;CL68&
zILTf=2*t9xBL0wNnPF9VErGhS@IHB~n5B3)pAjZflMuN<Gw|QrD;s?CdN3C&ED*OS
zCDRER%!?)Twd;ozkQHOdLVR9_D;I9`?*J-I?Y67_XRZjp!W=P)jWIW_s*^a|r`(x1
zXc!0#8VS%TpRmVKs#q?cn#1&{+~>Xv@7tq;l^n^-4L&Y(M|&?5enQ=r16|$p<#N$V
zGU`*|0teb@D;665<icgYt}9~`+fog$de>)nY&vB9MAqupeY5=L?@rVjLSO~G+B!0t
zm${EyNFQnV=DmK*%;_DrL%M2Do309pBq|<}a$zU42h~&usMl~SBu?9&+rk_=74cQT
zNV8{uni!(;sxMT=@Aj)b(6z9^hi-WTF2)J4%-4c^LK$#bcfOaKYdpP^kf|JyHNn}I
z5x>SC_yMRhQ`0u`nPp~B=t>&gGk;%$c%N8k@8N%$iD@4a!%(|(C9~zX_v_sTox}<A
zEDxneTSi#toc;))_SI27l-z67;rR7p3ARs_pYE8W*wwAV`R^=E6`H@PSE7BZwJTy5
zNzbXrHYM^0!TL5KxN)Es#95F8d2O&(sDUm6(*RiX0z4IjHwu&fGUy-9on^Eb;iJ5l
zLB=qk<hzyqE5dv9O!H8@yAa3ABD+W-B%#BKIjpPnk4Xnk@g+?%o?;lo{i=vyfR%C1
zFC<gb=ih0872MDM4yQlJzo~Kf2oM^+TT=ow9B%-b%X(Cqu~@2g0H!r{G9+uPjS_o%
z#w3RsmwkTCgQr11R)B9#p2km0JL8$FH(()G*ehZvT)`pJ_qdP*sff=qc8hki&2YWa
zFXTa}1n?g(`;i7zFMMLAd60j5;9dv;Yv^#4hU9{$h)InZxm<dN0fby$05X7KK!f}F
zb*}Jh71F&iH{iry(MBYIKJA47pIxsIOVJ&&#}qF(FB@%FvsW7RBuF?uy6op60enVY
zxMoj}B^K9IZvH(7SGi$kowIB}flMXg<oNWtx#A(~qs0<Gok09X<#MBxa-~*3%x@hy
zL)t|+MOXrWgjE^n`xP~(NpOPCm_ucKz;O&F#>sT2FIn(x96wW|MzH>Z{$K+l@aG}8
z6emVN+jssSjniGZmXNPZFtVI4TBfB)_LyEv6_EK6Ls^Fiq+Is{ZZ3K>b*7~W21#}9
zJnFv%kbM7`$-~!N(d}_e)dO(jo(KsJlKze{>Xl({HqB9Y4T;k2@Z>};t`hD1DmD<C
zT!IQ4DB8Nl+QwMnMClrTh%q0+*~K~QRQ}16Re(NBeI&MgA*vR7Wuyth^8_+c%#(=G
zg;($f?amb0`DpKGx*d-=r}OhOoOla<Dm0HBQXDcVC(;#`u%7)9;Rj7eQQL*R;N>C!
z3T6A<3lKNJL{T;eovS}lZp@1AxubzxSE+UuV$d|QW#k!x;H}TvqxXL&KD1M^9Q%He
z6ZgH$h5>Azg;)s2sFnX@8vfu^vG+65Lhfb}t)iMB+XuUzefy&Htz(>7Lm<1?o=E{4
zqX&6#ZqO$13oQZbYjF#N)sLcNDrR67tPVY12MNsIb{<<)r!`6RZ2W|!Z8tCieo|33
zi1qv~T-j_0<wA-2t3%_^N7hB>iW0s!NG^i0x2yQ%t)MVp0}bG#2ekg%oXooKzG6ut
zec^f);@(EShH;OOYp<o48d&%JD#K)C(wF0i^~YT>Z+dLn(GM@`1x8GOmIsf>Ma+_7
zGmm|(C0ZbVC5ewJ(d<6^76s=Pz$)?c)GW8lu@oqkY47A!;P*8s!q3_RE%j0npP+Fi
zu15RnsE<J+xizw0n!!sz)3@O)bL6v)oy1<a{$y*F4{=o*w!l|}$q$<9H(bXD)vV1a
zN^7_95yl5#n&R;U%LN4+3ZpJoX%-H~(4Wwm4f*!EMU-shwi13$CIk!kyP@U}v~(%P
zgy{3he5NYHv=TArADurb(H1I~2di6&IjPT*v)(i%sn!bU6KMDD>2SDZd<6n|Z1F%S
ze?Hl_XAf<7|COS&hj$ffTe!u49A?doGv1Qrv;5%FrxC63;QH~{jnKtZjdEq~bVAjk
z+9pg(>Q_D_BW6l_iw#1?r({A3oHB#c`u8GgZzDjH&jN1LCDR(}O~bL7ZZaj_`a)0Z
zyV74I4-+j}<)#Cw#d}|WCHz84q-zbWV3fxsgQ3-cIV+>z#|FW%gLQ`rjv^+yZBXnU
z)2Z74=G=FolM7RW3~PCvffhenR+hPrb>;7UpH7&~(`n(UeY&4nhcKZf+Q-p-Sb5|W
z(>ycw=5m7Xyi{j<SjIOgi{4H*B?)POQ_2u%RJd`w+Iqq?Jc6jl`$uBJLqmM;y2yf|
zx(yr=?58gSJXEDP|MHr{2#<5+PU7W6A!;8|#-R~G(h^T_S}4;Wv8mSO)7lF_S9WRn
zS+M<+A5E|-{@3x$rM@T}4x$h2Z!I918}%@><wGhVh5%fNU-vaM?-C-C(}z_s$lZ@(
zVf--W(LQv8nMi%<LNK2<Ht$OED`r60X3upQC93dXQGSWnLG2^E-|cWBvBu5U1;L9w
zNVf4RUpY}pr?{>wK5kQwOn$R*i!~L$RiL*hmj-gNBcCplXlk^3GsdUpQF<4IheJE@
z6TYI7vr#FNf-2tM5XjcD1QJ|#h$`lmCfpYVv?XNN%Ag(67E}~t<9|!V2#vZY*UALQ
zWf;z|hzP1gj#Gyqjx}lKNP=h`o}{4*_)*CJ6waG(g)uqPjRabn8a<HeXhBD51n0;U
zky9wTaC3uSbSTS#Yr#jf%f{q*B$jmAs96&39eaS8Q>Mcq)?kdhD}>jsQ)C=kk5O*e
zqvnQ#3|V4k1?inmPEB69MjrLUifnrLxp;6N%`+ZG-U(r^b`fphQ<d~@eT0W>Xkyna
z9$|Nt1-^D-q!*mN=E`_fr}nlVBUpuy8#$Ec<Vy>Zs`D3kdW&3pr=0@4xC$G!+A9Z$
z@~9vnLRWykpS9^XMK&gn8tg!~7SQw=zdw;&ibQ}lo~#6WDfy5}AvE1wm8`77Bd+2c
znGRGYpWKaPL~I;BQ&0}i)Mq){(}mCj39Yq+668S}qY$+%F1f?km~mJ%t?)HdhOEy$
zEB;>Cw?uBDq~}m*pcX@m!-kBc3xG1Yblce0N~^Dsp&%D{gPqSJ1+JkL{j)|u!%%yI
zyr4k{xTA(cxIXf7&ckTQ16STp7Auz16ZHhvTH1xuK<>&M6O$qc%Ua>sgtDU!3ogas
zWKpyQjywXw46+(qb%#lbpo=HIb}zCyOEV9ro8Uc#&H`(_9dZZa>(9rDO{X@p<Jvn`
zQ_E@rLuVD!efzsPTU~6kupnC_cb$gh{@g}5##Q0Ba1q^jrU_)KZKZxEyKWuljt5LQ
zH*JQCMz8j#8RhfrITQO*_*sG0O<zait)+_TF-1^ruQXNXly|NuYQ7Cz&jvwn)3G=e
zKgWfI#iRFRztWl?5e${*_ogbg^M+QDa|kuHF!Z9RyKi35qMWt0QHyDtYK2lxE;(-X
zcVtdWKh-6QtzJS-Cbc-M4JRu-MeeSnNXo;gD>jj>?E1r%zqv_Nw7(|wg1nvD(eI}a
zY1qR9g@+Tu$aVk>BqD=82o9lKelCRU)1mT96r*K~aBAOT23E}m8|YE!iWo@QM-ybs
z@F&)c^c=1|!lO(lxXWt>qjMKCBNmhCR90j{Ijn=a0Y==3q@HnkFWP|}RcKbu61sAT
zSIyEPfbM(RQVdo{!;gtBqeBkuv1tY~mrafxO+6^1)tH}voDB3ec!O=<VJyYp95fL;
z;*L@F83vkhsq+1aS#ELrkZwJjg{6`)4|DIPx(?hH)nKSwccHvsi*lBv#sZ}wQIfc<
z8R#|@QpD@BTQ=JIIZGl-v@>8(f{WQQPMJCxpXPS8bZJa4`LieuX~<<&FA=Cv{tCj<
zD$Z2nXKYL*Z$77+;s9oF>i!O{+YaWV98uiL2g}$o{5d4N$`#zCLDQwcH|vs`wuI%E
zeVPG1Smv-FdsGelNDPio#3^|~^)+HEW!_Lr!%HjL4}Wc+X4bz=J1%IKw&JwPqaODS
zW^a}yt9ma_{h|vz`P@x!X}~;k6^7%k*#SYUKDj>i{Fl?W!=GAz^cI~)g1x4wJT86U
zhO1OlAuaEWU3SDlR5J7M&e$aveB3~3%_d1Pl8AG(0g7mzf;ET%w+!Hp-TB}Guz1Y;
zs4|*{y3Vsu9k?G;k;EHhreUIm<&l*Y=cQr`n?mA!x<PdM6mO!QqN$gfm~CcdCG-jt
ze@}?yc{-LDbmukdsY*ED<}YCtsL`SoJOQSe2KLW7RRh{qcEm}-C(sN?ga?*NE6G1`
zI&V9)=$RuYujy{5Rpe5CL`_E8%H9^Tip^AH^3|Ejd|^*KmVS#Ec|D;&tH1QH+PK5J
zOq@uH<fW<t81rv<gShChwMb(vkG|f>qLv_9>S>W@M!6)lRwc%l6{h!X@Zkfgu|qQQ
z+~C`oDuTrdU)GT6T(dU$@O*X_7_NZSznB1@R(6s9)#bz`v`Jg2HOeM2)Y&29nH?H#
zO!q~3Xj>}Y@F~kpaOPal+thT*YnCc04F%vd8K3CasF+=6eUFOU)GS7I49y(_G`&?(
zT;2F?ddsl9Vd=i&gqdsf{WUN666Ly#?~TzY^$YU8d!!a%kNK4{;co5&7)a1%Yy0sm
zA1SQBBKQgVLb@FdK8T}kVX}$*D(N=6K;PuI3@4mr=?VRS^$id;{JdIjKf3i0BE4$8
z^8!hVXBGT3F@7)ob;`%gI3I|aM^plWDM8!kboqBkU9l|5UIKXz?}IJ8jV?0!grb9}
zQpH1fO^jbE=C2Jwxev7>wvCrp%C4=D&RDyto{Rsp(S2qyiyPqLvO9OuKKIv8i+L<f
z=ZX&6pwC+Nxy-!rpl=?PV-F2{kQRh<T>am+9p&%+e#Pbb=LzUxuIB!;j2{cG(cs)7
zhD1-Qu6E$hq+L;Op*5POg13v@0Ek7$S=7_Q862gfOMUUscusILHDiP`U8SCJFY-&&
z1>2-~{pT;Ca6ZsqeKI!>KtHm;HZ!f}l?Sq?<KMCUUQ5y0t;~pHU-7sMlID`ZT&j%s
zp+nmdMJ|k;xlARM38Wr5mL%y~Vq`RlZfa`eZ->X@2J}M<Gl|2wWjAsOT5(NFY$rW`
z>bH1;smyYrEfg|0@2W`>V~o0F0l^%&kdWZ~4K?%Uv*Dbu$zR`!b*8my%6Y0EgdQd5
zjL>9Il8==%v?Mq^5q}*h=S-CQAb4Z4AxJEg%TK3>5PfCt44^X_tsc}yMW0Gb8g)F6
z<K^CtAV8_R<AU`kbZBv(z48S;$etNj|GF5aQ2oxWUIvY77u@La`I!&q^!hAjk8#qQ
zgVK?vC*&oN{mpgp=<OQNtMvkFU&i%`ks}I+zPf=x8?R|316%JG+ilV0)AWzLyMQ^u
zS^i$z2l|?}AQL^7J*6NHuo4+5NeRMB68rQsMAu~=!A!`&FZn8Q;Z)8r{xw>uKV1BG
z44?MR&tCORGEDPd9u3%!pUH+k7Qdg%jfGo$fQCf9{Mi=hIlik4;-SbPF%&1MXXC*K
z{{ZE;eC!sYX^5L3F&syX#A(C)fe(eFISkfnTbLOwn-rb%v9}{=sbn<dii<&z<T|P~
zk&Jp=Z&J&G1DVfqPJ0%oY?Ly*$WLA6kb@i>V)=_+T6rfFGqip&Olf^X*+h^QNzs++
zsUhH#Q>+R1b;3vo^Z#kWNo*q6%udadA`ObceTs0Nf<j6`kgu%V+6q6(e>2L(&~%b@
zD+GjFLBG^nzw|dWw#C@~CjSwU(#%(YwFDp^pQ3tk4Mn$bBB7iTE!f)1B{ABa*+Ru)
zALtkYCr<ONB|1asUPniJ?=#mCDXf9Dr-eI~@+i)MQ^d6fm{e{z+MjL29S9|5duI$$
zpo{S4Fn(z_zkU_J|B^Je=Dc>p-z!(q!?SJ#<6uVCD1@`1+owfdYPZ-juqT9_(d2K>
z{N{ghL8o>L+HrJ0T*wl5fM-+G;N-Qnb?|x#8(Dc>*$Z#g3vQ;ANxQaqRz2MCy{~)~
z)|b_KGbvL`NA1;G2I3QLgoSL>G}%Oj+OabYL<j$b5AvoAev;R}qxj&PH~zL%r}5Fg
zrfN%Cn2)6BLU%0jFP<cZh$ih{)gn3G!;PfO7Jqwq!6z=J(uD?h#1cldxM}(N7Gq3!
z#-?zQK%I;3`N2!24d;4@Frn0zlet~^z+bz}JCJ-<_wSf@x*>tSYI*p1oM0D3#Ui$6
z*TZ`~@i|09b}S$NKk>B9SQsjrmKNd*4O`s?s*mG!Rwc-}_?sQ~n8&c^Sqaax&IlIi
zZ6#?2&VPc4I?LHPD95g=VCcux`gb3wV6CdC_^>FSj`%j?gkd-uQjxhnO5{(+D*o2h
z$~e>%7HF64j^-=MX%1a{ZgCg4#+S~GnCHYXPEB@u&ldQ`=uxN-K;9%pF41{3lug@$
zBSSYIM=yqx+1_~zxTr;$u<(LSvmC5j#Wd+j0yOej4*%;i*U0z?D{KCF$Nc-#?TK12
zCtW}zVeA_}Ol<4PV+m>EGYx6!TKPkC!LuXd2`7q3iHhVq<=;KfqepXY9HwCqO77(w
ztIn0I0N>LUq>&V3P434=KxCzKZh=K}&-~u3SGn%u?{%^Dp%ugUW=sQ6>`$29n{cu$
z8Xvck)%Q1e64!y^_tp$Po($sW;#3bj2K7;lOkUgre>Tghd<KzbaZxJ~)o4(?&5GTU
zFm~F!wGfgQQV(a#KPN4unRn+qN~<gs3VEFBXIL_*(z=c6_z0CJyqoiR1X;xt<5}+u
zZ#1&<_&4XdsT_jsN|{8Tu-xWVRSl5D8Qm~eqB7<NbrMb@M9fcL`xE%APXd3xE`F~i
zczl16p`sKJ=;<j!W%MI-Un;?rk9S<iiRY$m-$CQQH`hoUm0?j{DbLy})M$XT)P<a^
z0UMV48<Kv5HKW(bB><lsUokM<RXl$;mg;H%H>5B&;2NA`zQHd%;W!HWVzVsU;+MYZ
zHnqjEh^?^kBj)pnY;&z(lyl~07`ui^`4!h`Yxb?w>w-Cx2<g{(2geDlso#EQ<j<DU
z9J@BNx!LBy!Zetn>0edCO=<QT^5d|bs`|NMd@&nWvSHi$TjfgJP6Lf$VF%!qfz*##
zY0l%MBr9PxD9BiprYb+bhq&^gS0=;f*q&MqZxauJxMW3fG%@4$s2AB0Dt6mSkgU~A
z;odlY{EMKqxc7V}=?~I^644{2pPku<1zu1QCNf7Qvs%WUvR_8w+lMfiK?W=_VsP36
zNoTWPsnVVhrvr(61ow4>hwy9djmvD%sWVyX61$w|{i$FMd&*g~WP$9wecvWj^S>=v
zCKg}2RJh=D*b<EiQ?uy$Q%XP4u>naUd1UtrjCuoIYpFCWYrC-0@Q3TlT!*q29A~2D
z0g>md0zY#a(tp$-D^@(+u#+G+!7#x9qqEUxuzn!r-F)gpl0p=9WD}rVQW$ZUqfxec
zVA7~)d#It@fdKJ8uP2eQA)%C;sxhM+nsTlPR=}$`D!T!Lv3CXGDn$z7_yr2Dqds-D
z>|H2vETd_aHZ-NMGfe;Zl44P0)LZQ22@U1fYtczXxvDw*s~vKnZD?O@4@1Wx@@Z;G
zk|N(~>A_~RNNEF1zYvxBw1#_rsd$@}_PpU^crJavbR0^oS(+XVZz_?=z6Rr|p1g?Y
zQ}eggc-P*Hv3NeidGUPm)yCgrZv=PRlnBX+Q7n^2ss2qsF`49#K8-A_`-2RA`SEQS
z!nemcRZ^POWXUg?DN_a=v^F%0d5E#GsRfBDn+O|lfI@$(P}eZMF$*f*tT0<8Y<8(g
zQvb?$wI$TVT2J|~L>BFa*-(HRLhs~}FJArfyf9nSaEZ?e6__}qGUkbS7&pn0kk%Uz
zS1LDEo^Dg+Q-ez;8`>M`nBKnn`@Q(HG;S9fyw|)uGwd6q2kvH&Ul~!8thbw25xVCu
zG<p+~sY=UHVb#bfM}Wn|@^|~i0M0Q?Gz{`CH?(=$+}u}yfcF*QRmbrDl<{A3@vi}9
z*;K^^QRY`lh$=h^eQa-q6W70S@fFJ|P41K^Mpq}?mvl}(+-#Dc&DZGNy$%TZ%szYF
z&0zhD$NJ!F67+M$bvXmGeeE<I%S;B)@lB>Ii2nm8!b;H7Culw$Ok^HKP-wOk%2{DY
zrb_)8fwpOpug>lk^ga5sB@e!=)FEq}P#l$t{SKVfk=%=As~IMMrDQ%$<2{NrXioS6
zjsEkXBcjHFqH~5ZZ#W~}SLxM}#2M}UmBfnOpo}xNF%6qUWf;2=|8V`K|4Lb;Ei+G1
zeCebkc>IrkI;=V;)#smOY<>!S(+!*%XVbFum}eDD#D&(fMQBnaQ!f^>DFy;I+O*s?
z@<iUEwU?(19b=76BZ-t3TL0alwvnR^Eg=5y^8er}oR|yXU+=jd@9p}Iteewm*=Of!
z)z}xkw<EC%^(rdLtEi1b%TjJO<5F|scGId1MH8GD8O?N_U<1|pm0E+Pj8zI&to6s_
z63LM`Hn@N6ZT&_rkv@UE-Xf8|^CM*<4V65X<)ss{0VMFl2-eFU1PHgo2vZs&;0n#R
zHjjX7jO%MswHZ#VgdL9}${yx|$W201bz6G{L;mfp-)ctr+j%6<v>+u<$dsDa2_#LU
z{qy5c{l|nMiiJ=ZY-jqgXoJEbH6wPiM7C!JDYZtf8>d_;)#tDE%Wt(rH#LKl3tj&-
z#48J}(`^)L6$D7t$aDS$XeNjBGk7%Dl)uT0>nM=poNHl7tu{4PAS;)wl0LnrvrhlT
zsr|c7sQW!-z|1@7Z#?yl`()}3ZaJDj$r;GI5v!ozObBx_oG|Px)T6HxXt&S~vLx>O
z6*u1;KKA0HGVvp=3_6~%!bq4x!w_OvVogh^5h_11Mo~ALs5mCL?5K}uKP1CT^_mWd
zP>n8oUhG+rr#2>Qlke*IL1W@v+s^TMAjE2-teBxi{?t;F`C2zlO!lbUqL9q@Sqr2@
z-hdeTmsVfS89pJx;@@X7Ff2gy8d|98GIoayOZ!jMTvFr#8y%TU$p!6dPOUw^3BKf;
zNRVp&3i<&Yw?0E;W#NcdGkRuw!CnqBK1M6jy4CJ}9Hhrryj*rx5-J@|<UG%@yM)X=
z0q-}GP~n{VX*D&)`CcC{{V7|rt*l+sVPH*MQ%0(~Oq0pjT3M9YIegJe8AIm+S+n?{
z)GkMtUHp5F3zHm|Ua(Kk!$s{Wd^8(vg<s__C8luMETO}`E~J&Sim+m922-rsgR#Zn
zp7T8OJ^jYhJlOd@+*6S<nsgiNi2Bn28RmZn$gIQD+Zpju{MAd>2#p$CYv<ZiNxI#1
z@az3qE|4*dl)W0#15Y!XBU<Oum|cyNTUmnyH<g+X`-8$Z9;3ZDDvu076MiDKh#N1g
zV^op2OZ8MaxH$t*3mUXObif9wXIX9$G}7*QM}sn2k@w!|;J)y1xCQLs+fbflH;_d+
z?Kee?DGTqg^g+Je@TPu~*rmQ%xOP<wmINC;lxh)6%8HjLM%-wxZXUmwN_tWIz{hp^
zH-E)fKPj}po9HMgFC${fb3Q3^m#u({<eOB*T&@|j!^vJGkF@}LjYz!XI4fymBl5VJ
z&$sEcbgeBP@%TFZ&NSpad)SJJ(9=O`$Wo+S>Jl~4#@6J#)A9>%21M8jw2(!mP{<`B
z>|DLI;D_>!&*N;J3lB@xSbEctr@8*)#v-Ye;->qHf|dm@SxZocRz97*;CD1HG0#O!
zq`&B|jUP)<LrV>dI9SxPjPIy3mD2C}BTUJGzS|xSM5BzorObpy{XB5-`h>1C>3ZRM
zq;6I&0IGYFK_7bU$!9*U4Jg0V<W_<$$!{@sdbG-wC)kS&Bn=|H)B%@0Hge>qCyr*8
zev)G4YN%31p%e@bWBNK;Q@S&)dO(CGe{(Z!54mO3Gz-9DA&=YtS>q@)zz&Vo3}oik
za<J5<LMqf5vG;eoeDi67DIxicy&*)^J?S5#_47w8rOBUUskVsXRc3D#2~yk?#pU<|
zx<>4OM07mgHN0kw3ks5_<G7Ht6v|euh`HI0A}l51T}b}nWTkfe0mCIa)BgzZ-u%a!
zWUosme<TW2V)3Csh2eOk(Qhv$)%p6*jB?`_PnAT-Yh--QposP-piL@mc?~RMyvD>A
z5KzxPkfE|DRX6u-j1ULvnTvb+8e^ZIJu1ZL<_*AUf*Xr5lciMmG&{)GmAuIzD<P}>
zMcuE9<Bp{@W`}l;_RbQEMBMpZbc18L+Py_Pqa_p0KC7Q@q)8x!R$gx`(QBW(ijkTb
z-ipHvmF3Z;=`0UppdH^5E^_R~CP`J=5B+o1BI-vO+=xig9ayXSJH(lT)7`=U7CCEM
z6Uy)Qi?+Kls&Ce>i}a?%wwH5<gR@(ltMf5F<fX4Fz>#}tG22`{LcP7T0g@cPHh%BU
ze4!X~%TrBBO81OEuz+l>gzIn6uXb2=`tsHouH#tjt7^+nAOGayB93fpu{;E^$T%Ti
z<2I)Q<&RAi3vXyxhT5FqqfFEhXrFej+*E#L-zgQ|fqLIo^=1IkWhTA%f4*XT>8uLP
zL}D9e8Rr%JDK_7{GFTA`hp8y!A8lUxjh;m_L9Wvd!yTK_F)hZ*KvxbPlV(3Hx+i={
zwsrdf?x#bBe~wrx;U$VU@0{qLP(I;{DBiQ@Z{j7_g1&Uzgk#Sj#cSmLITA1a3$|Pe
z#QK^%*Ft8gfJzp&YSOqvK^u_)6>GrGC?lqR5KN@v(+L>eJ1<Za57rXVNa5mgY?n%g
z_&O8z0LHOJ@q%{tTX)eaOn!~-@F2QrF2sW~%4bnr{3PxrI!!=%)2KsI)-J;&G$Gfb
zKhjQz!|<>4XAwNfzVGqc?fFqJavR}8I|mnUIR5Iu$?&RHeq%jR59Sf4FD3jUK<t`s
z(kr&K*GM{PGQH3Q>eL;bMO=ckRpSTX3tb3xg<!?VrT~7so9N=F@pD(*NeQXhZ>f1L
zw@wObtjkE@3CEJ~#4<^}D=5kqbaC)yKlEcgoDH<OWYElsI6x*R_Ss6+DAJQrR|cg&
z`4soi$@y1!s85#!p551vaaMN!g0tsHOeZ?1h^NThP#I+En=Ec(78I(i8;3SVJwVv~
zH=5HEj*`O(ZSUW$^_n`PpJjfv{;oP<>`$p02Qy|X|75}<t!DtC=E$;3sw5pE!NcQK
z%twr*#YtP&Sn3#w<@n%d)ucup!^1yNhxeA`*7C!vU)w&`pb)blL2O&QJQQH<Z}Oi~
zoE~Ag7|RS}U-=~SkBIlQD3gX~q^{9Zu++MjjZYe4j&!I4plMZ+MfP-t=i?pnb@$yv
z?OHU3BzP5(&)D}!7$g(`6=nZ$7Jqov$+O=_d(4koa#d~Ww-QMlExVF7%XN~7zD~f3
zf*hRBF^jBlyDq(jur%JlB-&=vz<ZDD&hKuUqJy`PV$!qwD;fq)e)l1fxf6^^3)&yw
zU(0w;{P7h&=OpAk!*CQuy-z2E&#vwkw1cKDJ-E#7p}8p>SU1q98wx8hh3;a?U1<Hp
z!~2<fUxhx&<7`l2PaX~AXQ<ilH`o`SjIk;vQ5D<Urx#XJ;Y83U6!nO8N?x|F$<)X=
zWvkusLIGN)l*EE{xz6)?@TZ5@HxJS?1SaQv;rU?jAi8`uD}+`p2ch7#UZIq_sfc>A
zSwfS5i!L(GOCy5ucZSHX<>>bEq%hl}lg?3deYRPI=Fb7qbyG#o9Vcxd)P&wUdl9~1
zc$r1ZS3m3_B~&Rc{@py{u!)F5cyGihyb|%yr=OcUmfLf(`17Nf%8^G$m}!ijXJu{$
z;s`9XR_ap3!;8lp=c#wrz(1Y9U)#Sr8iL^i7%v0LGFB<n{<sCa&#pOsPZ#TddYnBJ
zE=veb6vDeAsn=7J3M~}X`cshEODc1mOGrVQ+IY1u!~wKN{g=5DkMqfu*E6HYYPlF(
z;&*rM+~3_Xwi^mJmX262Q~xe>cyS*fe7nvqQ?mMf^Bx<~W%VAh{G!0y<ULaB5@J%k
z-h7FSF#qYvhQ4z~z$hi%-AoW+5R5*?fXPO{%uy<dLw6<thEdVPCxAdu;Q{8l)lLr*
z-v4llM|!t({1MGK<vrkBAF?)JA2e0tS`!esm`Yaj-Z}JmOz<Jf_6ZfnUKU5Nf0eo3
zmPrqXoEgnyl<BRq68iA)VckH#4^bSZGn`Ws6+h7b;jzfO0Xgp!GWy+%<+1H(L=(}G
z-n<<hS$!3jm<gxcZ^R>))^_wVyJ8!g1T|i5q708$TSD7uN_c1|HJvM|h|6F<P=(-~
zJ!8&*xsW_rga@5(v0%gKv(nHHxn8DLSx4|+PSCW`t_l^F(5thG+>T$+_6#lnbcl*n
zo%^b*%F>B4<u&#vRhura$W2d&g+L~JB(G~ToS8}ut5PXVGq<qR6qpdG>Vak`Z>=Ck
zRYj0Sr)gv(nLiV)`5xmcW=0VIOEv20sNn+UEtj>{#2ay+8GELz6G`wG1O-zkDO!$o
zHB0{p15=c9^c<J!*Cg_oTCyqepEs^JJ;c!soJ={Z@-jCZ*xBGJr8N7q+=bJ865U{T
zP4x{R+YL4zvq3z8iy<K)T!U#*uB@?n|Eh3z)W#Ws_*_|X_yQ`>nJ|DE7Y*y^Ak@hn
zJ5lfq33a$7Fu#0B<oh@MeQxn2=GHtD@9iUewW;k>4(AphxNilM+vEe*MII^A6<-Np
z&O{RZO3-PCFQ4Mr4^M!m_`W3~FwAr8mFXv6(liwOp-zm$3D?hQkV}D_j%6N<tx;7s
zbGgLINGu88<@rTT$rL9v&xR?hoNVe11yKVrmpC<uh+{rVlT~VXvA)$ZazoJ#J$=X<
zu1LS#emWM3B(a4i4MN2)CeiYDGPRx;0ZPezAmz1-D^01oChSr|;esqPNluERgsTCH
zqjx;%>MD<yfr2fVAN00!*9j}#IB%%ie<tbR69^DHXLc{VVB}>PCswCf)pdzkB)Ud5
zRzjkps<b%Mzhhc}K1pg#<TF=1V+#L@e_ENNFXF{rX`3rSjq_CW4d4#<uMU+`S~*AI
zw<0h8yCu(^!)oF(DBmk{3(%&}ZRPf$%o+(la3#0ND9>M<7{@S!?;eyb9+@LGwM+cw
zJJN1-QL><_JD6l2C3#OkWkiO)qrk3y4d1Vyu&;g<!-EL$`Cz7S^<5tJ*TqoA{CYCX
zA&J;*!??bnr{_DggX-E~^ueB1Ban9>Y)g@;aXMbX)P;vh`bJg#I*8gucc_8^@*?L-
z&xrS&qPcw%m6KRjCXk~p{moYO#anbLjCUYZMfba*&@9e=Gg$ca<op*e&E;{nMwg~b
zBAiCB@O-9T%)OM~G@LmYu-=5qo9vmpt?|o*%i>CM%1nY`r89>{{MJ}~HyeUwhe=qC
z^`fF~E9^IM?~LT<4)&XF#w)`y^F`*r7$ZlCER(3aDjvQZn!FQTt>!<<X!Y0#VwT{h
zl9aiMMxPo;`I3T72DSs@Jz&K-8ZS&d58M^~BKT_>h1FT%|Mbo-p{rk~uYg18>@^(G
zl>gl$5~e0V`_uK>Z@%)!J?{(W{bE}#w(vlpt;Pe7$N&V3mC&MRLnpv6l-WEq6|IDD
zMnK8!M?z{U#*ES)gbc_{;d;7~o~#WkHTp~yeWyIHhdwb7K0<bfu@K7ZVn15FRBJ{N
z?}wk39!YwzMhkR?T#&wUP)-`tL&9!0(xdFpN;!*H4KY>|uxv@ZrU>IHmcOV-B&o;B
zhgL0V!4Y*E<Z^pXNN5UH%zO2h(A$FM0VUk%Yc@zzo1}eD#Q2)VrHRJtoZpRbHAlO#
zWlF=tzFwkH+c8bp6z$VU?6mk^Zx7Aks2eVChft$iARSkw91~}fm0OrjaZ!``Kuo!r
zZ4s0s5B5YFHK?nkpJ`-~!*PT35-~u-7UA4}N|;!K&gQ1b+u7vS#n{uaISwqE(Z?mW
zY0=&h*(#+Jlp{fNC2;VXbp%8gOxfo6SWP?e<EaG39*W_vRb?<gYWnjlFfE-z-bvBD
z>`w?Koa4;V%h!i@ECoi<7qGCW)q9$dWNad0|DbfWK=UMT9BVUH&Xi8TBbo=UldI<J
zB2IdY<2m~sibQ{IN_e<W)AL#ZghKzoPHJj^rQX;4#ck}r&Qm+p{ED;qu+powfa+~~
zCY!NGDy1VN1moF{Yu@v(pSk7~@fBqCXCnB1=1@3Io&$E7Q7S=$Wa=YIlFsDnOMc!n
z-?tYYS`wfJ^7{^!B%Hu>!ag8npwOk4qRB!*81s#K<>;ylApOg`Kt$2iw1``Qejc52
zO<5a!n)ljYZ6h_Z{+jE5md4-T<e^-!?69DGZ7jyTvAh_XJcRf_)$5Zs_0Y=qlGImg
z9~{y(OLNAaM&5yGa|MGy#cZ6h#hC_d>+<XqyMhWmN};liCTK2=dvUt8fR4GUYL6(+
zCT9K1Nf$~^B_`R|>?F~_=Mc-vWBU*Qq>+g$O}*zEc6%d6KMYZZXD+56!A<nj(J2YR
z?a-rT5;C?c_Jhzn|8Th|nRBVR$@b>+@hD0!1{$0vg{IUkdC%62agDF8{zUDR0*LHK
z_S_K!k#n>KCw3X0&DV4_uglZZl+{4|^NhOav+8C#MN_!6A`xA+edK(tfhUrIM$TLf
zSm~+H0LjZ)`8_-!(mwMc)he|!GS8P@Iol%_&PPiQ-pb_}H|fA5CwVD6<o#>^@K|<Y
zOi~wkn=z3<pIWI9KNJvu>uX<)K4O%){JmV;GXs5h%nWidwHqdR%^ny7+l#$s9Yr@3
zcA4)n5q)a1c9Igt%hkHDA{6g_L>{EREbk>);Yx$$ks%!oLya%A%71`M+)hlHOE`%^
zn<%@3V&82`-~`Z&KKvCY%P{+lLy1j+B!NSeT8f(ZT(pfSHk6b*vc##m{3xSdj*?#*
z+rtG~S40-m%>udW2u45WhBY)uE-?)sDx))&!`z3$4gMZG11kzfOG0Z`{@QX((HX{g
zfYLvUuefq6T+JRLv=%*jr_sW@7{;qj*&Vk!G*OgIwX!ummIx(i_T${a=9K90ghils
zt480A!I$yG?Hb~$(jsyZ)0kf^N%Tr#@`A)g!we8>Ac#9Z)JM`wEZp~~EY_r?JP?oF
z9baMSSAUmvSy;~7u3V6G?SK*Z)DW)I;ZF^5o9tbs;>1DF-)giJMAPOYg<6z*5&V~a
zcoOXt8!Nj3O5w_a10Ctgsa|l_U9wVQ6T<iRZ9TrecawOf-v#LL<K`$B(`p|72za1R
zCvf9px8_S^3YaXaCx+h65z@%|{_&K;qW!}^F@81vEW=q2Q_R`)-)D;HIFtfs0AV-+
zr$#v<8a_k4EGj%i)ltDA8TNMypdgj2_eV`(_+Azq42j@M5Lxjx3+_wRwnd^bv+SMJ
zwj<``wBzW>D~qJ_`FtX!Vc*eV8~(1M&e8*!#M22!Sn5T3=l7AildmrGBG*DNS1>1o
z1d2xC>#=a5<Rie<;Upqy%tR&$<@%U6sf0_<P*%W>Q+~eK4{0i=<#xDPs>wXCTzXlW
zMhe)YVWj*WCQ~#No6;{=9l>1)62Zi`{%2?r1W`InEo6#`^%A1B3I%y!MGi?*P!?x~
zV@FaHTuodbH<7~CR2+AK^0{VPq&Z>Lr$&drm;muZRae^;t|GY#m0l~VqXYg#7)CUB
z@5W+IDgHGVdv4OGjkZy|fbF`9-*YqvC{iwxf?HjgJ1I-50$J8Vyi-91Nx0j$5lr$q
zDZog0(z9u%I%B>+efGqUVk}$RZ`<FmSm>@zPeEkv=%19<Kb!yfj>VsLONiDzJN$JZ
z-7~7L-7|cA%7-P?38mi(6fs9^1djoW_mJTam1gR@^8J#i#8J$XT-P%79hx~dA<^AK
z^H`29SG_*VKmqujfJj6LT;w|;`%{k~Yd0P|rwt_}Hn-9gy;@aIKR`<TmVrxxWG7#Y
zupVWl_LiQ%Qnc{%COi73tHpJbj>o3+oJ}FRp_S{y-FREA93}Oi=}1=gY95r8F*D7$
z4=#bpt+K{gmp3%h@Itrvw9p6D+%dy5e#fILqV7hhHat35<4=2FUcK>NOE<ZfGG^GN
z>Ro0V6o$A1o<bqTgc~S)KzwyPPEzf;)&bVaHkMy_#V-&(XW0Ee0T2!E@`k1^K`?^J
zkUE6t6ujntCQv}Ug5gXiMi#4GAS-B0kl?eB*jFVBmf7wB$(%fj0BnkHm<U9Z&%sF{
zvLSyxCWy<HL79;dyrsmHVa^CX>NqpXZ}aE`u$Aok2H63VabKy{qT;_goHNXGVN{{8
z#DFwwM3Y^)r2fhW53*~x{JE@jZr^4hGq%P0czFsF4d7b2=ef$Q=MS#cEHExaZVT1{
z;~b)mF6Rx#pvcQ}7FX<)+pgDTP1+Qw&fCpgJnO-FTL=gF(1daD0d1Z~Gk#04vbLH^
zz-_hpE;yx12M?YPQz_0+Q53)fuQD6EzL7mMC?B2nrCYAaD#gS^z&n6YPBR94h?F2$
zNFo<?7cojwG~4J}vTle`15L8ZE_6bJFn(Ai^n(?trL0h_8M+vLwWXzxJ~#U*q%6L0
z(ye4lrhJ)%(0K-Uewv`Xx%+S+WZsZ$&;PKF5R3kv>B2zHyA4&8O}bw}mF_D8FY;{p
z4?a3hKOX;krgDl=qB*pCDWZDl*s#LmG<0qmYJ9LJUr>k^r=*E3MrA4yG%bNY{J89(
zREs<``R!UOaguZsz^#yg3Rf-xa*Pb+A=o#a1|e}Vo$A9i%=$6in@fZw$q%G*{SUi-
ziIT43lH@NdgO|V_Jt)~5)ThS2T?wcu6z_qU^68lK-2tV@I!UGkV`__gZd_g|bPA5?
zX4JEIY!|!7GA>mag2_b*01e13Gwz!fjNygd&DL-@%z~jzXb7zR5gi#s5vquBAR~nA
z0v04DL;9y}v<uuBk8P3KR!d<PO<7c#m`yayv+QpOSH!m%^;J!=!yy4P%?<$>K|I9)
z_NtYfB|%`--8kce&w_WZYA>BOb$SEVd`fgmXx%PD1VCeMZq^l`ABT-Nv1S*N^Q@Dl
z#zS%fICPOlTN{+gA~rkIp=<+NTtzk5%Sn&Q5#2zj<Bz7tmN3wXwCjquB6oo~0pIT)
z$!rGCe|zVc0N<S@RsnYLG&mL8KhU$)@GWk{|7~{;=rZ**2!rEtrMnU?!L;(AugfsH
z@-nofrtDEY=m<u`euQOOHv=*_PJZR~CYH>eYl$Xo^*lgc1mWwG%7w=8Lz2ExCeS4I
z4$9LU2vh+>1V_FJ`7ors;f8dcr4@uO3Iwl6DV+MUiQm6J6G-LyAEp`Cw?sI!-So<i
z*^3l!A{d@yJBXy_Mggs3DcF$SEnpgRVv*su^MA<!tARs7rP=wJp)K1GYW$0cb)9O%
zN4#{=iSuWWDnkY9H*+xySO$E63_vO7$VULYHOC-Q5yucLhKa#=#RgWc5W0oGL(r@$
z^{J#S1dA*<Z)$K4=+qUEJqUSV)}ogJX?@X7#g2(5)WW!?Ct}M&)B0@7XSli6mP_%t
z8`Kc;*92#oC$M(kX6)c2>7s?Avv4?ElGK3C<z~7hP!<{6-DtGaeyEa3G`!L|r8j#;
zLiyEPCnlk1Xe*E;6<Wz3(w(fU-GMv~I0^k4EB+c$x&HhkrpJdOh^ha>f~OiZ&9vuK
z14!4qZ{GYIKf$`zo4PubByz8#IdWYY5X#kl@b7aD=PziKoe3=xSThGFYq8NY=Q&V-
z1ekS7x$?MLJbh{q-6t~-r`|~ihY57I>jwbTE{fZkLD1Pp$;Piy%q<4e5DXOf1CfDP
zC4X@q0MsZWVtYSsCuv}lCe1^L2U5`^>JEs8%l&R>#%AYZ$^3!bJAe&mzM~O(83cUw
zBs{P|1Y$j;x)Lt^yoB-8H3u#Mr-+F%0SCj7jBY#v!jg5MUCRCb^7X1!A`E%cB$Gqy
zDB@%kNYE~f3SG%1A<2!HD;r*S=|Tir89+?MSZ{=I@zGHB1easLuE=enJ4U6%&Pq(P
ze=Wrt0Z|5>2RMYQ(tS#Gk+)GVaE8SL=912@3Fh&mSOX4O6Fm+nT>2j_P(G+8K(OA?
zHG-)ZpGGVZ#Xn`r#yF)k?E<z*Bg2A=2FgY9C_2VH?G4u(g@Y8YS#30qqSHYQi#1vT
zpf=s!I<ifQ-*&)#<>Q5UhIokOOUc-o5YBxc|7|Rp2e05ds{^h{3Vt+O31v|344aIM
zGm4inhn{nzaAmX&C9zj4frwDC0JnmrnAifY5%h<A+`Qg$83)P$J}oJ*S;G3zK*;gQ
zOObP~4EZdeVc8kMj~amjrFjNHzmy+nPm*n+<y`0FBll)!K$b`Nsv?^F0;mr|g}t#v
zSPUKJfd^9o>H+ov4uoAWE<#NgB6_HhrX4^k#E-E#u$;&Q=9*~*koIscXwCwSM5;{j
z&xWp|x)xT^*Ag-FBP-Q9so&RPT(D}sy9a^zy0DV`h`Q7hSI&+~rwa^Vv1JX@gsurR
zwb&VOiTfZ7(i>DIK|o6=8w4!vrQ<2XmbJk042-8a1Aw?r=q7rqtO0?Z^)cWspr;`q
zs%Vdcb&44xJo_`1723Rz__jz52hES+I)05n;ZrjqgM6zQxp<i}z*FNj#!7arIV5Ge
zxI<+0`+V_~vgKl+DHj!}NvEUB!4Ay|K-W-<Sl-Q&8fU3~sP>?S318*1_$vk1(kZY(
z^7_#DvKV$YC)A<T43`DlmOAT=t*K@8<8tQWEMzU=p)Do(G~B<3D}Xa@=d*bllG$W6
zZ=TPo@hMiqy$_s7CP*?1uQ#<%)9yklb&#^Anr@oDI|Rq+h6XX`KAW8bycN>PM#tvB
zF)VtZ8Kx00qeET}4>_*WS$9B!3W=%#=p;|qq9rw2IF(H3PjrJ0miL_ky_=fYH<(%b
zPW6H9_2)e1{HP3nKu|_SuU`5AQQyORjm6;-oj(!v^_d}k0G}*qWa?Odt9U2dGr^5P
zCc&I#Wnh78c5P@H3=BIL0W2w*_VlWz#S+dyq66wXPy{&zP(Y#kl?*c&naqn0V-Im!
zVct3kcqbKgw$(-mGhkw1ka_ehXtI49?zk*dqCU_~lB<YP*+MvsCO=i}s5}rqmcKH1
zk1H|4CgVUD!)C-J0ZascM+l)#)Iv>!Hjb1~u-X|2nJm0drBYD@m$bLwBhf|TkuZ^f
zm}<DG3<_p5*j72JLuHd-{mcZ8hDd-;nHYZB5y8sB7RrSIW0uVtv>gFuIDo^P&Sg+U
zP})x7RcPA<(y(?M)(wM7$61TK8pLHLaFcoFLG9`+s~KhSvofMW<NcA1NRj~@weOn&
z(SpLnb+Y<!RX_w-a9LPDqtV=7=1pVEAQY={y6){JxS1l)rX4UNGahQv#S6(Q2X%sT
z?Wu4smd!Fn6;(QsT$%yYKa`s86q|9vI&G9eN85;@Ft|h;D_MgEU>BYj^Pyg__~Gz^
zVrbS#zm;grG_HblLAo8oP9-#NZWhufM^z{3$3WUXaXp!-{3nNL4!8}cV&;ca=%<p5
zR-BL>d3VU1nt3Zibk$*NxWDo#&_+*|0lf5wV?=jBDrG`mXh=@QcmV1<zFF#B_5u6$
zB20tPQFNrt`^LYP&RkYI4!rPd-40eoBQY^!f+B;81+<!o66bZtWlO;&Ku@#)kmE^d
z;<}Yd2^wR~D$22w)w(Fi%M@|+8l{Y;iR4GL9c=qj=6ZbrMK+_jLDI<8If!<Y3z|a&
zc?N<o6s{Ch1zb%J<Knu!V>oxO$u)7p->W4y2zy>e5D@(8NHwYQnOtxt2>|}8N^y*?
zLAVaH#{wjP5`|*22MN^&kfV^vT3GoBfg)2d0D~#z%a$(LVn&qQ_*P!*r8zUCG6=Xh
z2)Hc<<ZJ=bBYLbnW3qnmpLNz)``1#)B<GoGO8jy|2d{o&xW*iE?JV`BU@b}?II!ts
zqq`+>Dp_VfW;%qc9N}3_UXK>S6uMG{LPNv$U0AX?USRQuh@!*>kjltVfT(mB(+Zwq
zg5odCBCXx1G$Wy-UE5Uv#?9=l*mm8)yx2Nk-|I@sJRLm%^SpL|459|Q&g?!}8M|UQ
zJv+MwV>MeE*c@<MiC1+J)w__DBRBOo0Fbia=mzr0*!-!Y+Y%8iA=VYR7(>%Y;7T?k
z97s`Mem7DIS@~7AlTK4UNweiV>x~Sb{@XV(9;ls!iLN^^iEjxhs!PZ&-&GZW195r+
zndNf~o5y&{3~)cb5$&+}@B{56aFCAkWD348T0K@~OkjRv+rdrAe<)I%BI2)PbzK|s
z@lCV-d|y$1{46^TE;86z<-=ScRwp{iz6%o(UH|^74(U`A^(JYLS^Px7UNYX#$!tEE
z8eLVw#5=>3-R9@LVgOe(L?0SjGzC!3xZ+r{(+i8_xgl9G<)?l|Op~UxGr}(IbPX0a
z1bc~Q-CsQ$w%6=9msPWkij)lLN`s%BjKG*x$&BJ8m-_)4ksZrbC#k7mq<xTFUexjr
zTM{A+R<}qQ)OK}ks_O_0Lg!<;jhm&P0e+_U;i+Rs0zGkSr{$m7%c<88N|<nVQgF4U
MJVR|eexoq?Fm#!HRsaA1

diff --git a/doc/fonts/OpenSans-Regular-webfont.svg b/doc/fonts/OpenSans-Regular-webfont.svg
deleted file mode 100644
index 25a3952..0000000
--- a/doc/fonts/OpenSans-Regular-webfont.svg
+++ /dev/null
@@ -1,1831 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="open_sansregular" horiz-adv-x="1171" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="532" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1212" d="M29 0zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1036 0h-166v1096h166v-1096zM856 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5 q-42 0 -70 27.5t-28 83.5z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1212" d="M29 0zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1036 0h-166v1556h166v-1556z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1909" d="M29 0zM1358 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31 q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1731 0h-166v1096h166v-1096zM1551 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1909" d="M29 0zM1358 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31 q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1731 0h-166v1556h166v-1556z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="1044" />
-<glyph unicode=" "  horiz-adv-x="532" />
-<glyph unicode="&#x09;" horiz-adv-x="532" />
-<glyph unicode="&#xa0;" horiz-adv-x="532" />
-<glyph unicode="!" horiz-adv-x="547" d="M326 403h-105l-51 1059h207zM152 106q0 136 120 136q58 0 89.5 -35t31.5 -101q0 -64 -32 -99.5t-89 -35.5q-52 0 -86 31.5t-34 103.5z" />
-<glyph unicode="&#x22;" horiz-adv-x="821" d="M319 1462l-40 -528h-105l-41 528h186zM688 1462l-41 -528h-104l-41 528h186z" />
-<glyph unicode="#" horiz-adv-x="1323" d="M981 899l-66 -340h283v-129h-307l-84 -430h-137l84 430h-303l-82 -430h-136l80 430h-262v129h287l68 340h-277v127h299l82 436h139l-82 -436h305l84 436h134l-84 -436h264v-127h-289zM475 559h303l66 340h-303z" />
-<glyph unicode="$" d="M1036 449q0 -136 -102 -224.5t-285 -111.5v-232h-129v223q-112 0 -217 17.5t-172 48.5v156q83 -37 191.5 -60.5t197.5 -23.5v440q-205 65 -287.5 151t-82.5 222q0 131 101.5 215t268.5 102v182h129v-180q184 -5 355 -74l-52 -131q-149 59 -303 70v-434q157 -50 235 -97.5 t115 -109t37 -149.5zM866 436q0 72 -44.5 116.5t-172.5 88.5v-389q217 30 217 184zM319 1057q0 -76 45 -122t156 -87v387q-99 -16 -150 -62.5t-51 -115.5z" />
-<glyph unicode="%" horiz-adv-x="1686" d="M242 1026q0 -170 37 -255t120 -85q164 0 164 340q0 338 -164 338q-83 0 -120 -84t-37 -254zM700 1026q0 -228 -76.5 -344.5t-224.5 -116.5q-140 0 -217.5 119t-77.5 342q0 227 74.5 342t220.5 115q145 0 223 -119t78 -338zM1122 440q0 -171 37 -255.5t121 -84.5t124 83.5 t40 256.5q0 171 -40 253.5t-124 82.5t-121 -82.5t-37 -253.5zM1581 440q0 -227 -76.5 -343.5t-224.5 -116.5q-142 0 -218.5 119t-76.5 341q0 227 74.5 342t220.5 115q142 0 221.5 -117.5t79.5 -339.5zM1323 1462l-811 -1462h-147l811 1462h147z" />
-<glyph unicode="&#x26;" horiz-adv-x="1495" d="M414 1171q0 -69 36 -131.5t123 -150.5q129 75 179.5 138.5t50.5 146.5q0 77 -51.5 125.5t-137.5 48.5q-89 0 -144.5 -48t-55.5 -129zM569 129q241 0 400 154l-437 424q-111 -68 -157 -112.5t-68 -95.5t-22 -116q0 -117 77.5 -185.5t206.5 -68.5zM113 379q0 130 69.5 230 t249.5 202q-85 95 -115.5 144t-48.5 102t-18 110q0 150 98 234t273 84q162 0 255 -83.5t93 -232.5q0 -107 -68 -197.5t-225 -183.5l407 -391q56 62 89.5 145.5t56.5 182.5h168q-68 -286 -205 -434l299 -291h-229l-185 178q-118 -106 -240 -152t-272 -46q-215 0 -333.5 106 t-118.5 293z" />
-<glyph unicode="'" horiz-adv-x="453" d="M319 1462l-40 -528h-105l-41 528h186z" />
-<glyph unicode="(" horiz-adv-x="606" d="M82 561q0 265 77.5 496t223.5 405h162q-144 -193 -216.5 -424t-72.5 -475q0 -240 74 -469t213 -418h-160q-147 170 -224 397t-77 488z" />
-<glyph unicode=")" horiz-adv-x="606" d="M524 561q0 -263 -77.5 -490t-223.5 -395h-160q139 188 213 417.5t74 469.5q0 244 -72.5 475t-216.5 424h162q147 -175 224 -406.5t77 -494.5z" />
-<glyph unicode="*" horiz-adv-x="1130" d="M657 1556l-43 -395l398 111l26 -182l-381 -31l248 -326l-172 -94l-176 362l-160 -362l-176 94l242 326l-377 31l29 182l391 -111l-43 395h194z" />
-<glyph unicode="+" d="M653 791h412v-138h-412v-426h-139v426h-410v138h410v428h139v-428z" />
-<glyph unicode="," horiz-adv-x="502" d="M350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182z" />
-<glyph unicode="-" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" />
-<glyph unicode="." horiz-adv-x="545" d="M152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" />
-<glyph unicode="/" horiz-adv-x="752" d="M731 1462l-545 -1462h-166l545 1462h166z" />
-<glyph unicode="0" d="M1069 733q0 -379 -119.5 -566t-365.5 -187q-236 0 -359 191.5t-123 561.5q0 382 119 567t363 185q238 0 361.5 -193t123.5 -559zM270 733q0 -319 75 -464.5t239 -145.5q166 0 240.5 147.5t74.5 462.5t-74.5 461.5t-240.5 146.5q-164 0 -239 -144.5t-75 -463.5z" />
-<glyph unicode="1" d="M715 0h-162v1042q0 130 8 246q-21 -21 -47 -44t-238 -195l-88 114l387 299h140v-1462z" />
-<glyph unicode="2" d="M1061 0h-961v143l385 387q176 178 232 254t84 148t28 155q0 117 -71 185.5t-197 68.5q-91 0 -172.5 -30t-181.5 -109l-88 113q202 168 440 168q206 0 323 -105.5t117 -283.5q0 -139 -78 -275t-292 -344l-320 -313v-8h752v-154z" />
-<glyph unicode="3" d="M1006 1118q0 -140 -78.5 -229t-222.5 -119v-8q176 -22 261 -112t85 -236q0 -209 -145 -321.5t-412 -112.5q-116 0 -212.5 17.5t-187.5 61.5v158q95 -47 202.5 -71.5t203.5 -24.5q379 0 379 297q0 266 -418 266h-144v143h146q171 0 271 75.5t100 209.5q0 107 -73.5 168 t-199.5 61q-96 0 -181 -26t-194 -96l-84 112q90 71 207.5 111.5t247.5 40.5q213 0 331 -97.5t118 -267.5z" />
-<glyph unicode="4" d="M1130 336h-217v-336h-159v336h-711v145l694 989h176v-983h217v-151zM754 487v486q0 143 10 323h-8q-48 -96 -90 -159l-457 -650h545z" />
-<glyph unicode="5" d="M557 893q231 0 363.5 -114.5t132.5 -313.5q0 -227 -144.5 -356t-398.5 -129q-247 0 -377 79v160q70 -45 174 -70.5t205 -25.5q176 0 273.5 83t97.5 240q0 306 -375 306q-95 0 -254 -29l-86 55l55 684h727v-153h-585l-37 -439q115 23 229 23z" />
-<glyph unicode="6" d="M117 625q0 431 167.5 644.5t495.5 213.5q113 0 178 -19v-143q-77 25 -176 25q-235 0 -359 -146.5t-136 -460.5h12q110 172 348 172q197 0 310.5 -119t113.5 -323q0 -228 -124.5 -358.5t-336.5 -130.5q-227 0 -360 170.5t-133 474.5zM608 121q142 0 220.5 89.5t78.5 258.5 q0 145 -73 228t-218 83q-90 0 -165 -37t-119.5 -102t-44.5 -135q0 -103 40 -192t113.5 -141t167.5 -52z" />
-<glyph unicode="7" d="M285 0l606 1309h-797v153h973v-133l-598 -1329h-184z" />
-<glyph unicode="8" d="M584 1483q200 0 317 -93t117 -257q0 -108 -67 -197t-214 -162q178 -85 253 -178.5t75 -216.5q0 -182 -127 -290.5t-348 -108.5q-234 0 -360 102.5t-126 290.5q0 251 306 391q-138 78 -198 168.5t-60 202.5q0 159 117.5 253.5t314.5 94.5zM268 369q0 -120 83.5 -187 t234.5 -67q149 0 232 70t83 192q0 97 -78 172.5t-272 146.5q-149 -64 -216 -141.5t-67 -185.5zM582 1348q-125 0 -196 -60t-71 -160q0 -92 59 -158t218 -132q143 60 202.5 129t59.5 161q0 101 -72.5 160.5t-199.5 59.5z" />
-<glyph unicode="9" d="M1061 838q0 -858 -664 -858q-116 0 -184 20v143q80 -26 182 -26q240 0 362.5 148.5t133.5 455.5h-12q-55 -83 -146 -126.5t-205 -43.5q-194 0 -308 116t-114 324q0 228 127.5 360t335.5 132q149 0 260.5 -76.5t171.5 -223t60 -345.5zM569 1341q-143 0 -221 -92t-78 -256 q0 -144 72 -226.5t219 -82.5q91 0 167.5 37t120.5 101t44 134q0 105 -41 194t-114.5 140t-168.5 51z" />
-<glyph unicode=":" horiz-adv-x="545" d="M152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM152 989q0 135 118 135q123 0 123 -135q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" />
-<glyph unicode=";" horiz-adv-x="545" d="M350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182zM147 989q0 135 119 135q123 0 123 -135q0 -65 -33 -100t-90 -35q-58 0 -88.5 35t-30.5 100z" />
-<glyph unicode="&#x3c;" d="M1065 242l-961 422v98l961 479v-149l-782 -371l782 -328v-151z" />
-<glyph unicode="=" d="M119 858v137h930v-137h-930zM119 449v137h930v-137h-930z" />
-<glyph unicode="&#x3e;" d="M104 393l783 326l-783 373v149l961 -479v-98l-961 -422v151z" />
-<glyph unicode="?" horiz-adv-x="879" d="M289 403v54q0 117 36 192.5t134 159.5q136 115 171.5 173t35.5 140q0 102 -65.5 157.5t-188.5 55.5q-79 0 -154 -18.5t-172 -67.5l-59 135q189 99 395 99q191 0 297 -94t106 -265q0 -73 -19.5 -128.5t-57.5 -105t-164 -159.5q-101 -86 -133.5 -143t-32.5 -152v-33h-129z M240 106q0 136 120 136q58 0 89.5 -35t31.5 -101q0 -64 -32 -99.5t-89 -35.5q-52 0 -86 31.5t-34 103.5z" />
-<glyph unicode="@" horiz-adv-x="1841" d="M1720 729q0 -142 -44 -260t-124 -183t-184 -65q-86 0 -145 52t-70 133h-8q-40 -87 -114.5 -136t-176.5 -49q-150 0 -234.5 102.5t-84.5 278.5q0 204 118 331.5t310 127.5q68 0 154 -12.5t155 -34.5l-25 -470v-22q0 -178 133 -178q91 0 148 107.5t57 279.5q0 181 -74 317 t-210.5 209.5t-313.5 73.5q-223 0 -388 -92.5t-252 -264t-87 -396.5q0 -305 161 -469t464 -164q210 0 436 86v-133q-192 -84 -436 -84q-363 0 -563.5 199.5t-200.5 557.5q0 260 107 463t305 314.5t454 111.5q215 0 382.5 -90.5t259 -257t91.5 -383.5zM686 598 q0 -254 195 -254q207 0 225 313l14 261q-72 20 -157 20q-130 0 -203.5 -90t-73.5 -250z" />
-<glyph unicode="A" horiz-adv-x="1296" d="M1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473z" />
-<glyph unicode="B" horiz-adv-x="1327" d="M201 1462h413q291 0 421 -87t130 -275q0 -130 -72.5 -214.5t-211.5 -109.5v-10q333 -57 333 -350q0 -196 -132.5 -306t-370.5 -110h-510v1462zM371 836h280q180 0 259 56.5t79 190.5q0 123 -88 177.5t-280 54.5h-250v-479zM371 692v-547h305q177 0 266.5 68.5t89.5 214.5 q0 136 -91.5 200t-278.5 64h-291z" />
-<glyph unicode="C" horiz-adv-x="1292" d="M827 1331q-241 0 -380.5 -160.5t-139.5 -439.5q0 -287 134.5 -443.5t383.5 -156.5q153 0 349 55v-149q-152 -57 -375 -57q-323 0 -498.5 196t-175.5 557q0 226 84.5 396t244 262t375.5 92q230 0 402 -84l-72 -146q-166 78 -332 78z" />
-<glyph unicode="D" horiz-adv-x="1493" d="M1368 745q0 -362 -196.5 -553.5t-565.5 -191.5h-405v1462h448q341 0 530 -189t189 -528zM1188 739q0 286 -143.5 431t-426.5 145h-247v-1168h207q304 0 457 149.5t153 442.5z" />
-<glyph unicode="E" horiz-adv-x="1139" d="M1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152z" />
-<glyph unicode="F" horiz-adv-x="1057" d="M371 0h-170v1462h815v-151h-645v-535h606v-151h-606v-625z" />
-<glyph unicode="G" horiz-adv-x="1491" d="M844 766h497v-711q-116 -37 -236 -56t-278 -19q-332 0 -517 197.5t-185 553.5q0 228 91.5 399.5t263.5 262t403 90.5q234 0 436 -86l-66 -150q-198 84 -381 84q-267 0 -417 -159t-150 -441q0 -296 144.5 -449t424.5 -153q152 0 297 35v450h-327v152z" />
-<glyph unicode="H" horiz-adv-x="1511" d="M1311 0h-170v688h-770v-688h-170v1462h170v-622h770v622h170v-1462z" />
-<glyph unicode="I" horiz-adv-x="571" d="M201 0v1462h170v-1462h-170z" />
-<glyph unicode="J" horiz-adv-x="547" d="M-12 -385q-94 0 -148 27v145q71 -20 148 -20q99 0 150.5 60t51.5 173v1462h170v-1448q0 -190 -96 -294.5t-276 -104.5z" />
-<glyph unicode="K" horiz-adv-x="1257" d="M1257 0h-200l-533 709l-153 -136v-573h-170v1462h170v-725l663 725h201l-588 -635z" />
-<glyph unicode="L" horiz-adv-x="1063" d="M201 0v1462h170v-1308h645v-154h-815z" />
-<glyph unicode="M" horiz-adv-x="1849" d="M848 0l-496 1296h-8q14 -154 14 -366v-930h-157v1462h256l463 -1206h8l467 1206h254v-1462h-170v942q0 162 14 352h-8l-500 -1294h-137z" />
-<glyph unicode="N" horiz-adv-x="1544" d="M1343 0h-194l-799 1227h-8q16 -216 16 -396v-831h-157v1462h192l797 -1222h8q-2 27 -9 173.5t-5 209.5v839h159v-1462z" />
-<glyph unicode="O" horiz-adv-x="1595" d="M1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5z" />
-<glyph unicode="P" horiz-adv-x="1233" d="M1128 1036q0 -222 -151.5 -341.5t-433.5 -119.5h-172v-575h-170v1462h379q548 0 548 -426zM371 721h153q226 0 327 73t101 234q0 145 -95 216t-296 71h-190v-594z" />
-<glyph unicode="Q" horiz-adv-x="1595" d="M1470 733q0 -281 -113 -467t-319 -252l348 -362h-247l-285 330l-55 -2q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5 q-243 0 -369.5 -153.5t-126.5 -446.5z" />
-<glyph unicode="R" horiz-adv-x="1266" d="M371 608v-608h-170v1462h401q269 0 397.5 -103t128.5 -310q0 -290 -294 -392l397 -657h-201l-354 608h-305zM371 754h233q180 0 264 71.5t84 214.5q0 145 -85.5 209t-274.5 64h-221v-559z" />
-<glyph unicode="S" horiz-adv-x="1124" d="M1026 389q0 -193 -140 -301t-380 -108q-260 0 -400 67v164q90 -38 196 -60t210 -22q170 0 256 64.5t86 179.5q0 76 -30.5 124.5t-102 89.5t-217.5 93q-204 73 -291.5 173t-87.5 261q0 169 127 269t336 100q218 0 401 -80l-53 -148q-181 76 -352 76q-135 0 -211 -58 t-76 -161q0 -76 28 -124.5t94.5 -89t203.5 -89.5q230 -82 316.5 -176t86.5 -244z" />
-<glyph unicode="T" horiz-adv-x="1133" d="M651 0h-170v1311h-463v151h1096v-151h-463v-1311z" />
-<glyph unicode="U" horiz-adv-x="1491" d="M1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170z" />
-<glyph unicode="V" horiz-adv-x="1219" d="M1036 1462h183l-527 -1462h-168l-524 1462h180l336 -946q58 -163 92 -317q36 162 94 323z" />
-<glyph unicode="W" horiz-adv-x="1896" d="M1477 0h-168l-295 979q-21 65 -47 164t-27 119q-22 -132 -70 -289l-286 -973h-168l-389 1462h180l231 -903q48 -190 70 -344q27 183 80 358l262 889h180l275 -897q48 -155 81 -350q19 142 72 346l230 901h180z" />
-<glyph unicode="X" horiz-adv-x="1182" d="M1174 0h-193l-393 643l-400 -643h-180l486 764l-453 698h188l363 -579l366 579h181l-453 -692z" />
-<glyph unicode="Y" horiz-adv-x="1147" d="M573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186z" />
-<glyph unicode="Z" horiz-adv-x="1169" d="M1087 0h-1005v133l776 1176h-752v153h959v-133l-776 -1175h798v-154z" />
-<glyph unicode="[" horiz-adv-x="674" d="M623 -324h-457v1786h457v-141h-289v-1503h289v-142z" />
-<glyph unicode="\" horiz-adv-x="752" d="M186 1462l547 -1462h-166l-544 1462h163z" />
-<glyph unicode="]" horiz-adv-x="674" d="M51 -182h289v1503h-289v141h457v-1786h-457v142z" />
-<glyph unicode="^" horiz-adv-x="1110" d="M49 551l434 922h99l477 -922h-152l-372 745l-334 -745h-152z" />
-<glyph unicode="_" horiz-adv-x="918" d="M922 -315h-926v131h926v-131z" />
-<glyph unicode="`" horiz-adv-x="1182" d="M786 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="a" horiz-adv-x="1139" d="M850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85t88.5 238 v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47z" />
-<glyph unicode="b" horiz-adv-x="1255" d="M686 1114q216 0 335.5 -147.5t119.5 -417.5t-120.5 -419.5t-334.5 -149.5q-107 0 -195.5 39.5t-148.5 121.5h-12l-35 -141h-119v1556h166v-378q0 -127 -8 -228h8q116 164 344 164zM662 975q-170 0 -245 -97.5t-75 -328.5t77 -330.5t247 -99.5q153 0 228 111.5t75 320.5 q0 214 -75 319t-232 105z" />
-<glyph unicode="c" horiz-adv-x="975" d="M614 -20q-238 0 -368.5 146.5t-130.5 414.5q0 275 132.5 425t377.5 150q79 0 158 -17t124 -40l-51 -141q-55 22 -120 36.5t-115 14.5q-334 0 -334 -426q0 -202 81.5 -310t241.5 -108q137 0 281 59v-147q-110 -57 -277 -57z" />
-<glyph unicode="d" horiz-adv-x="1255" d="M922 147h-9q-115 -167 -344 -167q-215 0 -334.5 147t-119.5 418t120 421t334 150q223 0 342 -162h13l-7 79l-4 77v446h166v-1556h-135zM590 119q170 0 246.5 92.5t76.5 298.5v35q0 233 -77.5 332.5t-247.5 99.5q-146 0 -223.5 -113.5t-77.5 -320.5q0 -210 77 -317 t226 -107z" />
-<glyph unicode="e" horiz-adv-x="1149" d="M639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5t-200 83.5z " />
-<glyph unicode="f" horiz-adv-x="694" d="M670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129z" />
-<glyph unicode="g" horiz-adv-x="1122" d="M1073 1096v-105l-203 -24q28 -35 50 -91.5t22 -127.5q0 -161 -110 -257t-302 -96q-49 0 -92 8q-106 -56 -106 -141q0 -45 37 -66.5t127 -21.5h194q178 0 273.5 -75t95.5 -218q0 -182 -146 -277.5t-426 -95.5q-215 0 -331.5 80t-116.5 226q0 100 64 173t180 99 q-42 19 -70.5 59t-28.5 93q0 60 32 105t101 87q-85 35 -138.5 119t-53.5 192q0 180 108 277.5t306 97.5q86 0 155 -20h379zM199 -184q0 -89 75 -135t215 -46q209 0 309.5 62.5t100.5 169.5q0 89 -55 123.5t-207 34.5h-199q-113 0 -176 -54t-63 -155zM289 745q0 -115 65 -174 t181 -59q243 0 243 236q0 247 -246 247q-117 0 -180 -63t-63 -187z" />
-<glyph unicode="h" horiz-adv-x="1257" d="M926 0v709q0 134 -61 200t-191 66q-173 0 -252.5 -94t-79.5 -308v-573h-166v1556h166v-471q0 -85 -8 -141h10q49 79 139.5 124.5t206.5 45.5q201 0 301.5 -95.5t100.5 -303.5v-715h-166z" />
-<glyph unicode="i" horiz-adv-x="518" d="M342 0h-166v1096h166v-1096zM162 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" />
-<glyph unicode="j" horiz-adv-x="518" d="M43 -492q-95 0 -154 25v135q69 -20 136 -20q78 0 114.5 42.5t36.5 129.5v1276h166v-1264q0 -324 -299 -324zM162 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" />
-<glyph unicode="k" horiz-adv-x="1075" d="M340 561q43 61 131 160l354 375h197l-444 -467l475 -629h-201l-387 518l-125 -108v-410h-164v1556h164v-825q0 -55 -8 -170h8z" />
-<glyph unicode="l" horiz-adv-x="518" d="M342 0h-166v1556h166v-1556z" />
-<glyph unicode="m" horiz-adv-x="1905" d="M1573 0v713q0 131 -56 196.5t-174 65.5q-155 0 -229 -89t-74 -274v-612h-166v713q0 131 -56 196.5t-175 65.5q-156 0 -228.5 -93.5t-72.5 -306.5v-575h-166v1096h135l27 -150h8q47 80 132.5 125t191.5 45q257 0 336 -186h8q49 86 142 136t212 50q186 0 278.5 -95.5 t92.5 -305.5v-715h-166z" />
-<glyph unicode="n" horiz-adv-x="1257" d="M926 0v709q0 134 -61 200t-191 66q-172 0 -252 -93t-80 -307v-575h-166v1096h135l27 -150h8q51 81 143 125.5t205 44.5q198 0 298 -95.5t100 -305.5v-715h-166z" />
-<glyph unicode="o" horiz-adv-x="1237" d="M1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z" />
-<glyph unicode="p" horiz-adv-x="1255" d="M686 -20q-107 0 -195.5 39.5t-148.5 121.5h-12q12 -96 12 -182v-451h-166v1588h135l23 -150h8q64 90 149 130t195 40q218 0 336.5 -149t118.5 -418q0 -270 -120.5 -419.5t-334.5 -149.5zM662 975q-168 0 -243 -93t-77 -296v-37q0 -231 77 -330.5t247 -99.5 q142 0 222.5 115t80.5 317q0 205 -80.5 314.5t-226.5 109.5z" />
-<glyph unicode="q" horiz-adv-x="1255" d="M590 119q166 0 242 89t81 300v37q0 230 -78 331t-247 101q-146 0 -223.5 -113.5t-77.5 -320.5t76.5 -315.5t226.5 -108.5zM565 -20q-212 0 -331 149t-119 416q0 269 120 420t334 151q225 0 346 -170h9l24 150h131v-1588h-166v469q0 100 11 170h-13q-115 -167 -346 -167z " />
-<glyph unicode="r" horiz-adv-x="836" d="M676 1116q73 0 131 -12l-23 -154q-68 15 -120 15q-133 0 -227.5 -108t-94.5 -269v-588h-166v1096h137l19 -203h8q61 107 147 165t189 58z" />
-<glyph unicode="s" horiz-adv-x="977" d="M883 299q0 -153 -114 -236t-320 -83q-218 0 -340 69v154q79 -40 169.5 -63t174.5 -23q130 0 200 41.5t70 126.5q0 64 -55.5 109.5t-216.5 107.5q-153 57 -217.5 99.5t-96 96.5t-31.5 129q0 134 109 211.5t299 77.5q177 0 346 -72l-59 -135q-165 68 -299 68 q-118 0 -178 -37t-60 -102q0 -44 22.5 -75t72.5 -59t192 -81q195 -71 263.5 -143t68.5 -181z" />
-<glyph unicode="t" horiz-adv-x="723" d="M530 117q44 0 85 6.5t65 13.5v-127q-27 -13 -79.5 -21.5t-94.5 -8.5q-318 0 -318 335v652h-157v80l157 69l70 234h96v-254h318v-129h-318v-645q0 -99 47 -152t129 -53z" />
-<glyph unicode="u" horiz-adv-x="1257" d="M332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168z" />
-<glyph unicode="v" horiz-adv-x="1026" d="M416 0l-416 1096h178l236 -650q80 -228 94 -296h8q11 53 69.5 219.5t262.5 726.5h178l-416 -1096h-194z" />
-<glyph unicode="w" horiz-adv-x="1593" d="M1071 0l-201 643q-19 59 -71 268h-8q-40 -175 -70 -270l-207 -641h-192l-299 1096h174q106 -413 161.5 -629t63.5 -291h8q11 57 35.5 147.5t42.5 143.5l201 629h180l196 -629q56 -172 76 -289h8q4 36 21.5 111t208.5 807h172l-303 -1096h-197z" />
-<glyph unicode="x" horiz-adv-x="1073" d="M440 561l-381 535h189l289 -420l288 420h187l-381 -535l401 -561h-188l-307 444l-310 -444h-188z" />
-<glyph unicode="y" horiz-adv-x="1032" d="M2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156z" />
-<glyph unicode="z" horiz-adv-x="958" d="M877 0h-795v113l598 854h-561v129h743v-129l-590 -838h605v-129z" />
-<glyph unicode="{" horiz-adv-x="776" d="M475 12q0 -102 58.5 -148t171.5 -48v-140q-190 2 -294 87t-104 239v303q0 104 -63 148.5t-183 44.5v141q130 2 188 48t58 142v306q0 155 108 241t290 86v-139q-230 -6 -230 -199v-295q0 -215 -223 -254v-12q223 -39 223 -254v-297z" />
-<glyph unicode="|" horiz-adv-x="1128" d="M494 1556h141v-2052h-141v2052z" />
-<glyph unicode="}" horiz-adv-x="776" d="M522 575q-223 39 -223 254v295q0 193 -227 199v139q184 0 289.5 -87t105.5 -240v-306q0 -97 59 -142.5t189 -47.5v-141q-122 0 -185 -44.5t-63 -148.5v-303q0 -153 -102.5 -238.5t-292.5 -87.5v140q111 2 169 48t58 148v297q0 114 55 174t168 80v12z" />
-<glyph unicode="~" d="M338 713q-53 0 -116.5 -33.5t-117.5 -87.5v151q100 109 244 109q68 0 124.5 -14t145.5 -52q66 -28 115 -41.5t96 -13.5q54 0 118 32t118 89v-150q-102 -110 -244 -110q-72 0 -135 16.5t-135 48.5q-75 32 -120 44t-93 12z" />
-<glyph unicode="&#xa1;" horiz-adv-x="547" d="M219 684h105l51 -1057h-207zM393 983q0 -135 -121 -135q-60 0 -90 35.5t-30 99.5q0 63 31.5 99t88.5 36q51 0 86 -32t35 -103z" />
-<glyph unicode="&#xa2;" d="M971 240q-105 -54 -252 -60v-200h-133v206q-203 32 -299.5 168.5t-96.5 386.5q0 508 396 570v172h135v-164q75 -3 146 -19.5t120 -39.5l-49 -140q-133 51 -242 51q-172 0 -253 -105.5t-81 -322.5q0 -212 79.5 -313.5t246.5 -101.5q141 0 283 59v-147z" />
-<glyph unicode="&#xa3;" d="M682 1481q190 0 360 -84l-61 -133q-154 77 -297 77q-123 0 -185.5 -62t-62.5 -202v-295h422v-127h-422v-221q0 -100 -32.5 -168t-106.5 -112h795v-154h-1029v141q205 47 205 291v223h-198v127h198v316q0 178 112 280.5t302 102.5z" />
-<glyph unicode="&#xa4;" d="M184 723q0 122 74 229l-135 140l94 92l135 -133q104 73 234 73q127 0 229 -73l137 133l95 -92l-134 -138q74 -113 74 -231q0 -131 -74 -234l131 -135l-92 -92l-137 133q-102 -71 -229 -71q-134 0 -234 73l-135 -133l-92 92l133 136q-74 107 -74 231zM313 723 q0 -112 78.5 -192t194.5 -80t195 79.5t79 192.5q0 114 -80 195t-194 81q-116 0 -194.5 -82t-78.5 -194z" />
-<glyph unicode="&#xa5;" d="M584 735l379 727h174l-416 -770h262v-127h-317v-170h317v-127h-317v-268h-164v268h-316v127h316v170h-316v127h256l-411 770h178z" />
-<glyph unicode="&#xa6;" horiz-adv-x="1128" d="M494 1556h141v-776h-141v776zM494 281h141v-777h-141v777z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1057" d="M139 809q0 86 43 154.5t121 105.5q-74 40 -116 95.5t-42 140.5q0 121 103.5 190.5t300.5 69.5q94 0 173.5 -14.5t176.5 -53.5l-53 -131q-98 39 -165.5 52.5t-143.5 13.5q-116 0 -174 -29.5t-58 -93.5q0 -60 61.5 -102t215.5 -97q186 -68 261 -143.5t75 -182.5 q0 -90 -41 -160.5t-115 -111.5q153 -81 153 -227q0 -140 -117 -216.5t-329 -76.5q-218 0 -346 65v148q78 -37 175 -59.5t179 -22.5q134 0 204.5 38t70.5 109q0 46 -24 75t-78 58t-169 72q-142 52 -209 97t-100 102t-33 135zM285 829q0 -77 66 -129.5t233 -113.5l49 -19 q137 80 137 191q0 83 -73.5 139t-258.5 113q-68 -19 -110.5 -69t-42.5 -112z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1182" d="M309 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM690 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M893 1059q-125 0 -192.5 -87t-67.5 -241q0 -168 63.5 -249t194.5 -81q86 0 211 45v-124q-48 -20 -98.5 -34t-120.5 -14q-194 0 -298 120.5t-104 336.5q0 209 110.5 332t301.5 123q128 0 246 -60l-58 -118q-108 51 -188 51zM100 731q0 200 100 375t275 276t377 101 q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM205 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87 t-236.5 -235.5t-87.5 -324.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="725" d="M532 801l-24 84q-92 -97 -232 -97q-95 0 -150.5 49.5t-55.5 151.5t77 154.5t242 58.5l117 4v39q0 133 -148 133q-100 0 -204 -51l-43 96q114 56 247 56q130 0 198.5 -52.5t68.5 -173.5v-452h-93zM193 989q0 -100 112 -100q201 0 201 180v49l-98 -4q-112 -4 -163.5 -32.5 t-51.5 -92.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="1018" d="M82 551l342 407l119 -69l-289 -350l289 -351l-119 -71l-342 407v27zM477 551l344 407l117 -69l-287 -350l287 -351l-117 -71l-344 407v27z" />
-<glyph unicode="&#xac;" d="M1065 791v-527h-137v389h-824v138h961z" />
-<glyph unicode="&#xad;" horiz-adv-x="659" d="M84 473zM84 473v152h491v-152h-491z" />
-<glyph unicode="&#xae;" horiz-adv-x="1704" d="M723 762h108q80 0 128.5 41.5t48.5 105.5q0 75 -43 107.5t-136 32.5h-106v-287zM1157 913q0 -80 -42.5 -141.5t-119.5 -91.5l238 -395h-168l-207 354h-135v-354h-148v891h261q166 0 243.5 -65t77.5 -198zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM205 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5z " />
-<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M1030 1556h-1036v127h1036v-127z" />
-<glyph unicode="&#xb0;" horiz-adv-x="877" d="M127 1171q0 130 90.5 221t220.5 91t221 -90.5t91 -221.5q0 -84 -41 -155.5t-114 -113.5t-157 -42q-130 0 -220.5 90t-90.5 221zM242 1171q0 -82 58.5 -139t139.5 -57q80 0 137.5 56.5t57.5 139.5q0 84 -56.5 140.5t-138.5 56.5q-83 0 -140.5 -57t-57.5 -140z" />
-<glyph unicode="&#xb1;" d="M104 1zM653 791h412v-138h-412v-426h-139v426h-410v138h410v428h139v-428zM104 1v138h961v-138h-961z" />
-<glyph unicode="&#xb2;" horiz-adv-x="711" d="M653 586h-604v104l236 230q89 86 130 134.5t57.5 86.5t16.5 92q0 68 -40 102.5t-103 34.5q-52 0 -101 -19t-118 -69l-66 88q131 111 283 111q132 0 205.5 -65t73.5 -177q0 -80 -44.5 -155.5t-191.5 -213.5l-174 -165h440v-119z" />
-<glyph unicode="&#xb3;" horiz-adv-x="711" d="M627 1255q0 -80 -41 -131.5t-109 -74.5q176 -47 176 -209q0 -128 -92 -199.5t-260 -71.5q-152 0 -268 56v123q147 -68 270 -68q211 0 211 162q0 145 -231 145h-117v107h119q103 0 152.5 39.5t49.5 107.5q0 61 -40 95t-107 34q-66 0 -122 -21.5t-112 -56.5l-69 90 q63 45 133 72t164 27q136 0 214.5 -59.5t78.5 -166.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="1182" d="M393 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1268" d="M342 381q0 -262 254 -262q171 0 250.5 94.5t79.5 306.5v576h166v-1096h-136l-26 147h-10q-111 -167 -340 -167q-150 0 -238 92h-10q10 -84 10 -244v-320h-166v1588h166v-715z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1120 -260h-114v1712h-213v-1712h-115v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h557v-1816z" />
-<glyph unicode="&#xb7;" horiz-adv-x="545" d="M152 723q0 66 31 100.5t87 34.5q58 0 90.5 -34.5t32.5 -100.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" />
-<glyph unicode="&#xb8;" horiz-adv-x="465" d="M436 -289q0 -97 -76.5 -150t-226.5 -53q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" />
-<glyph unicode="&#xb9;" horiz-adv-x="711" d="M338 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96z" />
-<glyph unicode="&#xba;" horiz-adv-x="768" d="M702 1135q0 -164 -85.5 -255.5t-235.5 -91.5q-146 0 -230.5 93t-84.5 254q0 163 84 253.5t235 90.5q152 0 234.5 -91t82.5 -253zM188 1135q0 -122 45.5 -183t149.5 -61q105 0 151 61t46 183q0 123 -46 182t-151 59q-103 0 -149 -59t-46 -182z" />
-<glyph unicode="&#xbb;" horiz-adv-x="1018" d="M936 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27zM541 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1597" d="M75 0zM1298 1462l-903 -1462h-143l903 1462h143zM337 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96zM1489 203h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM1219 320v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45 t-26 -39.5l-168 -246h262z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1597" d="M46 0zM1230 1462l-903 -1462h-143l903 1462h143zM308 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96zM1499 1h-604v104l236 230q89 86 130 134.5t57.5 86.5t16.5 92q0 68 -40 102.5t-103 34.5q-52 0 -101 -19t-118 -69l-66 88 q131 111 283 111q132 0 205.5 -65t73.5 -177q0 -80 -44.5 -155.5t-191.5 -213.5l-174 -165h440v-119z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1597" d="M26 0zM620 1255q0 -80 -41 -131.5t-109 -74.5q176 -47 176 -209q0 -128 -92 -199.5t-260 -71.5q-152 0 -268 56v123q147 -68 270 -68q211 0 211 162q0 145 -231 145h-117v107h119q103 0 152.5 39.5t49.5 107.5q0 61 -40 95t-107 34q-66 0 -122 -21.5t-112 -56.5l-69 90 q63 45 133 72t164 27q136 0 214.5 -59.5t78.5 -166.5zM1390 1462l-903 -1462h-143l903 1462h143zM1569 203h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM1299 320v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45t-26 -39.5l-168 -246h262z" />
-<glyph unicode="&#xbf;" horiz-adv-x="879" d="M590 684v-51q0 -122 -37.5 -196t-134.5 -158q-121 -106 -151.5 -143.5t-43 -76t-12.5 -94.5q0 -100 66 -156.5t188 -56.5q80 0 155 19t173 67l59 -135q-197 -96 -395 -96q-190 0 -298 93t-108 263q0 70 17.5 122.5t49.5 97t76.5 85.5t98.5 88q101 88 133.5 146t32.5 151 v31h131zM639 983q0 -135 -121 -135q-59 0 -90 34.5t-31 100.5q0 64 33 99.5t88 35.5q51 0 86 -32t35 -103z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM724 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM526 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM303 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186 h-115v23z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM792 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5 q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM364 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5z M745 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM870 1587q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5z M762 1585q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1788" d="M1665 0h-750v465h-514l-227 -465h-176l698 1462h969v-151h-580v-471h541v-150h-541v-538h580v-152zM469 618h446v693h-118z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1292" d="M125 0zM827 1331q-241 0 -380.5 -160.5t-139.5 -439.5q0 -287 134.5 -443.5t383.5 -156.5q153 0 349 55v-149q-152 -57 -375 -57q-323 0 -498.5 196t-175.5 557q0 226 84.5 396t244 262t375.5 92q230 0 402 -84l-72 -146q-166 78 -332 78zM950 -289q0 -97 -76.5 -150 t-226.5 -53q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM713 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM456 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xca;" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM263 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM327 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM708 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="571" d="M5 0zM201 0v1462h170v-1462h-170zM398 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xcd;" horiz-adv-x="571" d="M179 0zM201 0v1462h170v-1462h-170zM179 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xce;" horiz-adv-x="571" d="M0 0zM201 0v1462h170v-1462h-170zM-57 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xcf;" horiz-adv-x="571" d="M5 0zM201 0v1462h170v-1462h-170zM5 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM386 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1479" d="M1352 745q0 -362 -196.5 -553.5t-565.5 -191.5h-389v649h-154v150h154v663h434q337 0 527 -187.5t190 -529.5zM1171 739q0 576 -569 576h-231v-516h379v-150h-379v-502h190q610 0 610 592z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1544" d="M201 0zM1343 0h-194l-799 1227h-8q16 -216 16 -396v-831h-157v1462h192l797 -1222h8q-2 27 -9 173.5t-5 209.5v839h159v-1462zM935 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41 t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM907 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM659 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM448 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM942 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM522 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM903 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xd7;" d="M940 1176l96 -99l-352 -354l350 -352l-96 -99l-354 351l-348 -351l-101 99l350 352l-352 352l100 101l353 -355z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1595" d="M1470 733q0 -351 -177.5 -552t-493.5 -201q-235 0 -383 100l-101 -141l-120 79l108 154q-178 198 -178 563q0 357 176 553.5t500 196.5q209 0 366 -94l97 135l120 -80l-106 -148q192 -202 192 -565zM1290 733q0 272 -110 426l-672 -948q115 -82 291 -82q243 0 367 153 t124 451zM305 733q0 -262 101 -416l669 943q-106 73 -274 73q-243 0 -369.5 -153.5t-126.5 -446.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM856 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xda;" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM600 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM393 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186 q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM461 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5 t-26.5 74.5zM842 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1147" d="M0 0zM573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186zM442 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xde;" horiz-adv-x="1251" d="M1145 784q0 -227 -151.5 -346t-438.5 -119h-184v-319h-170v1462h170v-256h215q281 0 420 -103.5t139 -318.5zM371 465h168q226 0 327 71.5t101 235.5q0 149 -95 218t-297 69h-204v-594z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1274" d="M1049 1266q0 -135 -143 -250q-88 -70 -116 -103.5t-28 -66.5q0 -32 13.5 -53t49 -49.5t113.5 -79.5q140 -95 191 -173.5t51 -179.5q0 -160 -97 -245.5t-276 -85.5q-188 0 -295 69v154q63 -39 141 -62.5t150 -23.5q215 0 215 182q0 75 -41.5 128.5t-151.5 123.5 q-127 82 -175 143.5t-48 145.5q0 63 34.5 116t105.5 106q75 57 107 102t32 98q0 80 -68 122.5t-195 42.5q-276 0 -276 -223v-1204h-166v1202q0 178 110 271.5t332 93.5q206 0 318.5 -78.5t112.5 -222.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM672 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM436 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM228 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM721 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99 q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM279 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM660 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75 q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM804 1458q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5zM696 1456q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5 t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1757" d="M94 303q0 161 124 250.5t378 97.5l184 6v68q0 129 -58 190.5t-177 61.5q-144 0 -307 -84l-52 127q74 41 173.5 67.5t197.5 26.5q130 0 212.5 -43.5t123.5 -138.5q53 88 138.5 136t195.5 48q192 0 308 -133.5t116 -355.5v-107h-701q8 -395 322 -395q91 0 169.5 17.5 t162.5 56.5v-148q-86 -38 -160.5 -54.5t-175.5 -16.5q-289 0 -414 233q-81 -127 -179.5 -180t-232.5 -53q-163 0 -255.5 85t-92.5 238zM268 301q0 -95 53.5 -139.5t141.5 -44.5q145 0 229 84.5t84 238.5v99l-158 -7q-186 -8 -268 -62.5t-82 -168.5zM1225 977 q-121 0 -190.5 -83t-80.5 -241h519q0 156 -64 240t-184 84z" />
-<glyph unicode="&#xe7;" horiz-adv-x="975" d="M115 0zM614 -20q-238 0 -368.5 146.5t-130.5 414.5q0 275 132.5 425t377.5 150q79 0 158 -17t124 -40l-51 -141q-55 22 -120 36.5t-115 14.5q-334 0 -334 -426q0 -202 81.5 -310t241.5 -108q137 0 281 59v-147q-110 -57 -277 -57zM762 -289q0 -97 -76.5 -150t-226.5 -53 q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM711 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM471 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xea;" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM259 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM319 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM700 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xec;" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM355 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xed;" horiz-adv-x="518" d="M169 0zM342 0h-166v1096h166v-1096zM169 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xee;" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM-77 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xef;" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM-20 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM361 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1221" d="M1122 563q0 -281 -130.5 -432t-377.5 -151q-222 0 -361.5 134.5t-139.5 360.5q0 230 131.5 361t351.5 131q226 0 326 -121l8 4q-57 214 -262 405l-271 -155l-73 108l233 133q-92 62 -186 111l69 117q156 -73 258 -148l238 138l76 -107l-207 -119q152 -143 234.5 -342 t82.5 -428zM954 512q0 147 -90 232t-246 85q-337 0 -337 -360q0 -167 87.5 -258.5t249.5 -91.5q175 0 255.5 100.5t80.5 292.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1257" d="M176 0zM926 0v709q0 134 -61 200t-191 66q-172 0 -252 -93t-80 -307v-575h-166v1096h135l27 -150h8q51 81 143 125.5t205 44.5q198 0 298 -95.5t100 -305.5v-715h-166zM802 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98 q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M742 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M479 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M282 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M773 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M336 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM717 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xf7;" d="M104 653v138h961v-138h-961zM471 373q0 60 29.5 90.5t83.5 30.5q52 0 81 -31.5t29 -89.5q0 -57 -29.5 -89t-80.5 -32q-52 0 -82.5 31.5t-30.5 89.5zM471 1071q0 60 29.5 90.5t83.5 30.5q52 0 81 -31.5t29 -89.5q0 -57 -29.5 -89t-80.5 -32q-52 0 -82.5 31.5t-30.5 89.5z " />
-<glyph unicode="&#xf8;" horiz-adv-x="1237" d="M1122 549q0 -268 -135 -418.5t-373 -150.5q-154 0 -266 69l-84 -117l-114 78l94 131q-129 152 -129 408q0 268 134 417.5t372 149.5q154 0 270 -76l84 119l117 -76l-97 -133q127 -152 127 -401zM287 549q0 -171 53 -273l465 646q-75 53 -189 53q-163 0 -246 -107 t-83 -319zM950 549q0 164 -51 264l-465 -643q71 -51 184 -51q163 0 247.5 109.5t84.5 320.5z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM726 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM506 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM286 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119 q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM342 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5 q-37 0 -63.5 24.5t-26.5 74.5zM723 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1032" d="M2 0zM2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156zM411 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147 h-111v25z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1255" d="M344 948q66 89 151 128.5t191 39.5q215 0 335 -150t120 -417q0 -268 -120.5 -418.5t-334.5 -150.5q-222 0 -344 161h-12l4 -34q8 -77 8 -140v-459h-166v2048h166v-466q0 -52 -6 -142h8zM664 975q-168 0 -244 -92t-78 -293v-41q0 -231 77 -330.5t247 -99.5q303 0 303 432 q0 215 -74 319.5t-231 104.5z" />
-<glyph unicode="&#xff;" horiz-adv-x="1032" d="M2 0zM2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156zM234 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM615 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#x131;" horiz-adv-x="518" d="M342 0h-166v1096h166v-1096z" />
-<glyph unicode="&#x152;" horiz-adv-x="1890" d="M1767 0h-768q-102 -20 -194 -20q-327 0 -503.5 196.5t-176.5 558.5q0 360 174 555t494 195q102 0 192 -23h782v-151h-589v-471h551v-150h-551v-538h589v-152zM811 1333q-249 0 -377.5 -152.5t-128.5 -447.5q0 -297 128.5 -450.5t375.5 -153.5q112 0 199 33v1141 q-87 30 -197 30z" />
-<glyph unicode="&#x153;" horiz-adv-x="1929" d="M1430 -20q-293 0 -418 235q-62 -116 -166.5 -175.5t-241.5 -59.5q-223 0 -357 152.5t-134 416.5q0 265 131 415t366 150q131 0 233.5 -59.5t164.5 -173.5q58 112 154 172.5t222 60.5q201 0 320 -132.5t119 -358.5v-105h-729q8 -393 338 -393q94 0 174.5 17.5t167.5 56.5 v-148q-88 -39 -164 -55t-180 -16zM287 549q0 -211 76 -320.5t243 -109.5q163 0 239.5 106.5t76.5 315.5q0 221 -77.5 327.5t-242.5 106.5q-166 0 -240.5 -108t-74.5 -318zM1382 975q-127 0 -199.5 -82t-84.5 -240h544q0 158 -66 240t-194 82z" />
-<glyph unicode="&#x178;" horiz-adv-x="1147" d="M0 0zM573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186zM294 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM675 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="1212" d="M268 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" />
-<glyph unicode="&#x2da;" horiz-adv-x="1182" d="M813 1458q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5zM705 1456q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="1212" d="M788 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="953" />
-<glyph unicode="&#x2001;" horiz-adv-x="1907" />
-<glyph unicode="&#x2002;" horiz-adv-x="953" />
-<glyph unicode="&#x2003;" horiz-adv-x="1907" />
-<glyph unicode="&#x2004;" horiz-adv-x="635" />
-<glyph unicode="&#x2005;" horiz-adv-x="476" />
-<glyph unicode="&#x2006;" horiz-adv-x="317" />
-<glyph unicode="&#x2007;" horiz-adv-x="317" />
-<glyph unicode="&#x2008;" horiz-adv-x="238" />
-<glyph unicode="&#x2009;" horiz-adv-x="381" />
-<glyph unicode="&#x200a;" horiz-adv-x="105" />
-<glyph unicode="&#x2010;" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" />
-<glyph unicode="&#x2011;" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" />
-<glyph unicode="&#x2012;" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M82 473v152h860v-152h-860z" />
-<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M82 473v152h1884v-152h-1884z" />
-<glyph unicode="&#x2018;" horiz-adv-x="348" d="M37 961l-12 22q22 90 71 224t105 255h123q-66 -254 -103 -501h-184z" />
-<glyph unicode="&#x2019;" horiz-adv-x="348" d="M309 1462l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182z" />
-<glyph unicode="&#x201a;" horiz-adv-x="502" d="M63 0zM350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182z" />
-<glyph unicode="&#x201c;" horiz-adv-x="717" d="M406 961l-15 22q56 215 178 479h123q-30 -115 -59.5 -259.5t-42.5 -241.5h-184zM37 961l-12 22q22 90 71 224t105 255h123q-66 -254 -103 -501h-184z" />
-<glyph unicode="&#x201d;" horiz-adv-x="717" d="M309 1462l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182zM678 1462l14 -22q-24 -91 -72 -224t-104 -255h-125q26 100 59 254t46 247h182z" />
-<glyph unicode="&#x201e;" horiz-adv-x="829" d="M25 0zM309 238l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182zM678 238l14 -22q-24 -91 -72 -224t-104 -255h-125q26 100 59 254t46 247h182z" />
-<glyph unicode="&#x2022;" horiz-adv-x="770" d="M164 748q0 121 56.5 184t164.5 63q105 0 163 -62t58 -185q0 -119 -57.5 -183.5t-163.5 -64.5q-107 0 -164 65.5t-57 182.5z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1606" d="M152 0zM152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM682 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM1213 106 q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" />
-<glyph unicode="&#x202f;" horiz-adv-x="381" />
-<glyph unicode="&#x2039;" horiz-adv-x="623" d="M82 551l342 407l119 -69l-289 -350l289 -351l-119 -71l-342 407v27z" />
-<glyph unicode="&#x203a;" horiz-adv-x="623" d="M541 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27z" />
-<glyph unicode="&#x2044;" horiz-adv-x="266" d="M655 1462l-903 -1462h-143l903 1462h143z" />
-<glyph unicode="&#x205f;" horiz-adv-x="476" />
-<glyph unicode="&#x2074;" horiz-adv-x="711" d="M692 788h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM422 905v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45t-26 -39.5l-168 -246h262z" />
-<glyph unicode="&#x20ac;" horiz-adv-x="1208" d="M795 1333q-319 0 -398 -403h510v-129h-524l-2 -57v-64l2 -45h463v-129h-447q37 -180 138.5 -278.5t271.5 -98.5q156 0 309 66v-150q-146 -65 -317 -65q-237 0 -381.5 134.5t-190.5 391.5h-166v129h152l-2 42v44l2 80h-152v129h164q39 261 185 407t383 146q201 0 366 -97 l-71 -139q-166 86 -295 86z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1589" d="M369 741h-123v615h-209v106h543v-106h-211v-615zM969 741l-201 559h-8l6 -129v-430h-119v721h187l196 -559l203 559h180v-721h-127v420l6 137h-8l-211 -557h-104z" />
-<glyph unicode="&#x2212;" d="M104 653v138h961v-138h-961z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1095" d="M0 1095h1095v-1095h-1095v1095z" />
-<glyph horiz-adv-x="1255" d="M0 0z" />
-<hkern u1="&#x22;" u2="&#x178;" k="-20" />
-<hkern u1="&#x22;" u2="&#x153;" k="123" />
-<hkern u1="&#x22;" u2="&#xfc;" k="61" />
-<hkern u1="&#x22;" u2="&#xfb;" k="61" />
-<hkern u1="&#x22;" u2="&#xfa;" k="61" />
-<hkern u1="&#x22;" u2="&#xf9;" k="61" />
-<hkern u1="&#x22;" u2="&#xf8;" k="123" />
-<hkern u1="&#x22;" u2="&#xf6;" k="123" />
-<hkern u1="&#x22;" u2="&#xf5;" k="123" />
-<hkern u1="&#x22;" u2="&#xf4;" k="123" />
-<hkern u1="&#x22;" u2="&#xf3;" k="123" />
-<hkern u1="&#x22;" u2="&#xf2;" k="123" />
-<hkern u1="&#x22;" u2="&#xeb;" k="123" />
-<hkern u1="&#x22;" u2="&#xea;" k="123" />
-<hkern u1="&#x22;" u2="&#xe9;" k="123" />
-<hkern u1="&#x22;" u2="&#xe8;" k="123" />
-<hkern u1="&#x22;" u2="&#xe7;" k="123" />
-<hkern u1="&#x22;" u2="&#xe6;" k="82" />
-<hkern u1="&#x22;" u2="&#xe5;" k="82" />
-<hkern u1="&#x22;" u2="&#xe4;" k="82" />
-<hkern u1="&#x22;" u2="&#xe3;" k="82" />
-<hkern u1="&#x22;" u2="&#xe2;" k="82" />
-<hkern u1="&#x22;" u2="&#xe1;" k="82" />
-<hkern u1="&#x22;" u2="&#xe0;" k="123" />
-<hkern u1="&#x22;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x22;" u2="&#xc5;" k="143" />
-<hkern u1="&#x22;" u2="&#xc4;" k="143" />
-<hkern u1="&#x22;" u2="&#xc3;" k="143" />
-<hkern u1="&#x22;" u2="&#xc2;" k="143" />
-<hkern u1="&#x22;" u2="&#xc1;" k="143" />
-<hkern u1="&#x22;" u2="&#xc0;" k="143" />
-<hkern u1="&#x22;" u2="u" k="61" />
-<hkern u1="&#x22;" u2="s" k="61" />
-<hkern u1="&#x22;" u2="r" k="61" />
-<hkern u1="&#x22;" u2="q" k="123" />
-<hkern u1="&#x22;" u2="p" k="61" />
-<hkern u1="&#x22;" u2="o" k="123" />
-<hkern u1="&#x22;" u2="n" k="61" />
-<hkern u1="&#x22;" u2="m" k="61" />
-<hkern u1="&#x22;" u2="g" k="61" />
-<hkern u1="&#x22;" u2="e" k="123" />
-<hkern u1="&#x22;" u2="d" k="123" />
-<hkern u1="&#x22;" u2="c" k="123" />
-<hkern u1="&#x22;" u2="a" k="82" />
-<hkern u1="&#x22;" u2="Y" k="-20" />
-<hkern u1="&#x22;" u2="W" k="-41" />
-<hkern u1="&#x22;" u2="V" k="-41" />
-<hkern u1="&#x22;" u2="T" k="-41" />
-<hkern u1="&#x22;" u2="A" k="143" />
-<hkern u1="&#x27;" u2="&#x178;" k="-20" />
-<hkern u1="&#x27;" u2="&#x153;" k="123" />
-<hkern u1="&#x27;" u2="&#xfc;" k="61" />
-<hkern u1="&#x27;" u2="&#xfb;" k="61" />
-<hkern u1="&#x27;" u2="&#xfa;" k="61" />
-<hkern u1="&#x27;" u2="&#xf9;" k="61" />
-<hkern u1="&#x27;" u2="&#xf8;" k="123" />
-<hkern u1="&#x27;" u2="&#xf6;" k="123" />
-<hkern u1="&#x27;" u2="&#xf5;" k="123" />
-<hkern u1="&#x27;" u2="&#xf4;" k="123" />
-<hkern u1="&#x27;" u2="&#xf3;" k="123" />
-<hkern u1="&#x27;" u2="&#xf2;" k="123" />
-<hkern u1="&#x27;" u2="&#xeb;" k="123" />
-<hkern u1="&#x27;" u2="&#xea;" k="123" />
-<hkern u1="&#x27;" u2="&#xe9;" k="123" />
-<hkern u1="&#x27;" u2="&#xe8;" k="123" />
-<hkern u1="&#x27;" u2="&#xe7;" k="123" />
-<hkern u1="&#x27;" u2="&#xe6;" k="82" />
-<hkern u1="&#x27;" u2="&#xe5;" k="82" />
-<hkern u1="&#x27;" u2="&#xe4;" k="82" />
-<hkern u1="&#x27;" u2="&#xe3;" k="82" />
-<hkern u1="&#x27;" u2="&#xe2;" k="82" />
-<hkern u1="&#x27;" u2="&#xe1;" k="82" />
-<hkern u1="&#x27;" u2="&#xe0;" k="123" />
-<hkern u1="&#x27;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x27;" u2="&#xc5;" k="143" />
-<hkern u1="&#x27;" u2="&#xc4;" k="143" />
-<hkern u1="&#x27;" u2="&#xc3;" k="143" />
-<hkern u1="&#x27;" u2="&#xc2;" k="143" />
-<hkern u1="&#x27;" u2="&#xc1;" k="143" />
-<hkern u1="&#x27;" u2="&#xc0;" k="143" />
-<hkern u1="&#x27;" u2="u" k="61" />
-<hkern u1="&#x27;" u2="s" k="61" />
-<hkern u1="&#x27;" u2="r" k="61" />
-<hkern u1="&#x27;" u2="q" k="123" />
-<hkern u1="&#x27;" u2="p" k="61" />
-<hkern u1="&#x27;" u2="o" k="123" />
-<hkern u1="&#x27;" u2="n" k="61" />
-<hkern u1="&#x27;" u2="m" k="61" />
-<hkern u1="&#x27;" u2="g" k="61" />
-<hkern u1="&#x27;" u2="e" k="123" />
-<hkern u1="&#x27;" u2="d" k="123" />
-<hkern u1="&#x27;" u2="c" k="123" />
-<hkern u1="&#x27;" u2="a" k="82" />
-<hkern u1="&#x27;" u2="Y" k="-20" />
-<hkern u1="&#x27;" u2="W" k="-41" />
-<hkern u1="&#x27;" u2="V" k="-41" />
-<hkern u1="&#x27;" u2="T" k="-41" />
-<hkern u1="&#x27;" u2="A" k="143" />
-<hkern u1="&#x28;" u2="J" k="-184" />
-<hkern u1="&#x2c;" u2="&#x178;" k="123" />
-<hkern u1="&#x2c;" u2="&#x152;" k="102" />
-<hkern u1="&#x2c;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2c;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2c;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2c;" u2="&#xda;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2c;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2c;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2c;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2c;" u2="Y" k="123" />
-<hkern u1="&#x2c;" u2="W" k="123" />
-<hkern u1="&#x2c;" u2="V" k="123" />
-<hkern u1="&#x2c;" u2="U" k="41" />
-<hkern u1="&#x2c;" u2="T" k="143" />
-<hkern u1="&#x2c;" u2="Q" k="102" />
-<hkern u1="&#x2c;" u2="O" k="102" />
-<hkern u1="&#x2c;" u2="G" k="102" />
-<hkern u1="&#x2c;" u2="C" k="102" />
-<hkern u1="&#x2d;" u2="T" k="82" />
-<hkern u1="&#x2e;" u2="&#x178;" k="123" />
-<hkern u1="&#x2e;" u2="&#x152;" k="102" />
-<hkern u1="&#x2e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x2e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x2e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x2e;" u2="&#xda;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x2e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x2e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x2e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x2e;" u2="Y" k="123" />
-<hkern u1="&#x2e;" u2="W" k="123" />
-<hkern u1="&#x2e;" u2="V" k="123" />
-<hkern u1="&#x2e;" u2="U" k="41" />
-<hkern u1="&#x2e;" u2="T" k="143" />
-<hkern u1="&#x2e;" u2="Q" k="102" />
-<hkern u1="&#x2e;" u2="O" k="102" />
-<hkern u1="&#x2e;" u2="G" k="102" />
-<hkern u1="&#x2e;" u2="C" k="102" />
-<hkern u1="A" u2="&#x201d;" k="143" />
-<hkern u1="A" u2="&#x2019;" k="143" />
-<hkern u1="A" u2="&#x178;" k="123" />
-<hkern u1="A" u2="&#x152;" k="41" />
-<hkern u1="A" u2="&#xdd;" k="123" />
-<hkern u1="A" u2="&#xd8;" k="41" />
-<hkern u1="A" u2="&#xd6;" k="41" />
-<hkern u1="A" u2="&#xd5;" k="41" />
-<hkern u1="A" u2="&#xd4;" k="41" />
-<hkern u1="A" u2="&#xd3;" k="41" />
-<hkern u1="A" u2="&#xd2;" k="41" />
-<hkern u1="A" u2="&#xc7;" k="41" />
-<hkern u1="A" u2="Y" k="123" />
-<hkern u1="A" u2="W" k="82" />
-<hkern u1="A" u2="V" k="82" />
-<hkern u1="A" u2="T" k="143" />
-<hkern u1="A" u2="Q" k="41" />
-<hkern u1="A" u2="O" k="41" />
-<hkern u1="A" u2="J" k="-266" />
-<hkern u1="A" u2="G" k="41" />
-<hkern u1="A" u2="C" k="41" />
-<hkern u1="A" u2="&#x27;" k="143" />
-<hkern u1="A" u2="&#x22;" k="143" />
-<hkern u1="B" u2="&#x201e;" k="82" />
-<hkern u1="B" u2="&#x201a;" k="82" />
-<hkern u1="B" u2="&#x178;" k="20" />
-<hkern u1="B" u2="&#xdd;" k="20" />
-<hkern u1="B" u2="&#xc5;" k="41" />
-<hkern u1="B" u2="&#xc4;" k="41" />
-<hkern u1="B" u2="&#xc3;" k="41" />
-<hkern u1="B" u2="&#xc2;" k="41" />
-<hkern u1="B" u2="&#xc1;" k="41" />
-<hkern u1="B" u2="&#xc0;" k="41" />
-<hkern u1="B" u2="Z" k="20" />
-<hkern u1="B" u2="Y" k="20" />
-<hkern u1="B" u2="X" k="41" />
-<hkern u1="B" u2="W" k="20" />
-<hkern u1="B" u2="V" k="20" />
-<hkern u1="B" u2="T" k="61" />
-<hkern u1="B" u2="A" k="41" />
-<hkern u1="B" u2="&#x2e;" k="82" />
-<hkern u1="B" u2="&#x2c;" k="82" />
-<hkern u1="C" u2="&#x152;" k="41" />
-<hkern u1="C" u2="&#xd8;" k="41" />
-<hkern u1="C" u2="&#xd6;" k="41" />
-<hkern u1="C" u2="&#xd5;" k="41" />
-<hkern u1="C" u2="&#xd4;" k="41" />
-<hkern u1="C" u2="&#xd3;" k="41" />
-<hkern u1="C" u2="&#xd2;" k="41" />
-<hkern u1="C" u2="&#xc7;" k="41" />
-<hkern u1="C" u2="Q" k="41" />
-<hkern u1="C" u2="O" k="41" />
-<hkern u1="C" u2="G" k="41" />
-<hkern u1="C" u2="C" k="41" />
-<hkern u1="D" u2="&#x201e;" k="82" />
-<hkern u1="D" u2="&#x201a;" k="82" />
-<hkern u1="D" u2="&#x178;" k="20" />
-<hkern u1="D" u2="&#xdd;" k="20" />
-<hkern u1="D" u2="&#xc5;" k="41" />
-<hkern u1="D" u2="&#xc4;" k="41" />
-<hkern u1="D" u2="&#xc3;" k="41" />
-<hkern u1="D" u2="&#xc2;" k="41" />
-<hkern u1="D" u2="&#xc1;" k="41" />
-<hkern u1="D" u2="&#xc0;" k="41" />
-<hkern u1="D" u2="Z" k="20" />
-<hkern u1="D" u2="Y" k="20" />
-<hkern u1="D" u2="X" k="41" />
-<hkern u1="D" u2="W" k="20" />
-<hkern u1="D" u2="V" k="20" />
-<hkern u1="D" u2="T" k="61" />
-<hkern u1="D" u2="A" k="41" />
-<hkern u1="D" u2="&#x2e;" k="82" />
-<hkern u1="D" u2="&#x2c;" k="82" />
-<hkern u1="E" u2="J" k="-123" />
-<hkern u1="F" u2="&#x201e;" k="123" />
-<hkern u1="F" u2="&#x201a;" k="123" />
-<hkern u1="F" u2="&#xc5;" k="41" />
-<hkern u1="F" u2="&#xc4;" k="41" />
-<hkern u1="F" u2="&#xc3;" k="41" />
-<hkern u1="F" u2="&#xc2;" k="41" />
-<hkern u1="F" u2="&#xc1;" k="41" />
-<hkern u1="F" u2="&#xc0;" k="41" />
-<hkern u1="F" u2="A" k="41" />
-<hkern u1="F" u2="&#x3f;" k="-41" />
-<hkern u1="F" u2="&#x2e;" k="123" />
-<hkern u1="F" u2="&#x2c;" k="123" />
-<hkern u1="K" u2="&#x152;" k="41" />
-<hkern u1="K" u2="&#xd8;" k="41" />
-<hkern u1="K" u2="&#xd6;" k="41" />
-<hkern u1="K" u2="&#xd5;" k="41" />
-<hkern u1="K" u2="&#xd4;" k="41" />
-<hkern u1="K" u2="&#xd3;" k="41" />
-<hkern u1="K" u2="&#xd2;" k="41" />
-<hkern u1="K" u2="&#xc7;" k="41" />
-<hkern u1="K" u2="Q" k="41" />
-<hkern u1="K" u2="O" k="41" />
-<hkern u1="K" u2="G" k="41" />
-<hkern u1="K" u2="C" k="41" />
-<hkern u1="L" u2="&#x201d;" k="164" />
-<hkern u1="L" u2="&#x2019;" k="164" />
-<hkern u1="L" u2="&#x178;" k="61" />
-<hkern u1="L" u2="&#x152;" k="41" />
-<hkern u1="L" u2="&#xdd;" k="61" />
-<hkern u1="L" u2="&#xdc;" k="20" />
-<hkern u1="L" u2="&#xdb;" k="20" />
-<hkern u1="L" u2="&#xda;" k="20" />
-<hkern u1="L" u2="&#xd9;" k="20" />
-<hkern u1="L" u2="&#xd8;" k="41" />
-<hkern u1="L" u2="&#xd6;" k="41" />
-<hkern u1="L" u2="&#xd5;" k="41" />
-<hkern u1="L" u2="&#xd4;" k="41" />
-<hkern u1="L" u2="&#xd3;" k="41" />
-<hkern u1="L" u2="&#xd2;" k="41" />
-<hkern u1="L" u2="&#xc7;" k="41" />
-<hkern u1="L" u2="Y" k="61" />
-<hkern u1="L" u2="W" k="41" />
-<hkern u1="L" u2="V" k="41" />
-<hkern u1="L" u2="U" k="20" />
-<hkern u1="L" u2="T" k="41" />
-<hkern u1="L" u2="Q" k="41" />
-<hkern u1="L" u2="O" k="41" />
-<hkern u1="L" u2="G" k="41" />
-<hkern u1="L" u2="C" k="41" />
-<hkern u1="L" u2="&#x27;" k="164" />
-<hkern u1="L" u2="&#x22;" k="164" />
-<hkern u1="O" u2="&#x201e;" k="82" />
-<hkern u1="O" u2="&#x201a;" k="82" />
-<hkern u1="O" u2="&#x178;" k="20" />
-<hkern u1="O" u2="&#xdd;" k="20" />
-<hkern u1="O" u2="&#xc5;" k="41" />
-<hkern u1="O" u2="&#xc4;" k="41" />
-<hkern u1="O" u2="&#xc3;" k="41" />
-<hkern u1="O" u2="&#xc2;" k="41" />
-<hkern u1="O" u2="&#xc1;" k="41" />
-<hkern u1="O" u2="&#xc0;" k="41" />
-<hkern u1="O" u2="Z" k="20" />
-<hkern u1="O" u2="Y" k="20" />
-<hkern u1="O" u2="X" k="41" />
-<hkern u1="O" u2="W" k="20" />
-<hkern u1="O" u2="V" k="20" />
-<hkern u1="O" u2="T" k="61" />
-<hkern u1="O" u2="A" k="41" />
-<hkern u1="O" u2="&#x2e;" k="82" />
-<hkern u1="O" u2="&#x2c;" k="82" />
-<hkern u1="P" u2="&#x201e;" k="266" />
-<hkern u1="P" u2="&#x201a;" k="266" />
-<hkern u1="P" u2="&#xc5;" k="102" />
-<hkern u1="P" u2="&#xc4;" k="102" />
-<hkern u1="P" u2="&#xc3;" k="102" />
-<hkern u1="P" u2="&#xc2;" k="102" />
-<hkern u1="P" u2="&#xc1;" k="102" />
-<hkern u1="P" u2="&#xc0;" k="102" />
-<hkern u1="P" u2="Z" k="20" />
-<hkern u1="P" u2="X" k="41" />
-<hkern u1="P" u2="A" k="102" />
-<hkern u1="P" u2="&#x2e;" k="266" />
-<hkern u1="P" u2="&#x2c;" k="266" />
-<hkern u1="Q" u2="&#x201e;" k="82" />
-<hkern u1="Q" u2="&#x201a;" k="82" />
-<hkern u1="Q" u2="&#x178;" k="20" />
-<hkern u1="Q" u2="&#xdd;" k="20" />
-<hkern u1="Q" u2="&#xc5;" k="41" />
-<hkern u1="Q" u2="&#xc4;" k="41" />
-<hkern u1="Q" u2="&#xc3;" k="41" />
-<hkern u1="Q" u2="&#xc2;" k="41" />
-<hkern u1="Q" u2="&#xc1;" k="41" />
-<hkern u1="Q" u2="&#xc0;" k="41" />
-<hkern u1="Q" u2="Z" k="20" />
-<hkern u1="Q" u2="Y" k="20" />
-<hkern u1="Q" u2="X" k="41" />
-<hkern u1="Q" u2="W" k="20" />
-<hkern u1="Q" u2="V" k="20" />
-<hkern u1="Q" u2="T" k="61" />
-<hkern u1="Q" u2="A" k="41" />
-<hkern u1="Q" u2="&#x2e;" k="82" />
-<hkern u1="Q" u2="&#x2c;" k="82" />
-<hkern u1="T" u2="&#x201e;" k="123" />
-<hkern u1="T" u2="&#x201a;" k="123" />
-<hkern u1="T" u2="&#x2014;" k="82" />
-<hkern u1="T" u2="&#x2013;" k="82" />
-<hkern u1="T" u2="&#x153;" k="143" />
-<hkern u1="T" u2="&#x152;" k="41" />
-<hkern u1="T" u2="&#xfd;" k="41" />
-<hkern u1="T" u2="&#xfc;" k="102" />
-<hkern u1="T" u2="&#xfb;" k="102" />
-<hkern u1="T" u2="&#xfa;" k="102" />
-<hkern u1="T" u2="&#xf9;" k="102" />
-<hkern u1="T" u2="&#xf8;" k="143" />
-<hkern u1="T" u2="&#xf6;" k="143" />
-<hkern u1="T" u2="&#xf5;" k="143" />
-<hkern u1="T" u2="&#xf4;" k="143" />
-<hkern u1="T" u2="&#xf3;" k="143" />
-<hkern u1="T" u2="&#xf2;" k="143" />
-<hkern u1="T" u2="&#xeb;" k="143" />
-<hkern u1="T" u2="&#xea;" k="143" />
-<hkern u1="T" u2="&#xe9;" k="143" />
-<hkern u1="T" u2="&#xe8;" k="143" />
-<hkern u1="T" u2="&#xe7;" k="143" />
-<hkern u1="T" u2="&#xe6;" k="164" />
-<hkern u1="T" u2="&#xe5;" k="164" />
-<hkern u1="T" u2="&#xe4;" k="164" />
-<hkern u1="T" u2="&#xe3;" k="164" />
-<hkern u1="T" u2="&#xe2;" k="164" />
-<hkern u1="T" u2="&#xe1;" k="164" />
-<hkern u1="T" u2="&#xe0;" k="143" />
-<hkern u1="T" u2="&#xd8;" k="41" />
-<hkern u1="T" u2="&#xd6;" k="41" />
-<hkern u1="T" u2="&#xd5;" k="41" />
-<hkern u1="T" u2="&#xd4;" k="41" />
-<hkern u1="T" u2="&#xd3;" k="41" />
-<hkern u1="T" u2="&#xd2;" k="41" />
-<hkern u1="T" u2="&#xc7;" k="41" />
-<hkern u1="T" u2="&#xc5;" k="143" />
-<hkern u1="T" u2="&#xc4;" k="143" />
-<hkern u1="T" u2="&#xc3;" k="143" />
-<hkern u1="T" u2="&#xc2;" k="143" />
-<hkern u1="T" u2="&#xc1;" k="143" />
-<hkern u1="T" u2="&#xc0;" k="143" />
-<hkern u1="T" u2="z" k="82" />
-<hkern u1="T" u2="y" k="41" />
-<hkern u1="T" u2="x" k="41" />
-<hkern u1="T" u2="w" k="41" />
-<hkern u1="T" u2="v" k="41" />
-<hkern u1="T" u2="u" k="102" />
-<hkern u1="T" u2="s" k="123" />
-<hkern u1="T" u2="r" k="102" />
-<hkern u1="T" u2="q" k="143" />
-<hkern u1="T" u2="p" k="102" />
-<hkern u1="T" u2="o" k="143" />
-<hkern u1="T" u2="n" k="102" />
-<hkern u1="T" u2="m" k="102" />
-<hkern u1="T" u2="g" k="143" />
-<hkern u1="T" u2="e" k="143" />
-<hkern u1="T" u2="d" k="143" />
-<hkern u1="T" u2="c" k="143" />
-<hkern u1="T" u2="a" k="164" />
-<hkern u1="T" u2="T" k="-41" />
-<hkern u1="T" u2="Q" k="41" />
-<hkern u1="T" u2="O" k="41" />
-<hkern u1="T" u2="G" k="41" />
-<hkern u1="T" u2="C" k="41" />
-<hkern u1="T" u2="A" k="143" />
-<hkern u1="T" u2="&#x3f;" k="-41" />
-<hkern u1="T" u2="&#x2e;" k="123" />
-<hkern u1="T" u2="&#x2d;" k="82" />
-<hkern u1="T" u2="&#x2c;" k="123" />
-<hkern u1="U" u2="&#x201e;" k="41" />
-<hkern u1="U" u2="&#x201a;" k="41" />
-<hkern u1="U" u2="&#xc5;" k="20" />
-<hkern u1="U" u2="&#xc4;" k="20" />
-<hkern u1="U" u2="&#xc3;" k="20" />
-<hkern u1="U" u2="&#xc2;" k="20" />
-<hkern u1="U" u2="&#xc1;" k="20" />
-<hkern u1="U" u2="&#xc0;" k="20" />
-<hkern u1="U" u2="A" k="20" />
-<hkern u1="U" u2="&#x2e;" k="41" />
-<hkern u1="U" u2="&#x2c;" k="41" />
-<hkern u1="V" u2="&#x201e;" k="102" />
-<hkern u1="V" u2="&#x201a;" k="102" />
-<hkern u1="V" u2="&#x153;" k="41" />
-<hkern u1="V" u2="&#x152;" k="20" />
-<hkern u1="V" u2="&#xfc;" k="20" />
-<hkern u1="V" u2="&#xfb;" k="20" />
-<hkern u1="V" u2="&#xfa;" k="20" />
-<hkern u1="V" u2="&#xf9;" k="20" />
-<hkern u1="V" u2="&#xf8;" k="41" />
-<hkern u1="V" u2="&#xf6;" k="41" />
-<hkern u1="V" u2="&#xf5;" k="41" />
-<hkern u1="V" u2="&#xf4;" k="41" />
-<hkern u1="V" u2="&#xf3;" k="41" />
-<hkern u1="V" u2="&#xf2;" k="41" />
-<hkern u1="V" u2="&#xeb;" k="41" />
-<hkern u1="V" u2="&#xea;" k="41" />
-<hkern u1="V" u2="&#xe9;" k="41" />
-<hkern u1="V" u2="&#xe8;" k="41" />
-<hkern u1="V" u2="&#xe7;" k="41" />
-<hkern u1="V" u2="&#xe6;" k="41" />
-<hkern u1="V" u2="&#xe5;" k="41" />
-<hkern u1="V" u2="&#xe4;" k="41" />
-<hkern u1="V" u2="&#xe3;" k="41" />
-<hkern u1="V" u2="&#xe2;" k="41" />
-<hkern u1="V" u2="&#xe1;" k="41" />
-<hkern u1="V" u2="&#xe0;" k="41" />
-<hkern u1="V" u2="&#xd8;" k="20" />
-<hkern u1="V" u2="&#xd6;" k="20" />
-<hkern u1="V" u2="&#xd5;" k="20" />
-<hkern u1="V" u2="&#xd4;" k="20" />
-<hkern u1="V" u2="&#xd3;" k="20" />
-<hkern u1="V" u2="&#xd2;" k="20" />
-<hkern u1="V" u2="&#xc7;" k="20" />
-<hkern u1="V" u2="&#xc5;" k="82" />
-<hkern u1="V" u2="&#xc4;" k="82" />
-<hkern u1="V" u2="&#xc3;" k="82" />
-<hkern u1="V" u2="&#xc2;" k="82" />
-<hkern u1="V" u2="&#xc1;" k="82" />
-<hkern u1="V" u2="&#xc0;" k="82" />
-<hkern u1="V" u2="u" k="20" />
-<hkern u1="V" u2="s" k="20" />
-<hkern u1="V" u2="r" k="20" />
-<hkern u1="V" u2="q" k="41" />
-<hkern u1="V" u2="p" k="20" />
-<hkern u1="V" u2="o" k="41" />
-<hkern u1="V" u2="n" k="20" />
-<hkern u1="V" u2="m" k="20" />
-<hkern u1="V" u2="g" k="20" />
-<hkern u1="V" u2="e" k="41" />
-<hkern u1="V" u2="d" k="41" />
-<hkern u1="V" u2="c" k="41" />
-<hkern u1="V" u2="a" k="41" />
-<hkern u1="V" u2="Q" k="20" />
-<hkern u1="V" u2="O" k="20" />
-<hkern u1="V" u2="G" k="20" />
-<hkern u1="V" u2="C" k="20" />
-<hkern u1="V" u2="A" k="82" />
-<hkern u1="V" u2="&#x3f;" k="-41" />
-<hkern u1="V" u2="&#x2e;" k="102" />
-<hkern u1="V" u2="&#x2c;" k="102" />
-<hkern u1="W" u2="&#x201e;" k="102" />
-<hkern u1="W" u2="&#x201a;" k="102" />
-<hkern u1="W" u2="&#x153;" k="41" />
-<hkern u1="W" u2="&#x152;" k="20" />
-<hkern u1="W" u2="&#xfc;" k="20" />
-<hkern u1="W" u2="&#xfb;" k="20" />
-<hkern u1="W" u2="&#xfa;" k="20" />
-<hkern u1="W" u2="&#xf9;" k="20" />
-<hkern u1="W" u2="&#xf8;" k="41" />
-<hkern u1="W" u2="&#xf6;" k="41" />
-<hkern u1="W" u2="&#xf5;" k="41" />
-<hkern u1="W" u2="&#xf4;" k="41" />
-<hkern u1="W" u2="&#xf3;" k="41" />
-<hkern u1="W" u2="&#xf2;" k="41" />
-<hkern u1="W" u2="&#xeb;" k="41" />
-<hkern u1="W" u2="&#xea;" k="41" />
-<hkern u1="W" u2="&#xe9;" k="41" />
-<hkern u1="W" u2="&#xe8;" k="41" />
-<hkern u1="W" u2="&#xe7;" k="41" />
-<hkern u1="W" u2="&#xe6;" k="41" />
-<hkern u1="W" u2="&#xe5;" k="41" />
-<hkern u1="W" u2="&#xe4;" k="41" />
-<hkern u1="W" u2="&#xe3;" k="41" />
-<hkern u1="W" u2="&#xe2;" k="41" />
-<hkern u1="W" u2="&#xe1;" k="41" />
-<hkern u1="W" u2="&#xe0;" k="41" />
-<hkern u1="W" u2="&#xd8;" k="20" />
-<hkern u1="W" u2="&#xd6;" k="20" />
-<hkern u1="W" u2="&#xd5;" k="20" />
-<hkern u1="W" u2="&#xd4;" k="20" />
-<hkern u1="W" u2="&#xd3;" k="20" />
-<hkern u1="W" u2="&#xd2;" k="20" />
-<hkern u1="W" u2="&#xc7;" k="20" />
-<hkern u1="W" u2="&#xc5;" k="82" />
-<hkern u1="W" u2="&#xc4;" k="82" />
-<hkern u1="W" u2="&#xc3;" k="82" />
-<hkern u1="W" u2="&#xc2;" k="82" />
-<hkern u1="W" u2="&#xc1;" k="82" />
-<hkern u1="W" u2="&#xc0;" k="82" />
-<hkern u1="W" u2="u" k="20" />
-<hkern u1="W" u2="s" k="20" />
-<hkern u1="W" u2="r" k="20" />
-<hkern u1="W" u2="q" k="41" />
-<hkern u1="W" u2="p" k="20" />
-<hkern u1="W" u2="o" k="41" />
-<hkern u1="W" u2="n" k="20" />
-<hkern u1="W" u2="m" k="20" />
-<hkern u1="W" u2="g" k="20" />
-<hkern u1="W" u2="e" k="41" />
-<hkern u1="W" u2="d" k="41" />
-<hkern u1="W" u2="c" k="41" />
-<hkern u1="W" u2="a" k="41" />
-<hkern u1="W" u2="Q" k="20" />
-<hkern u1="W" u2="O" k="20" />
-<hkern u1="W" u2="G" k="20" />
-<hkern u1="W" u2="C" k="20" />
-<hkern u1="W" u2="A" k="82" />
-<hkern u1="W" u2="&#x3f;" k="-41" />
-<hkern u1="W" u2="&#x2e;" k="102" />
-<hkern u1="W" u2="&#x2c;" k="102" />
-<hkern u1="X" u2="&#x152;" k="41" />
-<hkern u1="X" u2="&#xd8;" k="41" />
-<hkern u1="X" u2="&#xd6;" k="41" />
-<hkern u1="X" u2="&#xd5;" k="41" />
-<hkern u1="X" u2="&#xd4;" k="41" />
-<hkern u1="X" u2="&#xd3;" k="41" />
-<hkern u1="X" u2="&#xd2;" k="41" />
-<hkern u1="X" u2="&#xc7;" k="41" />
-<hkern u1="X" u2="Q" k="41" />
-<hkern u1="X" u2="O" k="41" />
-<hkern u1="X" u2="G" k="41" />
-<hkern u1="X" u2="C" k="41" />
-<hkern u1="Y" u2="&#x201e;" k="123" />
-<hkern u1="Y" u2="&#x201a;" k="123" />
-<hkern u1="Y" u2="&#x153;" k="102" />
-<hkern u1="Y" u2="&#x152;" k="41" />
-<hkern u1="Y" u2="&#xfc;" k="61" />
-<hkern u1="Y" u2="&#xfb;" k="61" />
-<hkern u1="Y" u2="&#xfa;" k="61" />
-<hkern u1="Y" u2="&#xf9;" k="61" />
-<hkern u1="Y" u2="&#xf8;" k="102" />
-<hkern u1="Y" u2="&#xf6;" k="102" />
-<hkern u1="Y" u2="&#xf5;" k="102" />
-<hkern u1="Y" u2="&#xf4;" k="102" />
-<hkern u1="Y" u2="&#xf3;" k="102" />
-<hkern u1="Y" u2="&#xf2;" k="102" />
-<hkern u1="Y" u2="&#xeb;" k="102" />
-<hkern u1="Y" u2="&#xea;" k="102" />
-<hkern u1="Y" u2="&#xe9;" k="102" />
-<hkern u1="Y" u2="&#xe8;" k="102" />
-<hkern u1="Y" u2="&#xe7;" k="102" />
-<hkern u1="Y" u2="&#xe6;" k="102" />
-<hkern u1="Y" u2="&#xe5;" k="102" />
-<hkern u1="Y" u2="&#xe4;" k="102" />
-<hkern u1="Y" u2="&#xe3;" k="102" />
-<hkern u1="Y" u2="&#xe2;" k="102" />
-<hkern u1="Y" u2="&#xe1;" k="102" />
-<hkern u1="Y" u2="&#xe0;" k="102" />
-<hkern u1="Y" u2="&#xd8;" k="41" />
-<hkern u1="Y" u2="&#xd6;" k="41" />
-<hkern u1="Y" u2="&#xd5;" k="41" />
-<hkern u1="Y" u2="&#xd4;" k="41" />
-<hkern u1="Y" u2="&#xd3;" k="41" />
-<hkern u1="Y" u2="&#xd2;" k="41" />
-<hkern u1="Y" u2="&#xc7;" k="41" />
-<hkern u1="Y" u2="&#xc5;" k="123" />
-<hkern u1="Y" u2="&#xc4;" k="123" />
-<hkern u1="Y" u2="&#xc3;" k="123" />
-<hkern u1="Y" u2="&#xc2;" k="123" />
-<hkern u1="Y" u2="&#xc1;" k="123" />
-<hkern u1="Y" u2="&#xc0;" k="123" />
-<hkern u1="Y" u2="z" k="41" />
-<hkern u1="Y" u2="u" k="61" />
-<hkern u1="Y" u2="s" k="82" />
-<hkern u1="Y" u2="r" k="61" />
-<hkern u1="Y" u2="q" k="102" />
-<hkern u1="Y" u2="p" k="61" />
-<hkern u1="Y" u2="o" k="102" />
-<hkern u1="Y" u2="n" k="61" />
-<hkern u1="Y" u2="m" k="61" />
-<hkern u1="Y" u2="g" k="41" />
-<hkern u1="Y" u2="e" k="102" />
-<hkern u1="Y" u2="d" k="102" />
-<hkern u1="Y" u2="c" k="102" />
-<hkern u1="Y" u2="a" k="102" />
-<hkern u1="Y" u2="Q" k="41" />
-<hkern u1="Y" u2="O" k="41" />
-<hkern u1="Y" u2="G" k="41" />
-<hkern u1="Y" u2="C" k="41" />
-<hkern u1="Y" u2="A" k="123" />
-<hkern u1="Y" u2="&#x3f;" k="-41" />
-<hkern u1="Y" u2="&#x2e;" k="123" />
-<hkern u1="Y" u2="&#x2c;" k="123" />
-<hkern u1="Z" u2="&#x152;" k="20" />
-<hkern u1="Z" u2="&#xd8;" k="20" />
-<hkern u1="Z" u2="&#xd6;" k="20" />
-<hkern u1="Z" u2="&#xd5;" k="20" />
-<hkern u1="Z" u2="&#xd4;" k="20" />
-<hkern u1="Z" u2="&#xd3;" k="20" />
-<hkern u1="Z" u2="&#xd2;" k="20" />
-<hkern u1="Z" u2="&#xc7;" k="20" />
-<hkern u1="Z" u2="Q" k="20" />
-<hkern u1="Z" u2="O" k="20" />
-<hkern u1="Z" u2="G" k="20" />
-<hkern u1="Z" u2="C" k="20" />
-<hkern u1="[" u2="J" k="-184" />
-<hkern u1="a" u2="&#x201d;" k="20" />
-<hkern u1="a" u2="&#x2019;" k="20" />
-<hkern u1="a" u2="&#x27;" k="20" />
-<hkern u1="a" u2="&#x22;" k="20" />
-<hkern u1="b" u2="&#x201d;" k="20" />
-<hkern u1="b" u2="&#x2019;" k="20" />
-<hkern u1="b" u2="&#xfd;" k="41" />
-<hkern u1="b" u2="z" k="20" />
-<hkern u1="b" u2="y" k="41" />
-<hkern u1="b" u2="x" k="41" />
-<hkern u1="b" u2="w" k="41" />
-<hkern u1="b" u2="v" k="41" />
-<hkern u1="b" u2="&#x27;" k="20" />
-<hkern u1="b" u2="&#x22;" k="20" />
-<hkern u1="c" u2="&#x201d;" k="-41" />
-<hkern u1="c" u2="&#x2019;" k="-41" />
-<hkern u1="c" u2="&#x27;" k="-41" />
-<hkern u1="c" u2="&#x22;" k="-41" />
-<hkern u1="e" u2="&#x201d;" k="20" />
-<hkern u1="e" u2="&#x2019;" k="20" />
-<hkern u1="e" u2="&#xfd;" k="41" />
-<hkern u1="e" u2="z" k="20" />
-<hkern u1="e" u2="y" k="41" />
-<hkern u1="e" u2="x" k="41" />
-<hkern u1="e" u2="w" k="41" />
-<hkern u1="e" u2="v" k="41" />
-<hkern u1="e" u2="&#x27;" k="20" />
-<hkern u1="e" u2="&#x22;" k="20" />
-<hkern u1="f" u2="&#x201d;" k="-123" />
-<hkern u1="f" u2="&#x2019;" k="-123" />
-<hkern u1="f" u2="&#x27;" k="-123" />
-<hkern u1="f" u2="&#x22;" k="-123" />
-<hkern u1="h" u2="&#x201d;" k="20" />
-<hkern u1="h" u2="&#x2019;" k="20" />
-<hkern u1="h" u2="&#x27;" k="20" />
-<hkern u1="h" u2="&#x22;" k="20" />
-<hkern u1="k" u2="&#x153;" k="41" />
-<hkern u1="k" u2="&#xf8;" k="41" />
-<hkern u1="k" u2="&#xf6;" k="41" />
-<hkern u1="k" u2="&#xf5;" k="41" />
-<hkern u1="k" u2="&#xf4;" k="41" />
-<hkern u1="k" u2="&#xf3;" k="41" />
-<hkern u1="k" u2="&#xf2;" k="41" />
-<hkern u1="k" u2="&#xeb;" k="41" />
-<hkern u1="k" u2="&#xea;" k="41" />
-<hkern u1="k" u2="&#xe9;" k="41" />
-<hkern u1="k" u2="&#xe8;" k="41" />
-<hkern u1="k" u2="&#xe7;" k="41" />
-<hkern u1="k" u2="&#xe0;" k="41" />
-<hkern u1="k" u2="q" k="41" />
-<hkern u1="k" u2="o" k="41" />
-<hkern u1="k" u2="e" k="41" />
-<hkern u1="k" u2="d" k="41" />
-<hkern u1="k" u2="c" k="41" />
-<hkern u1="m" u2="&#x201d;" k="20" />
-<hkern u1="m" u2="&#x2019;" k="20" />
-<hkern u1="m" u2="&#x27;" k="20" />
-<hkern u1="m" u2="&#x22;" k="20" />
-<hkern u1="n" u2="&#x201d;" k="20" />
-<hkern u1="n" u2="&#x2019;" k="20" />
-<hkern u1="n" u2="&#x27;" k="20" />
-<hkern u1="n" u2="&#x22;" k="20" />
-<hkern u1="o" u2="&#x201d;" k="20" />
-<hkern u1="o" u2="&#x2019;" k="20" />
-<hkern u1="o" u2="&#xfd;" k="41" />
-<hkern u1="o" u2="z" k="20" />
-<hkern u1="o" u2="y" k="41" />
-<hkern u1="o" u2="x" k="41" />
-<hkern u1="o" u2="w" k="41" />
-<hkern u1="o" u2="v" k="41" />
-<hkern u1="o" u2="&#x27;" k="20" />
-<hkern u1="o" u2="&#x22;" k="20" />
-<hkern u1="p" u2="&#x201d;" k="20" />
-<hkern u1="p" u2="&#x2019;" k="20" />
-<hkern u1="p" u2="&#xfd;" k="41" />
-<hkern u1="p" u2="z" k="20" />
-<hkern u1="p" u2="y" k="41" />
-<hkern u1="p" u2="x" k="41" />
-<hkern u1="p" u2="w" k="41" />
-<hkern u1="p" u2="v" k="41" />
-<hkern u1="p" u2="&#x27;" k="20" />
-<hkern u1="p" u2="&#x22;" k="20" />
-<hkern u1="r" u2="&#x201d;" k="-82" />
-<hkern u1="r" u2="&#x2019;" k="-82" />
-<hkern u1="r" u2="&#x153;" k="41" />
-<hkern u1="r" u2="&#xf8;" k="41" />
-<hkern u1="r" u2="&#xf6;" k="41" />
-<hkern u1="r" u2="&#xf5;" k="41" />
-<hkern u1="r" u2="&#xf4;" k="41" />
-<hkern u1="r" u2="&#xf3;" k="41" />
-<hkern u1="r" u2="&#xf2;" k="41" />
-<hkern u1="r" u2="&#xeb;" k="41" />
-<hkern u1="r" u2="&#xea;" k="41" />
-<hkern u1="r" u2="&#xe9;" k="41" />
-<hkern u1="r" u2="&#xe8;" k="41" />
-<hkern u1="r" u2="&#xe7;" k="41" />
-<hkern u1="r" u2="&#xe6;" k="41" />
-<hkern u1="r" u2="&#xe5;" k="41" />
-<hkern u1="r" u2="&#xe4;" k="41" />
-<hkern u1="r" u2="&#xe3;" k="41" />
-<hkern u1="r" u2="&#xe2;" k="41" />
-<hkern u1="r" u2="&#xe1;" k="41" />
-<hkern u1="r" u2="&#xe0;" k="41" />
-<hkern u1="r" u2="q" k="41" />
-<hkern u1="r" u2="o" k="41" />
-<hkern u1="r" u2="g" k="20" />
-<hkern u1="r" u2="e" k="41" />
-<hkern u1="r" u2="d" k="41" />
-<hkern u1="r" u2="c" k="41" />
-<hkern u1="r" u2="a" k="41" />
-<hkern u1="r" u2="&#x27;" k="-82" />
-<hkern u1="r" u2="&#x22;" k="-82" />
-<hkern u1="t" u2="&#x201d;" k="-41" />
-<hkern u1="t" u2="&#x2019;" k="-41" />
-<hkern u1="t" u2="&#x27;" k="-41" />
-<hkern u1="t" u2="&#x22;" k="-41" />
-<hkern u1="v" u2="&#x201e;" k="82" />
-<hkern u1="v" u2="&#x201d;" k="-82" />
-<hkern u1="v" u2="&#x201a;" k="82" />
-<hkern u1="v" u2="&#x2019;" k="-82" />
-<hkern u1="v" u2="&#x3f;" k="-41" />
-<hkern u1="v" u2="&#x2e;" k="82" />
-<hkern u1="v" u2="&#x2c;" k="82" />
-<hkern u1="v" u2="&#x27;" k="-82" />
-<hkern u1="v" u2="&#x22;" k="-82" />
-<hkern u1="w" u2="&#x201e;" k="82" />
-<hkern u1="w" u2="&#x201d;" k="-82" />
-<hkern u1="w" u2="&#x201a;" k="82" />
-<hkern u1="w" u2="&#x2019;" k="-82" />
-<hkern u1="w" u2="&#x3f;" k="-41" />
-<hkern u1="w" u2="&#x2e;" k="82" />
-<hkern u1="w" u2="&#x2c;" k="82" />
-<hkern u1="w" u2="&#x27;" k="-82" />
-<hkern u1="w" u2="&#x22;" k="-82" />
-<hkern u1="x" u2="&#x153;" k="41" />
-<hkern u1="x" u2="&#xf8;" k="41" />
-<hkern u1="x" u2="&#xf6;" k="41" />
-<hkern u1="x" u2="&#xf5;" k="41" />
-<hkern u1="x" u2="&#xf4;" k="41" />
-<hkern u1="x" u2="&#xf3;" k="41" />
-<hkern u1="x" u2="&#xf2;" k="41" />
-<hkern u1="x" u2="&#xeb;" k="41" />
-<hkern u1="x" u2="&#xea;" k="41" />
-<hkern u1="x" u2="&#xe9;" k="41" />
-<hkern u1="x" u2="&#xe8;" k="41" />
-<hkern u1="x" u2="&#xe7;" k="41" />
-<hkern u1="x" u2="&#xe0;" k="41" />
-<hkern u1="x" u2="q" k="41" />
-<hkern u1="x" u2="o" k="41" />
-<hkern u1="x" u2="e" k="41" />
-<hkern u1="x" u2="d" k="41" />
-<hkern u1="x" u2="c" k="41" />
-<hkern u1="y" u2="&#x201e;" k="82" />
-<hkern u1="y" u2="&#x201d;" k="-82" />
-<hkern u1="y" u2="&#x201a;" k="82" />
-<hkern u1="y" u2="&#x2019;" k="-82" />
-<hkern u1="y" u2="&#x3f;" k="-41" />
-<hkern u1="y" u2="&#x2e;" k="82" />
-<hkern u1="y" u2="&#x2c;" k="82" />
-<hkern u1="y" u2="&#x27;" k="-82" />
-<hkern u1="y" u2="&#x22;" k="-82" />
-<hkern u1="&#x7b;" u2="J" k="-184" />
-<hkern u1="&#xc0;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc0;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc0;" u2="&#x178;" k="123" />
-<hkern u1="&#xc0;" u2="&#x152;" k="41" />
-<hkern u1="&#xc0;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc0;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc0;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc0;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc0;" u2="Y" k="123" />
-<hkern u1="&#xc0;" u2="W" k="82" />
-<hkern u1="&#xc0;" u2="V" k="82" />
-<hkern u1="&#xc0;" u2="T" k="143" />
-<hkern u1="&#xc0;" u2="Q" k="41" />
-<hkern u1="&#xc0;" u2="O" k="41" />
-<hkern u1="&#xc0;" u2="J" k="-266" />
-<hkern u1="&#xc0;" u2="G" k="41" />
-<hkern u1="&#xc0;" u2="C" k="41" />
-<hkern u1="&#xc0;" u2="&#x27;" k="143" />
-<hkern u1="&#xc0;" u2="&#x22;" k="143" />
-<hkern u1="&#xc1;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc1;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc1;" u2="&#x178;" k="123" />
-<hkern u1="&#xc1;" u2="&#x152;" k="41" />
-<hkern u1="&#xc1;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc1;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc1;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc1;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc1;" u2="Y" k="123" />
-<hkern u1="&#xc1;" u2="W" k="82" />
-<hkern u1="&#xc1;" u2="V" k="82" />
-<hkern u1="&#xc1;" u2="T" k="143" />
-<hkern u1="&#xc1;" u2="Q" k="41" />
-<hkern u1="&#xc1;" u2="O" k="41" />
-<hkern u1="&#xc1;" u2="J" k="-266" />
-<hkern u1="&#xc1;" u2="G" k="41" />
-<hkern u1="&#xc1;" u2="C" k="41" />
-<hkern u1="&#xc1;" u2="&#x27;" k="143" />
-<hkern u1="&#xc1;" u2="&#x22;" k="143" />
-<hkern u1="&#xc2;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc2;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc2;" u2="&#x178;" k="123" />
-<hkern u1="&#xc2;" u2="&#x152;" k="41" />
-<hkern u1="&#xc2;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc2;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc2;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc2;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc2;" u2="Y" k="123" />
-<hkern u1="&#xc2;" u2="W" k="82" />
-<hkern u1="&#xc2;" u2="V" k="82" />
-<hkern u1="&#xc2;" u2="T" k="143" />
-<hkern u1="&#xc2;" u2="Q" k="41" />
-<hkern u1="&#xc2;" u2="O" k="41" />
-<hkern u1="&#xc2;" u2="J" k="-266" />
-<hkern u1="&#xc2;" u2="G" k="41" />
-<hkern u1="&#xc2;" u2="C" k="41" />
-<hkern u1="&#xc2;" u2="&#x27;" k="143" />
-<hkern u1="&#xc2;" u2="&#x22;" k="143" />
-<hkern u1="&#xc3;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc3;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc3;" u2="&#x178;" k="123" />
-<hkern u1="&#xc3;" u2="&#x152;" k="41" />
-<hkern u1="&#xc3;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc3;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc3;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc3;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc3;" u2="Y" k="123" />
-<hkern u1="&#xc3;" u2="W" k="82" />
-<hkern u1="&#xc3;" u2="V" k="82" />
-<hkern u1="&#xc3;" u2="T" k="143" />
-<hkern u1="&#xc3;" u2="Q" k="41" />
-<hkern u1="&#xc3;" u2="O" k="41" />
-<hkern u1="&#xc3;" u2="J" k="-266" />
-<hkern u1="&#xc3;" u2="G" k="41" />
-<hkern u1="&#xc3;" u2="C" k="41" />
-<hkern u1="&#xc3;" u2="&#x27;" k="143" />
-<hkern u1="&#xc3;" u2="&#x22;" k="143" />
-<hkern u1="&#xc4;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc4;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc4;" u2="&#x178;" k="123" />
-<hkern u1="&#xc4;" u2="&#x152;" k="41" />
-<hkern u1="&#xc4;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc4;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc4;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc4;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc4;" u2="Y" k="123" />
-<hkern u1="&#xc4;" u2="W" k="82" />
-<hkern u1="&#xc4;" u2="V" k="82" />
-<hkern u1="&#xc4;" u2="T" k="143" />
-<hkern u1="&#xc4;" u2="Q" k="41" />
-<hkern u1="&#xc4;" u2="O" k="41" />
-<hkern u1="&#xc4;" u2="J" k="-266" />
-<hkern u1="&#xc4;" u2="G" k="41" />
-<hkern u1="&#xc4;" u2="C" k="41" />
-<hkern u1="&#xc4;" u2="&#x27;" k="143" />
-<hkern u1="&#xc4;" u2="&#x22;" k="143" />
-<hkern u1="&#xc5;" u2="&#x201d;" k="143" />
-<hkern u1="&#xc5;" u2="&#x2019;" k="143" />
-<hkern u1="&#xc5;" u2="&#x178;" k="123" />
-<hkern u1="&#xc5;" u2="&#x152;" k="41" />
-<hkern u1="&#xc5;" u2="&#xdd;" k="123" />
-<hkern u1="&#xc5;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc5;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc5;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc5;" u2="Y" k="123" />
-<hkern u1="&#xc5;" u2="W" k="82" />
-<hkern u1="&#xc5;" u2="V" k="82" />
-<hkern u1="&#xc5;" u2="T" k="143" />
-<hkern u1="&#xc5;" u2="Q" k="41" />
-<hkern u1="&#xc5;" u2="O" k="41" />
-<hkern u1="&#xc5;" u2="J" k="-266" />
-<hkern u1="&#xc5;" u2="G" k="41" />
-<hkern u1="&#xc5;" u2="C" k="41" />
-<hkern u1="&#xc5;" u2="&#x27;" k="143" />
-<hkern u1="&#xc5;" u2="&#x22;" k="143" />
-<hkern u1="&#xc6;" u2="J" k="-123" />
-<hkern u1="&#xc7;" u2="&#x152;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd8;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd6;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd5;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd4;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd3;" k="41" />
-<hkern u1="&#xc7;" u2="&#xd2;" k="41" />
-<hkern u1="&#xc7;" u2="&#xc7;" k="41" />
-<hkern u1="&#xc7;" u2="Q" k="41" />
-<hkern u1="&#xc7;" u2="O" k="41" />
-<hkern u1="&#xc7;" u2="G" k="41" />
-<hkern u1="&#xc7;" u2="C" k="41" />
-<hkern u1="&#xc8;" u2="J" k="-123" />
-<hkern u1="&#xc9;" u2="J" k="-123" />
-<hkern u1="&#xca;" u2="J" k="-123" />
-<hkern u1="&#xcb;" u2="J" k="-123" />
-<hkern u1="&#xd0;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd0;" u2="&#x178;" k="20" />
-<hkern u1="&#xd0;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd0;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd0;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd0;" u2="Z" k="20" />
-<hkern u1="&#xd0;" u2="Y" k="20" />
-<hkern u1="&#xd0;" u2="X" k="41" />
-<hkern u1="&#xd0;" u2="W" k="20" />
-<hkern u1="&#xd0;" u2="V" k="20" />
-<hkern u1="&#xd0;" u2="T" k="61" />
-<hkern u1="&#xd0;" u2="A" k="41" />
-<hkern u1="&#xd0;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd0;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd2;" u2="&#x178;" k="20" />
-<hkern u1="&#xd2;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd2;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd2;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd2;" u2="Z" k="20" />
-<hkern u1="&#xd2;" u2="Y" k="20" />
-<hkern u1="&#xd2;" u2="X" k="41" />
-<hkern u1="&#xd2;" u2="W" k="20" />
-<hkern u1="&#xd2;" u2="V" k="20" />
-<hkern u1="&#xd2;" u2="T" k="61" />
-<hkern u1="&#xd2;" u2="A" k="41" />
-<hkern u1="&#xd2;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd2;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd3;" u2="&#x178;" k="20" />
-<hkern u1="&#xd3;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd3;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd3;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd3;" u2="Z" k="20" />
-<hkern u1="&#xd3;" u2="Y" k="20" />
-<hkern u1="&#xd3;" u2="X" k="41" />
-<hkern u1="&#xd3;" u2="W" k="20" />
-<hkern u1="&#xd3;" u2="V" k="20" />
-<hkern u1="&#xd3;" u2="T" k="61" />
-<hkern u1="&#xd3;" u2="A" k="41" />
-<hkern u1="&#xd3;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd3;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd4;" u2="&#x178;" k="20" />
-<hkern u1="&#xd4;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd4;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd4;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd4;" u2="Z" k="20" />
-<hkern u1="&#xd4;" u2="Y" k="20" />
-<hkern u1="&#xd4;" u2="X" k="41" />
-<hkern u1="&#xd4;" u2="W" k="20" />
-<hkern u1="&#xd4;" u2="V" k="20" />
-<hkern u1="&#xd4;" u2="T" k="61" />
-<hkern u1="&#xd4;" u2="A" k="41" />
-<hkern u1="&#xd4;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd4;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd5;" u2="&#x178;" k="20" />
-<hkern u1="&#xd5;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd5;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd5;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd5;" u2="Z" k="20" />
-<hkern u1="&#xd5;" u2="Y" k="20" />
-<hkern u1="&#xd5;" u2="X" k="41" />
-<hkern u1="&#xd5;" u2="W" k="20" />
-<hkern u1="&#xd5;" u2="V" k="20" />
-<hkern u1="&#xd5;" u2="T" k="61" />
-<hkern u1="&#xd5;" u2="A" k="41" />
-<hkern u1="&#xd5;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd5;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd6;" u2="&#x178;" k="20" />
-<hkern u1="&#xd6;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd6;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd6;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd6;" u2="Z" k="20" />
-<hkern u1="&#xd6;" u2="Y" k="20" />
-<hkern u1="&#xd6;" u2="X" k="41" />
-<hkern u1="&#xd6;" u2="W" k="20" />
-<hkern u1="&#xd6;" u2="V" k="20" />
-<hkern u1="&#xd6;" u2="T" k="61" />
-<hkern u1="&#xd6;" u2="A" k="41" />
-<hkern u1="&#xd6;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd6;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x201a;" k="82" />
-<hkern u1="&#xd8;" u2="&#x178;" k="20" />
-<hkern u1="&#xd8;" u2="&#xdd;" k="20" />
-<hkern u1="&#xd8;" u2="&#xc5;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc4;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc3;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc2;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc1;" k="41" />
-<hkern u1="&#xd8;" u2="&#xc0;" k="41" />
-<hkern u1="&#xd8;" u2="Z" k="20" />
-<hkern u1="&#xd8;" u2="Y" k="20" />
-<hkern u1="&#xd8;" u2="X" k="41" />
-<hkern u1="&#xd8;" u2="W" k="20" />
-<hkern u1="&#xd8;" u2="V" k="20" />
-<hkern u1="&#xd8;" u2="T" k="61" />
-<hkern u1="&#xd8;" u2="A" k="41" />
-<hkern u1="&#xd8;" u2="&#x2e;" k="82" />
-<hkern u1="&#xd8;" u2="&#x2c;" k="82" />
-<hkern u1="&#xd9;" u2="&#x201e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x201a;" k="41" />
-<hkern u1="&#xd9;" u2="&#xc5;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc4;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc3;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc2;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc1;" k="20" />
-<hkern u1="&#xd9;" u2="&#xc0;" k="20" />
-<hkern u1="&#xd9;" u2="A" k="20" />
-<hkern u1="&#xd9;" u2="&#x2e;" k="41" />
-<hkern u1="&#xd9;" u2="&#x2c;" k="41" />
-<hkern u1="&#xda;" u2="&#x201e;" k="41" />
-<hkern u1="&#xda;" u2="&#x201a;" k="41" />
-<hkern u1="&#xda;" u2="&#xc5;" k="20" />
-<hkern u1="&#xda;" u2="&#xc4;" k="20" />
-<hkern u1="&#xda;" u2="&#xc3;" k="20" />
-<hkern u1="&#xda;" u2="&#xc2;" k="20" />
-<hkern u1="&#xda;" u2="&#xc1;" k="20" />
-<hkern u1="&#xda;" u2="&#xc0;" k="20" />
-<hkern u1="&#xda;" u2="A" k="20" />
-<hkern u1="&#xda;" u2="&#x2e;" k="41" />
-<hkern u1="&#xda;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdb;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdb;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdb;" u2="A" k="20" />
-<hkern u1="&#xdb;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdb;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x201a;" k="41" />
-<hkern u1="&#xdc;" u2="&#xc5;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc4;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc3;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc2;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc1;" k="20" />
-<hkern u1="&#xdc;" u2="&#xc0;" k="20" />
-<hkern u1="&#xdc;" u2="A" k="20" />
-<hkern u1="&#xdc;" u2="&#x2e;" k="41" />
-<hkern u1="&#xdc;" u2="&#x2c;" k="41" />
-<hkern u1="&#xdd;" u2="&#x201e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x201a;" k="123" />
-<hkern u1="&#xdd;" u2="&#x153;" k="102" />
-<hkern u1="&#xdd;" u2="&#x152;" k="41" />
-<hkern u1="&#xdd;" u2="&#xfc;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfb;" k="61" />
-<hkern u1="&#xdd;" u2="&#xfa;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf9;" k="61" />
-<hkern u1="&#xdd;" u2="&#xf8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xf2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xeb;" k="102" />
-<hkern u1="&#xdd;" u2="&#xea;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe9;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe8;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe7;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe6;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe5;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe4;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe3;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe2;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe1;" k="102" />
-<hkern u1="&#xdd;" u2="&#xe0;" k="102" />
-<hkern u1="&#xdd;" u2="&#xd8;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd6;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd5;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd4;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd3;" k="41" />
-<hkern u1="&#xdd;" u2="&#xd2;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc7;" k="41" />
-<hkern u1="&#xdd;" u2="&#xc5;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc4;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc3;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc2;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc1;" k="123" />
-<hkern u1="&#xdd;" u2="&#xc0;" k="123" />
-<hkern u1="&#xdd;" u2="z" k="41" />
-<hkern u1="&#xdd;" u2="u" k="61" />
-<hkern u1="&#xdd;" u2="s" k="82" />
-<hkern u1="&#xdd;" u2="r" k="61" />
-<hkern u1="&#xdd;" u2="q" k="102" />
-<hkern u1="&#xdd;" u2="p" k="61" />
-<hkern u1="&#xdd;" u2="o" k="102" />
-<hkern u1="&#xdd;" u2="n" k="61" />
-<hkern u1="&#xdd;" u2="m" k="61" />
-<hkern u1="&#xdd;" u2="g" k="41" />
-<hkern u1="&#xdd;" u2="e" k="102" />
-<hkern u1="&#xdd;" u2="d" k="102" />
-<hkern u1="&#xdd;" u2="c" k="102" />
-<hkern u1="&#xdd;" u2="a" k="102" />
-<hkern u1="&#xdd;" u2="Q" k="41" />
-<hkern u1="&#xdd;" u2="O" k="41" />
-<hkern u1="&#xdd;" u2="G" k="41" />
-<hkern u1="&#xdd;" u2="C" k="41" />
-<hkern u1="&#xdd;" u2="A" k="123" />
-<hkern u1="&#xdd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xdd;" u2="&#x2e;" k="123" />
-<hkern u1="&#xdd;" u2="&#x2c;" k="123" />
-<hkern u1="&#xde;" u2="&#x201e;" k="266" />
-<hkern u1="&#xde;" u2="&#x201a;" k="266" />
-<hkern u1="&#xde;" u2="&#xc5;" k="102" />
-<hkern u1="&#xde;" u2="&#xc4;" k="102" />
-<hkern u1="&#xde;" u2="&#xc3;" k="102" />
-<hkern u1="&#xde;" u2="&#xc2;" k="102" />
-<hkern u1="&#xde;" u2="&#xc1;" k="102" />
-<hkern u1="&#xde;" u2="&#xc0;" k="102" />
-<hkern u1="&#xde;" u2="Z" k="20" />
-<hkern u1="&#xde;" u2="X" k="41" />
-<hkern u1="&#xde;" u2="A" k="102" />
-<hkern u1="&#xde;" u2="&#x2e;" k="266" />
-<hkern u1="&#xde;" u2="&#x2c;" k="266" />
-<hkern u1="&#xe0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe0;" u2="&#x27;" k="20" />
-<hkern u1="&#xe0;" u2="&#x22;" k="20" />
-<hkern u1="&#xe1;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe1;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe1;" u2="&#x27;" k="20" />
-<hkern u1="&#xe1;" u2="&#x22;" k="20" />
-<hkern u1="&#xe2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe2;" u2="&#x27;" k="20" />
-<hkern u1="&#xe2;" u2="&#x22;" k="20" />
-<hkern u1="&#xe3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe3;" u2="&#x27;" k="20" />
-<hkern u1="&#xe3;" u2="&#x22;" k="20" />
-<hkern u1="&#xe4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe4;" u2="&#x27;" k="20" />
-<hkern u1="&#xe4;" u2="&#x22;" k="20" />
-<hkern u1="&#xe5;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe5;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe5;" u2="&#x27;" k="20" />
-<hkern u1="&#xe5;" u2="&#x22;" k="20" />
-<hkern u1="&#xe8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe8;" u2="z" k="20" />
-<hkern u1="&#xe8;" u2="y" k="41" />
-<hkern u1="&#xe8;" u2="x" k="41" />
-<hkern u1="&#xe8;" u2="w" k="41" />
-<hkern u1="&#xe8;" u2="v" k="41" />
-<hkern u1="&#xe8;" u2="&#x27;" k="20" />
-<hkern u1="&#xe8;" u2="&#x22;" k="20" />
-<hkern u1="&#xe9;" u2="&#x201d;" k="20" />
-<hkern u1="&#xe9;" u2="&#x2019;" k="20" />
-<hkern u1="&#xe9;" u2="&#xfd;" k="41" />
-<hkern u1="&#xe9;" u2="z" k="20" />
-<hkern u1="&#xe9;" u2="y" k="41" />
-<hkern u1="&#xe9;" u2="x" k="41" />
-<hkern u1="&#xe9;" u2="w" k="41" />
-<hkern u1="&#xe9;" u2="v" k="41" />
-<hkern u1="&#xe9;" u2="&#x27;" k="20" />
-<hkern u1="&#xe9;" u2="&#x22;" k="20" />
-<hkern u1="&#xea;" u2="&#x201d;" k="20" />
-<hkern u1="&#xea;" u2="&#x2019;" k="20" />
-<hkern u1="&#xea;" u2="&#xfd;" k="41" />
-<hkern u1="&#xea;" u2="z" k="20" />
-<hkern u1="&#xea;" u2="y" k="41" />
-<hkern u1="&#xea;" u2="x" k="41" />
-<hkern u1="&#xea;" u2="w" k="41" />
-<hkern u1="&#xea;" u2="v" k="41" />
-<hkern u1="&#xea;" u2="&#x27;" k="20" />
-<hkern u1="&#xea;" u2="&#x22;" k="20" />
-<hkern u1="&#xeb;" u2="&#x201d;" k="20" />
-<hkern u1="&#xeb;" u2="&#x2019;" k="20" />
-<hkern u1="&#xeb;" u2="&#xfd;" k="41" />
-<hkern u1="&#xeb;" u2="z" k="20" />
-<hkern u1="&#xeb;" u2="y" k="41" />
-<hkern u1="&#xeb;" u2="x" k="41" />
-<hkern u1="&#xeb;" u2="w" k="41" />
-<hkern u1="&#xeb;" u2="v" k="41" />
-<hkern u1="&#xeb;" u2="&#x27;" k="20" />
-<hkern u1="&#xeb;" u2="&#x22;" k="20" />
-<hkern u1="&#xf0;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf0;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf0;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf0;" u2="z" k="20" />
-<hkern u1="&#xf0;" u2="y" k="41" />
-<hkern u1="&#xf0;" u2="x" k="41" />
-<hkern u1="&#xf0;" u2="w" k="41" />
-<hkern u1="&#xf0;" u2="v" k="41" />
-<hkern u1="&#xf0;" u2="&#x27;" k="20" />
-<hkern u1="&#xf0;" u2="&#x22;" k="20" />
-<hkern u1="&#xf2;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf2;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf2;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf2;" u2="z" k="20" />
-<hkern u1="&#xf2;" u2="y" k="41" />
-<hkern u1="&#xf2;" u2="x" k="41" />
-<hkern u1="&#xf2;" u2="w" k="41" />
-<hkern u1="&#xf2;" u2="v" k="41" />
-<hkern u1="&#xf2;" u2="&#x27;" k="20" />
-<hkern u1="&#xf2;" u2="&#x22;" k="20" />
-<hkern u1="&#xf3;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf3;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf3;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf3;" u2="z" k="20" />
-<hkern u1="&#xf3;" u2="y" k="41" />
-<hkern u1="&#xf3;" u2="x" k="41" />
-<hkern u1="&#xf3;" u2="w" k="41" />
-<hkern u1="&#xf3;" u2="v" k="41" />
-<hkern u1="&#xf3;" u2="&#x27;" k="20" />
-<hkern u1="&#xf3;" u2="&#x22;" k="20" />
-<hkern u1="&#xf4;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf4;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf4;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf4;" u2="z" k="20" />
-<hkern u1="&#xf4;" u2="y" k="41" />
-<hkern u1="&#xf4;" u2="x" k="41" />
-<hkern u1="&#xf4;" u2="w" k="41" />
-<hkern u1="&#xf4;" u2="v" k="41" />
-<hkern u1="&#xf4;" u2="&#x27;" k="20" />
-<hkern u1="&#xf4;" u2="&#x22;" k="20" />
-<hkern u1="&#xf6;" u2="&#x201d;" k="41" />
-<hkern u1="&#xf6;" u2="&#x2019;" k="41" />
-<hkern u1="&#xf6;" u2="&#x27;" k="41" />
-<hkern u1="&#xf6;" u2="&#x22;" k="41" />
-<hkern u1="&#xf8;" u2="&#x201d;" k="20" />
-<hkern u1="&#xf8;" u2="&#x2019;" k="20" />
-<hkern u1="&#xf8;" u2="&#xfd;" k="41" />
-<hkern u1="&#xf8;" u2="z" k="20" />
-<hkern u1="&#xf8;" u2="y" k="41" />
-<hkern u1="&#xf8;" u2="x" k="41" />
-<hkern u1="&#xf8;" u2="w" k="41" />
-<hkern u1="&#xf8;" u2="v" k="41" />
-<hkern u1="&#xf8;" u2="&#x27;" k="20" />
-<hkern u1="&#xf8;" u2="&#x22;" k="20" />
-<hkern u1="&#xfd;" u2="&#x201e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x201a;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xfd;" u2="&#x2e;" k="82" />
-<hkern u1="&#xfd;" u2="&#x2c;" k="82" />
-<hkern u1="&#xfd;" u2="&#x27;" k="-82" />
-<hkern u1="&#xfd;" u2="&#x22;" k="-82" />
-<hkern u1="&#xfe;" u2="&#x201d;" k="20" />
-<hkern u1="&#xfe;" u2="&#x2019;" k="20" />
-<hkern u1="&#xfe;" u2="&#xfd;" k="41" />
-<hkern u1="&#xfe;" u2="z" k="20" />
-<hkern u1="&#xfe;" u2="y" k="41" />
-<hkern u1="&#xfe;" u2="x" k="41" />
-<hkern u1="&#xfe;" u2="w" k="41" />
-<hkern u1="&#xfe;" u2="v" k="41" />
-<hkern u1="&#xfe;" u2="&#x27;" k="20" />
-<hkern u1="&#xfe;" u2="&#x22;" k="20" />
-<hkern u1="&#xff;" u2="&#x201e;" k="82" />
-<hkern u1="&#xff;" u2="&#x201d;" k="-82" />
-<hkern u1="&#xff;" u2="&#x201a;" k="82" />
-<hkern u1="&#xff;" u2="&#x2019;" k="-82" />
-<hkern u1="&#xff;" u2="&#x3f;" k="-41" />
-<hkern u1="&#xff;" u2="&#x2e;" k="82" />
-<hkern u1="&#xff;" u2="&#x2c;" k="82" />
-<hkern u1="&#xff;" u2="&#x27;" k="-82" />
-<hkern u1="&#xff;" u2="&#x22;" k="-82" />
-<hkern u1="&#x152;" u2="J" k="-123" />
-<hkern u1="&#x178;" u2="&#x201e;" k="123" />
-<hkern u1="&#x178;" u2="&#x201a;" k="123" />
-<hkern u1="&#x178;" u2="&#x153;" k="102" />
-<hkern u1="&#x178;" u2="&#x152;" k="41" />
-<hkern u1="&#x178;" u2="&#xfc;" k="61" />
-<hkern u1="&#x178;" u2="&#xfb;" k="61" />
-<hkern u1="&#x178;" u2="&#xfa;" k="61" />
-<hkern u1="&#x178;" u2="&#xf9;" k="61" />
-<hkern u1="&#x178;" u2="&#xf8;" k="102" />
-<hkern u1="&#x178;" u2="&#xf6;" k="102" />
-<hkern u1="&#x178;" u2="&#xf5;" k="102" />
-<hkern u1="&#x178;" u2="&#xf4;" k="102" />
-<hkern u1="&#x178;" u2="&#xf3;" k="102" />
-<hkern u1="&#x178;" u2="&#xf2;" k="102" />
-<hkern u1="&#x178;" u2="&#xeb;" k="102" />
-<hkern u1="&#x178;" u2="&#xea;" k="102" />
-<hkern u1="&#x178;" u2="&#xe9;" k="102" />
-<hkern u1="&#x178;" u2="&#xe8;" k="102" />
-<hkern u1="&#x178;" u2="&#xe7;" k="102" />
-<hkern u1="&#x178;" u2="&#xe6;" k="102" />
-<hkern u1="&#x178;" u2="&#xe5;" k="102" />
-<hkern u1="&#x178;" u2="&#xe4;" k="102" />
-<hkern u1="&#x178;" u2="&#xe3;" k="102" />
-<hkern u1="&#x178;" u2="&#xe2;" k="102" />
-<hkern u1="&#x178;" u2="&#xe1;" k="102" />
-<hkern u1="&#x178;" u2="&#xe0;" k="102" />
-<hkern u1="&#x178;" u2="&#xd8;" k="41" />
-<hkern u1="&#x178;" u2="&#xd6;" k="41" />
-<hkern u1="&#x178;" u2="&#xd5;" k="41" />
-<hkern u1="&#x178;" u2="&#xd4;" k="41" />
-<hkern u1="&#x178;" u2="&#xd3;" k="41" />
-<hkern u1="&#x178;" u2="&#xd2;" k="41" />
-<hkern u1="&#x178;" u2="&#xc7;" k="41" />
-<hkern u1="&#x178;" u2="&#xc5;" k="123" />
-<hkern u1="&#x178;" u2="&#xc4;" k="123" />
-<hkern u1="&#x178;" u2="&#xc3;" k="123" />
-<hkern u1="&#x178;" u2="&#xc2;" k="123" />
-<hkern u1="&#x178;" u2="&#xc1;" k="123" />
-<hkern u1="&#x178;" u2="&#xc0;" k="123" />
-<hkern u1="&#x178;" u2="z" k="41" />
-<hkern u1="&#x178;" u2="u" k="61" />
-<hkern u1="&#x178;" u2="s" k="82" />
-<hkern u1="&#x178;" u2="r" k="61" />
-<hkern u1="&#x178;" u2="q" k="102" />
-<hkern u1="&#x178;" u2="p" k="61" />
-<hkern u1="&#x178;" u2="o" k="102" />
-<hkern u1="&#x178;" u2="n" k="61" />
-<hkern u1="&#x178;" u2="m" k="61" />
-<hkern u1="&#x178;" u2="g" k="41" />
-<hkern u1="&#x178;" u2="e" k="102" />
-<hkern u1="&#x178;" u2="d" k="102" />
-<hkern u1="&#x178;" u2="c" k="102" />
-<hkern u1="&#x178;" u2="a" k="102" />
-<hkern u1="&#x178;" u2="Q" k="41" />
-<hkern u1="&#x178;" u2="O" k="41" />
-<hkern u1="&#x178;" u2="G" k="41" />
-<hkern u1="&#x178;" u2="C" k="41" />
-<hkern u1="&#x178;" u2="A" k="123" />
-<hkern u1="&#x178;" u2="&#x3f;" k="-41" />
-<hkern u1="&#x178;" u2="&#x2e;" k="123" />
-<hkern u1="&#x178;" u2="&#x2c;" k="123" />
-<hkern u1="&#x2013;" u2="T" k="82" />
-<hkern u1="&#x2014;" u2="T" k="82" />
-<hkern u1="&#x2018;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2018;" u2="&#x153;" k="123" />
-<hkern u1="&#x2018;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2018;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2018;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2018;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2018;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2018;" u2="&#xea;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2018;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2018;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2018;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2018;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2018;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2018;" u2="u" k="61" />
-<hkern u1="&#x2018;" u2="s" k="61" />
-<hkern u1="&#x2018;" u2="r" k="61" />
-<hkern u1="&#x2018;" u2="q" k="123" />
-<hkern u1="&#x2018;" u2="p" k="61" />
-<hkern u1="&#x2018;" u2="o" k="123" />
-<hkern u1="&#x2018;" u2="n" k="61" />
-<hkern u1="&#x2018;" u2="m" k="61" />
-<hkern u1="&#x2018;" u2="g" k="61" />
-<hkern u1="&#x2018;" u2="e" k="123" />
-<hkern u1="&#x2018;" u2="d" k="123" />
-<hkern u1="&#x2018;" u2="c" k="123" />
-<hkern u1="&#x2018;" u2="a" k="82" />
-<hkern u1="&#x2018;" u2="Y" k="-20" />
-<hkern u1="&#x2018;" u2="W" k="-41" />
-<hkern u1="&#x2018;" u2="V" k="-41" />
-<hkern u1="&#x2018;" u2="T" k="-41" />
-<hkern u1="&#x2018;" u2="A" k="143" />
-<hkern u1="&#x2019;" u2="&#x178;" k="-20" />
-<hkern u1="&#x2019;" u2="&#x153;" k="123" />
-<hkern u1="&#x2019;" u2="&#xfc;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfb;" k="61" />
-<hkern u1="&#x2019;" u2="&#xfa;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf9;" k="61" />
-<hkern u1="&#x2019;" u2="&#xf8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf6;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf5;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf4;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf3;" k="123" />
-<hkern u1="&#x2019;" u2="&#xf2;" k="123" />
-<hkern u1="&#x2019;" u2="&#xeb;" k="123" />
-<hkern u1="&#x2019;" u2="&#xea;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe9;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe8;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe7;" k="123" />
-<hkern u1="&#x2019;" u2="&#xe6;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe5;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe4;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe3;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe2;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe1;" k="82" />
-<hkern u1="&#x2019;" u2="&#xe0;" k="123" />
-<hkern u1="&#x2019;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x2019;" u2="&#xc5;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc4;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc3;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc2;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc1;" k="143" />
-<hkern u1="&#x2019;" u2="&#xc0;" k="143" />
-<hkern u1="&#x2019;" u2="u" k="61" />
-<hkern u1="&#x2019;" u2="s" k="61" />
-<hkern u1="&#x2019;" u2="r" k="61" />
-<hkern u1="&#x2019;" u2="q" k="123" />
-<hkern u1="&#x2019;" u2="p" k="61" />
-<hkern u1="&#x2019;" u2="o" k="123" />
-<hkern u1="&#x2019;" u2="n" k="61" />
-<hkern u1="&#x2019;" u2="m" k="61" />
-<hkern u1="&#x2019;" u2="g" k="61" />
-<hkern u1="&#x2019;" u2="e" k="123" />
-<hkern u1="&#x2019;" u2="d" k="123" />
-<hkern u1="&#x2019;" u2="c" k="123" />
-<hkern u1="&#x2019;" u2="a" k="82" />
-<hkern u1="&#x2019;" u2="Y" k="-20" />
-<hkern u1="&#x2019;" u2="W" k="-41" />
-<hkern u1="&#x2019;" u2="V" k="-41" />
-<hkern u1="&#x2019;" u2="T" k="-41" />
-<hkern u1="&#x2019;" u2="A" k="143" />
-<hkern u1="&#x201a;" u2="&#x178;" k="123" />
-<hkern u1="&#x201a;" u2="&#x152;" k="102" />
-<hkern u1="&#x201a;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201a;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201a;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201a;" u2="&#xda;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201a;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201a;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201a;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201a;" u2="Y" k="123" />
-<hkern u1="&#x201a;" u2="W" k="123" />
-<hkern u1="&#x201a;" u2="V" k="123" />
-<hkern u1="&#x201a;" u2="U" k="41" />
-<hkern u1="&#x201a;" u2="T" k="143" />
-<hkern u1="&#x201a;" u2="Q" k="102" />
-<hkern u1="&#x201a;" u2="O" k="102" />
-<hkern u1="&#x201a;" u2="G" k="102" />
-<hkern u1="&#x201a;" u2="C" k="102" />
-<hkern u1="&#x201c;" u2="&#x178;" k="-20" />
-<hkern u1="&#x201c;" u2="&#x153;" k="123" />
-<hkern u1="&#x201c;" u2="&#xfc;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfb;" k="61" />
-<hkern u1="&#x201c;" u2="&#xfa;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf9;" k="61" />
-<hkern u1="&#x201c;" u2="&#xf8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf6;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf5;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf4;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf3;" k="123" />
-<hkern u1="&#x201c;" u2="&#xf2;" k="123" />
-<hkern u1="&#x201c;" u2="&#xeb;" k="123" />
-<hkern u1="&#x201c;" u2="&#xea;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe9;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe8;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe7;" k="123" />
-<hkern u1="&#x201c;" u2="&#xe6;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe5;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe4;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe3;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe2;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe1;" k="82" />
-<hkern u1="&#x201c;" u2="&#xe0;" k="123" />
-<hkern u1="&#x201c;" u2="&#xdd;" k="-20" />
-<hkern u1="&#x201c;" u2="&#xc5;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc4;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc3;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc2;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc1;" k="143" />
-<hkern u1="&#x201c;" u2="&#xc0;" k="143" />
-<hkern u1="&#x201c;" u2="u" k="61" />
-<hkern u1="&#x201c;" u2="s" k="61" />
-<hkern u1="&#x201c;" u2="r" k="61" />
-<hkern u1="&#x201c;" u2="q" k="123" />
-<hkern u1="&#x201c;" u2="p" k="61" />
-<hkern u1="&#x201c;" u2="o" k="123" />
-<hkern u1="&#x201c;" u2="n" k="61" />
-<hkern u1="&#x201c;" u2="m" k="61" />
-<hkern u1="&#x201c;" u2="g" k="61" />
-<hkern u1="&#x201c;" u2="e" k="123" />
-<hkern u1="&#x201c;" u2="d" k="123" />
-<hkern u1="&#x201c;" u2="c" k="123" />
-<hkern u1="&#x201c;" u2="a" k="82" />
-<hkern u1="&#x201c;" u2="Y" k="-20" />
-<hkern u1="&#x201c;" u2="W" k="-41" />
-<hkern u1="&#x201c;" u2="V" k="-41" />
-<hkern u1="&#x201c;" u2="T" k="-41" />
-<hkern u1="&#x201c;" u2="A" k="143" />
-<hkern u1="&#x201e;" u2="&#x178;" k="123" />
-<hkern u1="&#x201e;" u2="&#x152;" k="102" />
-<hkern u1="&#x201e;" u2="&#xdd;" k="123" />
-<hkern u1="&#x201e;" u2="&#xdc;" k="41" />
-<hkern u1="&#x201e;" u2="&#xdb;" k="41" />
-<hkern u1="&#x201e;" u2="&#xda;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd9;" k="41" />
-<hkern u1="&#x201e;" u2="&#xd8;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd6;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd5;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd4;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd3;" k="102" />
-<hkern u1="&#x201e;" u2="&#xd2;" k="102" />
-<hkern u1="&#x201e;" u2="&#xc7;" k="102" />
-<hkern u1="&#x201e;" u2="Y" k="123" />
-<hkern u1="&#x201e;" u2="W" k="123" />
-<hkern u1="&#x201e;" u2="V" k="123" />
-<hkern u1="&#x201e;" u2="U" k="41" />
-<hkern u1="&#x201e;" u2="T" k="143" />
-<hkern u1="&#x201e;" u2="Q" k="102" />
-<hkern u1="&#x201e;" u2="O" k="102" />
-<hkern u1="&#x201e;" u2="G" k="102" />
-<hkern u1="&#x201e;" u2="C" k="102" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/doc/fonts/OpenSans-Regular-webfont.woff b/doc/fonts/OpenSans-Regular-webfont.woff
deleted file mode 100644
index e231183dce4c7b452afc9e7799586fd285e146f4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22660
zcmZsBb8u!&^yZs4wmESowrx9^*tTukn%K5&Yhv4(*qAukeD&L{+O67q>#5V{x##IV
z{l`6h>vp@zi-`e10N<B-FaY&Go2>pn{(tTN_YxCRmIVMn%D!3L|6nA35hpGpD)!9{
zef#*|AOyh!fQc)}D}8f^003Aa005ms>xd~NuB0La06>I)#{_(%EYB!BUtWox2>^hE
z`}Xz!L*CzXKO-9h`)|(rTVDVG0AWyXSQL$1oe97DLHdqi_y!N<2n4sOy_wB7C-6PS
z>$gpag7p+MGjRIWBJh02K>cqZnOS?7esdxKfFK_LU}yi!vWwQ-#K0H;kPrTjVg3di
z2-xpH^KbH-Yy0*IzVQ<w8XVi)#@YRwTm8;M6aWD2`-sxmu(mV$j{8OUo!>VPvfrVS
zYieWQ{ynbJ^SADs2M~h(07BXt*q8tS%2?kqOW!$Cm?1=S+1oie0{|*F-`vZ0f57Xy
z;#_-2lW(os#kVg0KirEDU$~hVe&?+2{p~~i2eTH%+HVW;4ZtLC!OVYloRu-^KRdOA
z#p1qhq;IURzYA&z4S}R@s1G*qBrpj)V*H+W90)N0;J#j+A}jM-9BcHeljaJ;CZWY*
zA<o>0BA=y&k`bikBmz(zvjl#zZfM0XgNTDFX*3`2E}*s`jJlw1If96@D605R9|_vG
zS&$Cj6Au`o6o)ET0%_FoG1XV#N^O&LG){ldbj>_7>UV^viY#ezHft8i%G$e<kIDbl
z;T2cWbFtm5)$GOhVOh&Y85(!z;j!a)kGs}g=~avJNr|My5)CbiveoZYdUYaqXkJ9`
zh<PQtFh?UJdR(xUxHRWH4uTc&fznCPNidZ%UHeSy$nvS(#g!9C@4k-sd42XQf2&NK
zE-~^%o;cL`)EAx-0xr#OJp`}HrRPXEM5+E*n6e5jDeqk2oFjD|TJZ+7D`)DJckz^k
zj}I2(tt|1Dn|g`X%tK$lLtO`I5e@HLM&m_iM{f|qcMowwg%N^=?Lj@D+5vW$hj?I*
z31Nfm@#$`Cq38xku|kpCfQ9zxBl@^C3CCQU{+aff?UMWAO}a*&x+)%pIAtO53gVxy
zT`HiylIFp7Y5Wj7!UXSt(f&SYZ}|aA4)~8}c?SM*EF#TV+~OgcAgb+^zE=tC7n&FA
zu@!$c6bwg=|LaCK+(7cmaA~}W{-dD*l1#J?HitWxwS9CgHWD*CaWBXLhRp#dE+it(
zQi{Di(_c}H1N%s;7FRobzB<_9Xj$R!k_D+Ze!w)n%M3}MFNIm*jBZjD<Y{TCFB6JS
zmQuYB)<eFBmKEyzj;Wj>P)w(MHlIZGb>OBVK<agntf4ThP?#?!921HI&x$j(%MLk}
zU%4c>BV_g#d2Z4ZfjiY@6`*P!L@TlmLz%OI&5gy4-HJ>-)t22%Fd#k)&OLVDMsL{u
z3F+<^`fj#|YixitJqW%H-!Iw*Hpl=}(?_crz=|GZwd_D(-zD4B+}zvfYFuOk582X+
zV8T$LiFC)qQ{k>~RlY1+S8V22!LV~hvI}a}SY!wbMS#b{;bL(<F`Jty$Q9*}@<sT-
zedT;;JUO2ICWQIJeEF<mt2i5u#xh9$Ycx5U|DFAlpDaurrixIFtEth{U~V$^ryyCB
zI!YCzn&$sc{2z%NLiYP9o3nM(E&Yyg$;l$i-Vz+`ER4-0ZyWv8zK;dQ^@MgCy<6}#
zmGBC7$MmdAXbrP-_DdM5;mP`JbH0`EN@xwd&W{c@XPf^Ifwol)TRKRS9jPMv*0HJU
zK4rKGjMeJ9E#~S`&Pg?m>_x<!HttVqHrIk!V1V^42}{Q}^-MdRTZqe|@=N3j#Q(Bs
z{g|#Ha*bRq@8zvT6#wL(PMzV9t<i8dq;%RV(ZlqV3(?x}dd}RSwwRkbH<}y0n=qoK
zmL9ClO5R-fTcHp^rO_#5cOvUrsrusq?P-N<o5f+HJ5RN{F!hnHMJ%(vdA-23yFjk$
z7lD4QWoKLCBcp1eu21F4Bc5uh5m${T_Q%*M!7L$i7)uqK&Ip^8NTFx$SDVoycWm={
zito`1W@&g?lDej9FNzPs+o61HsCLVDjryM&W*BZbrmyeda1U(|FI7YH$3Q`nUTVs8
zc0!V7+^9}pAEd(I`HMh8-w2w4;pO#>f&mKb<qarVM=_>6k~R4t0)c=88?Djji4{N`
z4d<z!0dC%i6oeK89OQ;Dg^-8v3vJb358HzWMU8*Lk$45DFfq9U0R?6_*#8w%P%u7_
zcmOy63_Jt;du0G2_#X>82QUS>g#rR$As|4(!GJ)pT>$V}06?hqt)ci&$S9~J3=jao
zzkxxRety?(C_|tUApj)zzh__);4R;V5CHn$9QE~0{q?aS#0bax#(;;6fiE<0^!`oQ
zLBM!Y2;*C(MaFkC7GpTmDt)dI=cv<IU}|7^;P1e!z{J3ez@EV5z$l?Ep@;z-QBu-;
zNVr~&&o9VysKwI0IzSmcR85?qpn#x|AVkFsiYx(%0>Qyo?H9op|AXKD*T7fL7uILb
z$J<f=IHWi}uDAVe|2AYNzO`rFU4I~?4Pqp|`VPPAb;khpvKrD;5-8Rh)@}xNx<43d
z2T&iWzOJF($==c7{^sr$777MBDm*emT0%;4V(ia2H3b!AWm!eJmAR$G`N`So4=fz)
z%(RSjEp<(ejn(xvZVoQa&bE$rFLzImx98UvNH7TSu;9=TaS<`m(V>xH@}Epi&2Fyp
zIgEC<1*8)xbb9TcOBv1QD>kcb9_J}G+%4B@-EIWJic*$GACV#8YxI8_u((Va(U=*E
zQiF6-l?Lk!)r=hR!?U&C2+PY|UiU~=>^9rI?w934gT!-r{2rbke}w+oc*4^3%<$@b
zC6~F#<ccx)lhxjch{vrs)@R=ZQ-%y+;7i5)Z>==a7XY=w@)SsO`2h-gE{}l-5$Z>b
zE9tk=kn`~cF&6jo1u<Y|Z-5R4&?7=7c3;m{v2a@uLrd=Z8Jjdq3JdOn&FqjjHx^8b
z#b7}->`J7A3snuKQ$*wZmz&^CqxXoi>G*+!zxpXQH8>?_fsI`JdOEYRRl6HI%1ESG
z9@HU*OZm=`FnMY8*C}7bkB+^+^@;t2wqvUMloqJXNh0Ic?A*VlwWnQ^t5B<wZXJ;-
zOQ~j<NgoBX1`6BM$kz$iCAwK8QRH#?C7U>co+%`Ol-MC0$)=$w6?23s6$mC$VY-D0
z;h7M>*l-@p1`9d}sIG8lI*OYi^otymNwn*AZH_t}xNaICC96;`Y<Q#V_v&92D+H*-
zN=Uv|DLEB!Abt)13e$`z9F+0h5@#x}0%tNoqo#5}9J;(J-Dn9v&0n~6QLJQ9TAFeZ
zo3oCK6~`0t7-N$o|64NM5=Orwqgd@aJk<i4&S+0b$~@<T0^*z|kzEO?zElrWWV=X!
zZk8Jd`ZIBjLd65-QqhjE(bSBdu4L=dSoA3F;a=cqa@w}*-u~nP=Z0SWtBW$L{X|iF
za!OQ!Kx#{VD57W)E()9P%sspl4*AcNpmv)AL@x1UKK1-`6)TJG4<oy_88s={bIDmT
zg5f8n6E|XwJq}o$YVmz*{LUJyzkETO6<gh_37mKpXbyh4xo+7S<Z$;*X|=C+lTUPc
zFYE$52atCql-ld9GKvL08)zo$;7ZEonE6zfiIgSgsj`f+Udw2#>uxfP!d}x7Q(vj=
zGbB%(T?a($mz`s>Z}^T2J#m{&1cdC>LbmG=jtja1wwf`UP1Is87f>wl^V6kNfq53j
zkArR1Rjfb_*7=9xi1E&FqVq~rJeTEVDnGQZr3iZ5vEqoFs|IatR5y#QmYcm(SG_Gw
z=Cjc15%$>MVYdwP2eZM`cXkM0E$l9x>Q1Q&$%2Sw`o91W6jqQZY0GPJgw-n-`x6BI
z4%qvg6S7Ocd~z6BeCTK1I^vR0uf2G-I3{RUbTma$T!J>!c;B@mWn4ZAyNZ*~4#Qpk
z8f!I&G8PR)6`WH`dc?N49$=EHsBTBiTfTUs+!?Rf3!6_Y^TN3XQ_6aThpi}6N+CA?
zF1$brYeh4`xBn9as~I}fhTwu|X*G13?}_yTmMAp8sT-+If>H;4r|FN|Eq<ld`ic8~
z<c%{4XGFNXL-GfOdqriTuQQ~LZli6vfmHI@Dc^z8#d(X5vMNsb!NoA`Qa|fdhnU>(
z1L{kL`qmEw%_jjwbOPB~36&|v4#q!NF($Gvnf`Pmf9$ZTHLZKY-pZ4jB30awlYE@^
z@v~f8^-OwGoF>LPzSi?vW3+Fbejc@o2KXHdT%=S5dYUmI8G&%Z;tZ}193l+5z|o)I
z_{qq9^}@qO9co;fXH6*))FebxwNIps>ex0+gyJ`IR=Ccuikn+oxEsde;m3xgVByAB
z``!3Od-dsP#{)Q69I?p?*mTNDJ=;1)Ev<h{CyV&&I9+hy`Q!Ub&$5r!JbDB5d7sAG
zVeNBq1MwW8_(;QcnH_CGyyX!3F%Oa8#)wu)j}iJn9ii|Oh3mu-`biwwKze?L?NU2J
z89G9tINE~pkcI6+bAst53E#vdRHCN${uN^L?`b?CQ?M+Bh+@M?Pq0G$$A_8XqmR56
zhLPZDeE1st`WsgIW1IMwUtRbjLCj{Fg5UnYFTa-XMLing$MoA`*Pnlr`<=Gu`g5-g
zs?ERGG!OvD*B1cMeZANRT0cqj-}9umS|XXnbO|KyJPUj=n)yPIBWu&&cws56cwp3K
zN&#`}7%|XsoHXpOsz{Z(x(H1eO@TY%7*#{rSiyw+t-4yO%F3g^>8l^}PAUs+-lwl$
zUX$!mrrTtu+msiohytaMaTg01w1gmD&S;rYD`@2EksjyF#Ju<x0u-39$PDa-Nkq4|
zKmzKIPQ1Pgm)<3t$Byc&Ux`8sH)NW$@a-+7%HBWvf14{Upm%9=f!${){vrg?9SlMq
z89@;VR|o*>r~F+~tVvtIi|Pf|8-G3%;lO1qZ^?DVJMQ-{>8%qD9L7od)^pCO+Cbxa
zUm%y5@7gdw_Tu=SY7A9^C{30Ix&Yu*_)AelLRmyKMc-dPnKoVh2Fmt%K-7lZBz`jb
z4DM9nM$6DZ&zg^)=Z0i5)jv`3S|DOhz<CZMDUUFlX_E%^Co~vpaAiTAt{n|BBM}*p
zM_NwG8g%C8(CBanz^;?^og71;BO5S3-FvtBK0$v&Padil@)YF&^yzf;Amvr-sfyMe
z94~&b%F^g5z%^5&D<A3@nQ<63^psN<`7UCA-3i__{i%-+Ah`T}rb@jWNb5kuwHKST
zS^lv74xCrS$UqBs(N`R^K9-fXMkO#~!wN4mLxURrcxt8n0Rc+{BZ4H!8Xt??PqO+m
z$bfUQjD;v3#a9g}fq{WX3~5#$qDpOv$f|1LEFL#~m55qSUe~gNo*w$G8qZ$W)>klR
z2m9dHywCE_g2RDU?~8B;jVX1O&%ZZ;Z=agK9O}<5OJ{f*cgJ!zM_a6SmTP;?@}v6W
z!sM~pk#p7mb)6HW@{VtG;oT<Wc%{;=+i))uK58zqMsDXg9dAPWRIV?yO9nFO8$;+C
zzkue^=AV_=9nze_&6AKjf<CU9+kJh|<u%Ykg$1Ko{6xh@PCzE~5DF2L2kTc16j7|1
zHPCSVQw;s_G}{0CuX^;yv*ms1Ec^@@*T<24_H+?n&@+jO3W!x00$u~R@y5b)?&4zE
zs!S)zNUl+{`!ACSSU!6sHW1U=qvO9Nt)4n@yw7jG=$)=A4}*3#+jWlTM(4}6gDxLb
z)DwTGsNeROGuf-Q-&Z@9<Q3MRKRt<*em*|7p`>2dd|gylrq+5pG~dqWnB~4K<do)a
zJN>P!^y|GFUJ?4!?CVV~Yx63`Mc*A$;2-B<?%9`!Pu`d4_UBGClawajFj=}hdJ|@~
zS0Ilt932HiR4F2waoHE69jY0N1uJAk0$n08>lbC+fbrzi=_*lUHuu^I3+Dz^owT5w
zr+%`zmmCNiYAMMGEXq<q*<z5Tf<2=4E;-Ei`<-?gG5WS$uRow8Tv=lMaRt5Z_h;;%
z)@c+qPN=iI*GGG{c&g3l5AM`9*HpUE^xR&K^RRW;FO-$14ECz8_s9SvF}<B0@N2s2
zj8&(jJ1bau*)At*S%b?fGyF{N8$@ThIJ1#CdG^^j#KmauxJ$-KX9T+atVno{b~2K*
z${#(T;FWn5*foaAmj!%ka&gG)JZ3^I0xS}c8zN)j(nc3U85XUpFz-yW7ET`Xk}u0H
z+ypwE2E(zBS`uu_2X6ne^EmmvrSJ7BM#<N-w+!fv+-u_5M9;KWh0x@CXz5d*-x=8q
zH#=-cBjK$Gw#LZ{duQo7<Mx<$KK*w%Z*iwW+d~sy3N&2(O{WpmWkx81bRlt2Tlm=W
z3qIc#CPMLm#>h(0@E2i>Dq+ZPOELuk3boP=)QYQSPZ<7=+L;k*qYI+^*IT_tUr){!
z#JU-j+$WQiVTq@6ify6Gu>;*nh_e0E09)1$V$<;2fGiKew4WkH0mNc??dgHwr-VU!
zr1MdgicuGnLwVxW_|zxzmAO>|8z;}`&cxddLiW5uVf(M*H@e9)q7P=?h#is66tue#
z!HjfdaCSWL)u;ztV%_>h2&cGps=BF@YbyTYqN8zBnW?i2&P%L0pDfil$I-?{)VHF)
zL`nwM$sqQTwb}ymRm9uW?h7{VH>aiES$o<nP)CC{cpi9XORE*ZdCrIQkM(0<gdE`t
zI?KHbQgenwJ`*z%b-SfJ|Iz(AweMSQM@wX;GbFv~p!_wRhC!Gbn0lV3e|rfl<!QLU
zZiundOJ{2Z9w6+>pcO^6Yd}u*{fWA!3404*!^q?x4So4i{fta|ye8;<xjjQv^Rs*}
za#h<hid(v@ASGBBen93SkRL?cw|Efjh|S3(Fe12u@#}tI8hybcw1=2w$b0seE)54B
z@L7uSE(4o7d6zeV%&Ok2^3xZKoK8DGLNTk+Y+%hexG%CpnGJGo^~1XJCJq!j{bx+r
zK;ZQ^1fTk}r(T1v3DcI6ms30tusIN)2rJeVys7*I1v$0~TI-?cSN-&kmk?v!E#K=}
zYkKZyYzSu6##*gz3P3aQtJB)MHuB0lX9&~<dwo)S%0ZtC{llOEJ7FE*FiKnc;0F9i
z{cy9gb!Uc*RR9nj4j>winh8S5weaR+NxM=vwv2JQhRlFm*vYbtQRLG8zrzrfj{Wlh
z5c$2cf8tLo3%v_p(;STZ)3AlN+FWOIE?#oge)i5Eyvc*Ty3e2N`(??HiO!7h=hHs>
z7GLh8)>#4YR%~?X?*g{hZ?AB^@XNfY?y4ksklPyya(RW(3E@%b>EXc!(W@!@E!ml5
zsB|%rkqx42xT-&_>G5{Y_A+6sT6f^j4?y6lm$ki#)g=%vdnHn_owL{HfZAeD2Mx^w
zqcPaeQLONVQGt!h*--CN!7g#)qyYk1K~Q5gkiMr3_pAU^b*`V$0Jt{jU0XeKZv7!|
zvdm$$VhIZTQR+MuN0Cxck6)al{wf%575k0M>{PkNJ`s-(Odl2o*KXt&elc{t_YwKv
zhe9`XZXFEQ_w2O_T;}2_y|&!bk~D-~><b&(oAO!E&o04_(SjCb911`CHOH}xE3l9?
z5+lIq5E3H@<DjYw3Pt+;ZNT-<(WH%ZByF@U>Mbm6Gs#ts0X8w4oOI+>gvjq1c^(2`
z7891C=<);1w}hK+mNNkdJ)djlT~B8})O<azVLp)kx;@`Ing^{a|12k!KXZ1C_K?Nu
z7LY&beoUA>aN#?ig_x}@KWeSM)qpO^AQ;Fp2h=hxn4qkfO!YJ(Ir8t>tXZNPm>JB*
z%0;7&myJ*lZ1j6lI^6GDnW^j`y^}Bo-4mj_2zUf!MWa>HpnzZosbDIAQ|KLrYp1gy
zisc|!;GyixC{jR-j#-<uU78SAzY^<Sok0`PgIhDoC1(@8$-d^i9w$CRTAq%6Sr2i>
zZGJson6dGxwq7ocrtH$)tIl{DPF*z5rx$i!@!4<0^Uv@)-(DK6sBQb+^pNXz=(>F+
zCL>0#t&-QNw4Hz6k`T~c{TmyDZba6bz{v|bg}}VCw4wx@dDD_=5IeHg3HLQH5O)RA
zvYBaHI~rE8PiLlB-nSXhGD@V<Bi^*G@opxKO^DVNuq7k-A&?Y-Vs!VPVHcaA_I}v?
zuHT()QsWnvz2<X$@jX*-yqtR^VMC<Wqkpiia;l05^Es_;J0Q6B4Ry&pCEYw7s}aw=
zdQ!NSgd__+Aavk)s#e~bY)-HIIl$-6qs=a^2}M05Tx~sE)t-PM{Cq!OT(L*E`AG|b
z#Wf3x9pJnKjNAkk5E+C6$6{F5&38=|A{l~&uv8lbou?tpbvoELMDOe%YT0+*mQK9t
z4lvV^dH}CIHYJ!3bxLu=(IdorA_q@_FJ9X07<#_ZH3i~;-nHjoEOKo{qe;MmX2v+A
zUlyD($e#X@DNMI5+)i4=@C~ch>KcdCDkYp=Pu6y`H)jV3q6UEH!ZQ@A2BY9dFQ`c5
zjpOEz8Sm(h(fK`paiInDe56AP5X0gDfgbE<W1t9>HRQlzrvjcP+SH(m3y6@eyd!bc
zzj-EO`xf;gR7X`|RmkW}Z1VjvhUG1{iw3@^BZLaPg~wtyUEdk@-F|3Z#Nfg8_w*ms
zr85+{9K)I2&YShTt+Lo|*RvLG9j77T>TYsMb}!+J06q_7P2@VxI>D33`h40HMF>@6
z<o7#~n+a}0Yb1E}s!(*m6n&IASe-~hGPl6T85JQG$fFg*&Far}0H5dEET}*e2y7^F
zt8e_v`5bQtI)*#1F8z)mQky>H4qMOc6$m@=2q_1iHc32-e1$}oj2;Gui98I@jASaC
zWSyZa*B^V~kYvzR88I8Z*y?R{Xx*&WquAN5wr!ZC#3t{{_mhdY2@&%k*6-sXnc&38
z`46N!sTk%>-r$O#_hr@8rrX%S<Kh099fm4mkI}`(+gD)5zM*+%8Yt#J{GpUb`gt?{
ze6!Pp{3z;M93JGTwtshmufQ!)2ci^Q_~=p^`zDD|0hFmSB|_>*MTCDaV2C{e65;j1
zA@7sgXU@A!87`(+mHy%tt4v!o$^IXnG(~U5qDbNdF!+|M(vd6i#9aB?ml5NuQ8RO~
z^YvE6MG(D=&f6!aO_dc<@<GM~klnTrv?&A5^>QG3n9NSWqzMu{W2P_@V?c4bV1FTN
zYilWMN6U;(ok*bAST-?}$pu<9!rVbiXFJ67kc0ZixD$>Y<d=eWClIlSU#GYTf0T`<
z=PTKY<Lw0#;Y)+7>3Vg*>;Nw0Vg8%|x>zZ7vYWh(?fLf3Wdi@#(*n<Iqgi|R7~(VD
zt`DaRA%>^@P_UsXwa{GkQ35A)nq%jZIe-~qL<ne<08<Iyp{(_+t(Cz)T3iIH(_5%#
zut1-wx8t1NBa-Wlf$8%+yxrrHnA;=MTaY`;4vSAcG;vcT@9;O_k4tN#3(!|`&|i<s
z_^+oD^RJOaq})DO=b)8gAI((+RW}$EffF88KNucKvjtXXCSP#Genb{P@Qfc<6!#wP
z9eQ;!Y>}`tv=0RN-s1UF!2P%dr2D`OfF7n9-rb;EL=veIOPSV+RFY_i88?R^4=L}4
ze(!k1NoaIen~AC|i6#ZXrU<*apPu+=sc=z%DHF3fi=C%f)RBQ-BNJJ^7Eu;53A}f`
ztU7Kn`@EJ8#J&_91>OoROf;SZsy98CFhZgN#==`%J+W_Ob)H8z4o6wTU_-15VW+^l
z6^IUc<Hp?Mlf^c>6n0xj|MjAJJ3jc(`@nlKQlGgzj|mNr;kj@N!}H1PJ=&k&ocy5j
z3jPt_bI@N~(IhpV6-F5#lK1<iP-Sw7A*GH-=jSz6@vct;T7jNaja|{>Be0zOEyx5(
zpqAt*bQw%OF1&M%#aoMIRCu>jQ+}mU0cx*g&Y7>~h_Qh_eq=zZz!Q4+so&bIZfZ(o
zIS*3SY=DfBOGyDQ;GHLJgy@I(-zRL2tD0A}llS1}*tgPwroq@;*om-b^io>RSu!c|
zx-LXIQ-t(-u*#veDp!o(ZM^DxMF#vBy<F(;o=!fzYwldD0^8~s-tc1+Kd&J%#s6d#
znMkzf%Kgdg=7E;noG?=E$SyrkH`aNxj`~*x2Sv<nNie4W$%akiXsrIgu3jo36t3iI
ze0(a|sX_qySwKEAzUeD4ZD(ST4hd_rSio!tiJ!f+ci*&KRVX&z@V9$JaX$b2Lu9wQ
z&hGfuYA5WOuwFYnWP;h<FlY%JLQ(kdIu$n-gG(~2J%A<~t?w6R_xf|hbi)Tak)rtI
zA@uEJ7<>#lKqeLJf)?eq>=Qrf{-BpVN7PouS4qK`hZ?VR<Mdo+ZFdgI!FkxIRvyv!
zDL2>e^^;#P+$y)|DG*KV0NS0iJMJnE^JIeqvNdRxEwkdqs%3l0duP2V8`dyb{bBS;
zm7++>sk6GA2al@5gCjZcBSRIV@|5#+c-xaFwFtbB&F^*jc41WXVCM@D%rgl3JV(1T
zV?oNzL9@_6P52PDl8hmapm3Z>VG|SD>jWv`=Akl#bfC`BX`SB(GVVP>m$HrYLvKEL
zxC!Hlq;~*38PY5OQcRy?DAn`G6_W&cpW-JBO~;~gL(4@S-9K~GXtqEEP^$<|evwj9
zpiDPWi@)ihRe(#{CwwiJEJ3MRujOj@adF)E$u7d_EVtR|4mm_={M`9+mBt%VUBJsH
zn6oa<ADE^n@N7)-AWp-81O?pulZ<X3`4TEDeIg~Hy`OFOeE2P8FmW$0lB>yJExDfu
zTI+3&&t6N9UY)fXPpQWz?Y(%@+-+v3CDT!<ez)XZ&qHCPo%0*?X?*%J9#=M{Io|)2
z*Fr&<uW%Sl?Ok6OdkC!i3itX*LjLmWKQc%gCO{3>RDh)nId+UkdS=l6D_;9`Hxg5!
z%L&tf4>_ZiK5b0N@fiM71peJlR5fmkgwdC4^_P=QF%>Ok>}T>PoFDy4uIJ;h(tQ5N
zM(v!ugH&N%ZT-{U$_@uHt^vbt+_NT!_~1a0VT&;lHUuts+7@Ev;V5IxJ8;gO<9X|9
z7ZJX#O4?ErlXY&<{Y^>Bm2cbuLZ=wc|79O*TCQ=3iDZ~YXTA#7$gqlTslZ^jd(wEx
z&dkY*@WS^rX6vDV8FSRRAor@o=||56T2g%2UkK~#!<J*8Il`=KkNMl1e`5UpIZoaa
zd&j|?G54)KEwA*zmF(Tjh~}wR^^SDDmNn(0bH;bjTKETtOXwT8E2}=e*_zQCWAAIh
z^<)~DX_A;j^BdA%D7Z-bE816HP0&N*`WBi_lctTp(bZtW{Z;vn15$DG3tb$y-`d2f
zIGAAaNwEXJSRvt@&>eVzz99wcKWQtAp{1NuCrq0|8Z>z-+@eHdTm><kpy=5@X@1gT
zu-oW*`y^7ayF6f}5B#MgLYinw0_5wCRTC2R4`z4?mCORYGjvC6J!N`Y&N4D*_JH6I
zx3$MVF6->YBTDI>`SYDgc#ca)?TxV52)KXBAR+X-wtE~cUqa@kg1Gk+o!(XG8N2gk
zK8wUT0}bKh2_hy6`)nSKO~Dk6eFvw9e#JH31~@z)$U2kq3V08sj6@t(5>DLjmWaKE
z))kl2@9x5IAj!WL*iWzgNsNn5y%|&Ab9fyg{s%X7fC-*?5z0EwRfGv0m9m5yOQCXW
zXgz{NcDjeD9i;yG1`e4!4%(1)47o(KdUffMcbWd%;&M2uy%vqr3vUwChqL1J$DWM?
z$3+xN6NP?VKu?n)3Ln2kl)80@vFpDQ!h&e1;j|hQ-V_t<e52Sb)O)DQ6k!+jM45Ha
z3fVFk4%B^QDalBAX$jC>2Mc`piX}iMJzBm-7dVghQevE3B|CX9ca(Z|ELQ$zHMQSa
zK&kG}e}zi;>YwCayQoIGei0e1e0pwo?OrWgE*n?X?*5{5It;CjzHeDRwP1M6=j?Gx
zzr9Kj3BXq`AwPJOT>VoMqFpPUJvA)#5+u-ft&Y+PVDPG<E5RsXYV@TNk;f5nfY`10
zG*D!Z&_xcUJT1cviieWZ7)F&9z+1U+eUyFN@oD4CrAc{CLb-aQ&H&P8WhH2$ssSF>
zu>Bb~i!}n%;;|mYua7Orq}*%Mhsm0SQ`7h29#`p)qjgOOj&6zGu-<D#Dm_x}lf)NP
z*J}663HqHb@2jBRiZ@5Du|61wA{^oR*>M8^wEaK{q*pOGBOPnF0TFtcJBDz2%pR81
zykQwu>O9E1bIlo14l!!&{JHwqj$oYG3oORbEU5gY`sYbE!o{$d_2{LNPNgBr>1-?C
zMMqEk8@+#+I^f(e$YsrAHW(cR<&LF<R-m#R7qY|xni3C_vV8cgse4#`$XEfBC<q!^
zI8!{LfaN(fzm5$fjF)IS=RyL4pK;1&j+?m~pVOIc@6K(gjtrl!u)U%=7P;l5)X#Ts
zXUEsxqeT+=JY|0LoZYTkuhnJZ)y$qNHnjKB4FM-S?(1&q0(0lq`|&8b(eHzB67ok?
z7~XK>W<EF%RAohgU<z0~DY%tjVhdG62bGMcp-!y3nRgTApFFA98V?uih}9|YC?NTe
zL3zVIM1J}g!7FJBpXc#Lo}{P4)4d-~i_ga3##GUp6r^nwdevz5sheM}^S*K~{Hg8U
zeRpOHKj>W|)Y$?JISC{VemI+<A_Jue5EEANVvJ9aw*k}R(B>!><Ji2(G#mx!pjpMW
zANo{*u)%AQAH-6pl+zW+6Q$+k5AeC;_^7ygT)9o-HZ_f<!(+v5TF;CL8OZ$TbQ%4@
z6P0w#I}dsEPcbYF{@p4JMnV3;u}_FW(YYLAR@#QaJupMT#6Lqw9RyON6qQP#940Vo
zuV21TRz|l?MjbkdMm0Ph-BSSZJ&tZKE?<iuZ43^yPa>tx`@m_cP;h`y8}8v`nRI7|
z5mv!2bx(TY9=mVcA(Uy2k4#0!!!;9csV*x=a}encb@2EmokQhF{L!PmkAv||Ci5Rb
zcVf22g57f^q;3hpoS*jdSw8k93}|<#%;(MFtnQ*_=iTP17kfA7WB(qk+57QmI%1>`
z`LJinKaV?fons=6^kyrB?k=OPXP4W54PCZ_8y>DZTQ?a8TopK+c8)5woguahW<K`|
zK^1gsh&{rT7kgOB#kS%Yp>?2246s9!*3G7<#u4WGvpmG_WKS?cBo#n1cXEi~qV;Om
zI3U|Vg)L)c2_!2h5zlAe06(vyS}C(JL6*ZSi-*zp;3ywd4+Iyzk;JheiLNhuTIq--
zH^^MXyb0h3Ui!`vok!D=T#<*6Zk=BEn8QK7iwk`AM)T!-u}$Z+p<b3^TIx=_lORZD
zs|BsgjYkXxh6}=>sL1`g?d}|5s*5u89-wVJPf|zDiUsjHW|czRY@KAlOZw-@BzNaO
zs`if-)0;)))<wocg!<c#5PYRiqyZ6~AQ5#?SR9n_#JcbYE}(;OeFq_34=u>v35qI6
zz(g~cD9{TMnw7mr37uge3d6X5-NqH0hvf*RQAtNs3q(7e6E4mtC}m%|^t8*P)Adxs
z^~u4VZ3?D_@NUbw;KJOyQNM$Xz@1_jqElIvJhGh*X94xuj%cOf47}16>D<gZENt=k
zFLPZhuX%SzR1!K(|2ayH>AFbO?0B#ZQ;@DgBXpfxl0h0d4_tlgntC(W2s-0$Eh}(I
zDb`;M@0srB^;J9&vk!#!TED6ZQ(aR`V&f-GkzE);WF10=l>cqBTb+k?yqVf*X|=Kl
zt~kiUj|4fdiJKAlBxLC}o%BWZ+g!Zm?jYtMy)CD}^K&`BPxyh)E&aooy%G>sUPmQ%
zMJU&A|9z5qMNQ|-e!=6S#~B}Vuw$v$PVBa{jR&Xnl~7JDU$5ix02;f#OBI`HSvvyM
zmAN8uB&bPgN32bG11OStOycK{H4r(_e0-k0&U}W)sP*>E#n4~+o|T*B`n;BN?HBXU
z-pA?Rk=x@iopL|C>hX6te{K#VrV&7T`jQ=o{g{GzaUeF=Ms{+OF4OnOF+Tz=%Smng
zS(L#nbg=pYblZCdX+IyS-%TF&r~aL`>pa><YubD#f))?j_0v?VpCBq?7t3ir%^~Jy
zB2C`3O6zPM{OtN;qqnECqcg?2T<_yBDOT`rVc7hYqwVDl(<{ga;{9AOwfKyCulIda
z>vm7kS;eV<5y-KP<Iflvlw>O1u3-t|SfnJt%@))y?S!gEp(0)>w))iBCI^N&OD2Pq
z)S?uqO^LBngPbW2v^iL*n9J}>g2n0q<*cIvQ+u~<Qq$#{ix&Hg*Y#N|fj5&lL1!7=
z9~Pf~0r%VV+Z~SoE{4(D@M3`p=L&jn6M8pq2VVTB4d{W0=8btVR3;Fr)x`Qphx=gv
zqVhg~B|}hlqeRc(5rrN{VDE%iQukejs;HPV5c;aH?g!xlzn*33P_2W5Ga(r;5lNO#
zAxy0MF?<uN{^|<B%D8SV536K!J{NcVb=7(5-j_H?IYG>YV+;40k;w^I+>B$uGk<N~
zj5{xBCunc~O~}4gik{Fc@d35K?{#d42*;(~ZvXc;IXgYY>&ESI?&a%4qQ;Y1jNZq(
zV^({6%}PoO9#trq*aHQwquUp$)*Bt|<w~PZ+_Z-ezDXM?yN|G|ba(%64Db$YMr814
zC~hZ{vIwCVFyek`0)eQyvL+_wH+{(RST=ENfuDVQYRU=r4Zpo{{~e+m^d^a3#9|p*
z>EUNGl;iohy#3oQbU=JPD@!Lc=^2lNOh`8A{*=T7JC3c~v+9L)7Rz644WToV5n9sb
zb?_;!VCiumuign+8Kjz`+%B82r`Q4eg#$xb?G89;AU{hPJ^O$(%kosZ_(20ku;+u)
z=4<@1n?E{}(5gt0Dg<EnCF^VI?eKz#s#}t|kiglFXxOMuq+OU&68ZGb+={zJ;Ck(2
zH!;;&ob1KTD>V40k(+$97f`hDNRq!9auMLMQTNVXXjeyrQj)obZwhUX^2e`L(B{Gw
zvW?p{<qJb#bPR@jIBHY|3iblm91%`nIJWe%y`x3aOfUcXx-z|BLDXbJj=gJpEgzMa
z{<`>htf1yNr<0jO??QTXuHiET@_uY`H?o^~!E#(2m$q*L^5Kl5dpv;6GdxV)Hy_Js
zpn0fg%Cs@?cLgP7PUhV%iSwNFYK+pS4CY?*=*h-Iwb9SawiAgi>SvW38a^@Ur5ETE
z2J9oZh9u`wa1lBjSYl}kMp_zGD;fy$a+H>E6^cjq3)hs0sJx_VLbvEh2F{yH!p>>s
z+hLH5xwn}KhzDwlEhjBE{ih7XtA{U<Pj}wG!_~{fBWf)c?KFG%{?%qG5HxWiQRp|8
zo}rHXbG;dpC|4HmS#a<<q<RpD@%%FAp>*oA?r0&FKjbCC7Mr8vNUDTFvPVf&ZHFQB
zT?wa#7buc7vu{=)6k{-1%1}35OfBv`>#kpX$;&Xq_Q9x~ERGfruKC=*2Cxb6U-$1!
z4u%qpNy~QvxmDGwiAlr{vZ}q*#>h{GVfhNLfk^hrnq!+OJ!nFvWR<FuK9to^kiHAv
zl&-#kwKbZg+`g8|D<$-^{g!(u*mx00x_9?FU>!*+LV{^z+sIT548+L@kWth6?0;YH
z(t`RZ3~}a(sBuKWhwNYeB-}S*@ZIcgjFwKexlvKx>GbuW-bMOko^l(B#jB_+J!~HF
z3T%x<a2TzBAXKvj{*J&V1f^4*8TrjB(i4s*ZiI_er!bVx4FwijO$?@DsmO=?T4xPL
zKj~<I$v+1!leTlQzy2HVA~5;N-@#-1{rxsBMXs6(e}nNW|2?Aejc>K}%igi$r{4ju
z&HTnsFc_<Am(rr4I~=SIAU&q|tuBDo2uhmk=OWZDalRM;Nil8<xyHR`=oN6}e6Ff|
zaxME$x0eQ9eVtrkk-aaMAE9Lrg&!6Vy-pJ@&kwZ<i9=YSR&07LLweNkAfeA2jP5)<
zJSY>)wS*=<<434@y_06fl1VcY<$=r9<ka2KOSV2Y3-!P}(?Gi9Ic6?rfEwLpFBiAh
zEw7gw-|b|@($3LD>9%D5vQ=CC=(bMaM)SPi=f0O&M@4hR<n?d4py&ta-xXvT`j9Ci
zApcMj)^sr{+9Vgsmo)NmBf(mN+R-L`&0SfM$<IhGsjv`K@c}z`cb!3uw?XgmuLqA?
ztySsVh%0k@yl>FZE495ocZXjRrPP>+?*~$z4xgh3sm(hL6$gl^#|O5Mi;cDI>KHov
z2)nekq0#e=pD<{4j3@$h(<ZHvRbw-N3|b^Bk~C;kBnR;m<89L4CCxUu(-<tReQLXg
zC9QqM{`5s{Xavktk+p=~gaZb=^LD3Y#Y?cq^4h+~iM}5gG1`0%pNY59;&fN7`ft(L
zao1^VM%<iVeTT^;m^-c;`w4L}+07?(?v04=UDkI5*BiG(ix%8&4w-OWCT0bUG=?HP
zwN<0)kYk2S+WmpiFXcUgQ-@ADEhk(4c|m_4uzw6Dk6zIKOX_jI;^V@ZcwpVk?rDkY
ziS6viEI>twpEwjE$=2h~{q&Eyk=17<`ze%5QC3-@n3eB7Ihm;sQTfVAq;D3OzbqW0
zSIvd>XZOuRdyEx+fi;F-N$Ehof}gwf)GS|BPGqf&n+kR{hQVj$y@`!X5JNq^j?f%j
zXgWU1m=3yKb`yEmpQr{K`POo&zbSUR#rtxg9f=jayrYW8r=ZNhIqHBF2%8bzoY;ph
zY<I2Z@h?VEK6?B|r*mI4wo@x^HSKllOYZf@W&Va9tzJXL!q$QsJ*Do`4fEQ>O0PPX
z$QV|~=7#H^cur~*pD1r=9ndW*SSfZn{2nT!n~vm6FWVba_>+Zv>D0;1y@e5kti>%|
zw&MLBp*Q!DW1evuW$EJ=4F{RN>BNb$Kx{!sgj{5Cu+QzWcVXQe_U=5wt<13FzaHJ-
z;JS7>EUc}<VVhYO7r2+)+*?>X4>8(*&JE`k`8s%KdsS@UP@L6y@kXk$Afr<Xg8v{j
z>yM4M*xAaxxmuLl?6bndUghRksjH-OG+R<FDGhh=2sd%!i98gQfVkNd@RLtrP}QLv
zO=)rY&CPmblRfx8ZpG>OnyaRE{$S4;DBL#GtDVoj&MD^B%WOh4yW9%f;BAf5UG0tY
zy~#RRYc+YAuHxrf_kP-IC+M8ITOfJI?zpdJH{a?syS+*BD>(l8R$Z*%8#yj(*~gd9
zXA1Z+d8#LyG=d+(Mnf;?=h>kW>-o#7R*_b%2RFD#{1VWS=z<cK-C+QEpkPQtuU2M{
z6Rs8$qzF*>mHDim(hQU<I@1^R(bSVcHkIV8hMGBZd3JiPhj18*)%H04O)EdM$<V{)
zw7wrQVX@{@I=bzax?6+GY`Z@s*>IwDL9pd9kGp=k`W$MlNMr1rQkX8(ZI3&?+k1k5
z<FY&0I@M&9ich^-=}SE-Y}RPhwAO@Q+c#)BFK>S*(~<dnGotHE?$dy{oi_VU(m1FN
z>ADIoQVhQN?jAwuEd#-17Vm);?1mOh#rvG@k&{;6b^Ci4#y1R;e|{0|OuWv0ws&pD
z6}uiHDf5x6P8XMEJs3>Y7&}EPo2<P!AV;iaCo27O8CpawW|0Ts8VDMf2Xp$!^YTY4
z?Ke!kQR%OY%%q$v7p>~)CNyDd)3zQ#Ag}%tRM#01`BCd(a#nAr_2ex7;x4E#gzlD)
z>nQ}yl1;bo3p;6wb|uuqb$gYyElPI8==^9%JM8I?UdqO{(+oJ@hOSTcX>ie(SHuEE
z*U95o=N^VcZE)ZEP1t)S%?#EsB&n`dCt=ZC!jJ@4>(BlWSj6PoN^N)h*U5g9h0+u?
z8O#-W9%p;SzZri*MgK08s4B~4Ln!rU1P(RoVo6iIy0Nwt2bl#|!Mwuc@4~63Vy$5g
zQY}lOS4A?ZhoKJ_{mzgfiyAjns!rL?9-mQuOHkQW8)~3JK}B$pPiyz9!9xt=qO`Y&
zUgrm)p)lX#ClWVe*FfKVlvQc(tfFwUuH6^S#Mjkp_9fsGdR6gbbe{BopVvL*94w*f
zs<l2Kk!SYpkR%Gb6x;&UNz|7nH(ZXF45sjhTE>tb_6FD2V`rB)=jO?{If9Opx5|Oi
zz{s(i8DeLVi$DEa{1$hy&0_Sid9OE}<+IY(khuTG^+ct~X}RWlJJHaojpxSKRC2#L
zpKV2sNOh^3af+Rj%-^|`PH+GF1tOnW?{YWYP2kL98)T%BS#Mi&IAdCXl^VaRYvK3r
z*7a*x8RXvU`rgvU<6G?%w*dDlG{XWc7C!H;60wykK2wIMIO2nAd!h2nsnBMqp~07*
zK})tFmu7C~+UcwFxZ%uvA%7}E=XvE9X`|R>Ub<Y<`W4i|j_0iCyGMg=&BRo%@@mK0
zEwvev*&+-3=_ABUAT@-+mYLS-iM-P;vx3#-3Apc#VjT@9T1DLLkSb|#CkMiGRl@qb
zj+dgka)*rmR;(pnyG0e2cJp_O{|z(y{D+t*`s43M?{8?|jplRpA}YGfF+i6#*0i--
zU%$&5AuXR!8=_rCgE*V)<4G09K+^qiw<r4jzFTzHV!)4G${!20s?6?uBJ-Z04CQ;J
zpk1LQXx5OGj?mJWPs%XwQgF7b+UGNW&bZ8P^1MQ~v}Oh9<I3k&PS%gijx-Quo<O2O
ziU>Y`D)WQpu-8IHoE*c31?AI~-mymgO?xjU{r*J_Ut~OVlUBto9>hio;pK{ZL2<95
z`~m#Bf=X?LHV7jvxKxT%pg(-hS$CPa+HN~NCB#$YwKyD;bc;bNz2NeG7%xS@Uw;9-
zr*m6j$Y?;gTDw_smyGi9()A_2%C5?~%?yn{B&EA!Wv{(6GtNu;++@2e({oYgzlf`t
zJwkH3$Z-uhtNIz==Ff}~2h*JHhB0kDhQwp>L{kAx=8h-?`z6%@+mT%P98&VmRRfyj
z2*<+_LwTy4lrT6n<;7gk&{*U}q($`rNFGNh2X%4cRui#06F?_uUr*7%Ro(#IF9W|n
z`ZGwjkgK4eA6VAu==;)a(P;S`&`?*<(eYp!IORestiqToCs?hI?MbNn#Cd1w;3oF{
zBY$j9S%QAd>`uLlhWKKav+RJ{^Uot#CJ8=*tPwNUf{O(f76>SC8D=X&Kt^;|ZtibU
zxd2`1K<<LYL^8wY{9PIp*|V%<8ih1ZCQ;DPNfAxcT~QZEL)bkK4i)xP(yJeBqRc9R
z<L&LbcD7HOSD#rIa(E5vW-SvpEsrhDPQ{zcz?Kj~{%l%hq4%8d^@a)vX7~2p({dkF
zpc8JzQoOHvn^XwtKW|+(CZ5E!<ycnPy0QSb#|D}}>EvttqCCi}SP~&$N3SnNr;btH
zcL9yd)f&4jp3i)8h2-ze=fSKR-bh$=jJ~hF&_5ZUpxkk}8QT`8CxwsQ<SNN-xNHZA
z;~Y*Fwcm$L0b0zu2emS0RuGXyc*VEPR2H7-sa9K-iPl5ANoYX}lq=tRm8=~Yw1CKE
zU|!fWGE0>xL3LcHz%R4r^@oV`)=)-RT2%uMTKy(gtVEh6!t}9TAPL>F!B;nf95G_w
z2`YuGy+$yG0NP~UiI%{esDPxDHTWnJbg2<FN2$O<YU79XAukG{S|2T5+ll9}$j^dQ
zF)S^C$azALRzM0nEh{M_5gprz!L5c5GQ(5?LwB|QavsoM1DE2L0hRhZh-@Oyz%1}L
zUtrlo)9<2Z^)OnX2%5inC{b(REg6*v?6VGHosMAKgalCoN@(AY1ZwB!rvbqt=*jdh
zz=beNLt&r*ox62|Tw-P4^+;qaUakeHRL1h$ACt=#h3$TzEvpq75)a3wLZ1}dA-JGc
zyzZKOEKF(8sD$AS3}v@&MBL22ESY8;$R{-?RMRvl|6!GL=p0wvT*kD8kAI!@&>sO@
zYJtc(P-D;(2Qkk?!UPdQJ>dB@U}~@`i{@ZXN+dOmCP`{&rnzaeQsvMWHd;iz=Ce9q
z1q5=>vst!l&@>VVyGu-`<4v~v=X_hRMuW#GqgF=CCJaAx=^Ez**C+%%pjgou+!Z0k
z%D0(lFuz_gwc_+bYl<Hhz5ISdMkHZvo|>UKFnK3!=a&1Jf6W>1=o<M1=bQoB0I=Km
z#Rdi+yuC0<a1DRILil465d|VM5WJA7681gWg7>P4C624Uzi@AQKC4nCo47uGqcW@1
zFF3sscsc1w`z9BRGy7f?+DaO3c?ld*gqY%!B6@oUTKn7L(CZ3JF;81smQI_;H}SM(
zSfguBnX{d`>|tkSWNZh&kcpn~xU?ia%rI!V<^>H?K<}N3;O5A~OqsQYnEgi0uprA;
z(Loh-g7?8Z3O1KCrX#WX`q5vSD6B*}RPX89JwUGXYz*cCmOY=kGSsP_qG!mdrK+ul
zULmc>?olQ@Zu!`!M)kC*k%}Vy=T45adTBJ5`0;PIlvAs9Kje-6`)E)<d+(6b>HdLn
z)q1r^%1UC4Gv}5luzy6;5^5q(8H}q_L#%<dx*Naj44oo&z;l(~6A3wJTEe)$Pb=GQ
zxyGRNWq#pT5-RGxk&!j_Ke+841J+`D-YGA}#m8MwQt@O=7IB@pMUjEzvY&x5pnOZ4
zO&Ws+pfk%PrRL`j_nc-1L0o3Pa1-1M1Hcv})jNi>rgs>RB^LosM-UAQzxIP~ikNyH
ztInDtxtV#)Mpd11gtYXha{}<|zyoYWaRQth0>ahFW6e3uin+|ZwZp0=;q>ddIT>q|
zyvZR5smj5(w^bP|XWsxpZvVpd!334!+Eg&%-VO{Zpo6XrkYo1A!s!n&MV3=1oK!Oo
z=r8bO-F6iVPY;||z<46Bu;NC;Ge`PsxkvW6Pm>OA%y~S4TL@mxx(inG4yWRErqD<W
zK|M`kLBAyA9EVq(nUK+-(Sj7L`#A_3L1QwBQnqVs%6P?PpYAc3ec=ezy*Wbl`1cIA
z@-!=_SALLf`aOXxS2^0grM+3{TC}lqc)osqy>Fgm3bd?TAh=vc>#>?oNO~h$X<#=u
zSr2MGFj}w8bL3?`R?k{#1s~fQeQ@`wZL8&<78iQ^IWPZgWw&Rek6##Bl5+febOdX&
zr`!v-Q8#5IucX}jSM`2c$ZW~O=(4)#$@IQO(th~8$3worgTc;#ke_mUTQe{@bMiti
zB25dEv-K&o-D;LBEprDKIgx1#9*+Xc?3w3k2rN}86D><=sTJi|?BvuI2eZLoL@uDp
z+?BXAyy`wS`2zYvsNAwTBv91gj4^Z2pmD9}P^NmtJa*aYH~x)3np6ScS1p%G0=ZjV
zoIv57bHcjQUr1UiwpN{~{NodH@w0RKT@Ks@cblhDJ3PO0`oO<`R6K>a7K5iDzS>P!
zjN)!G(o5`yY#f=+h8otpOh-Z)sS#DJOc(XQnoUEy@j%tfERdT|L=>b$P!~^V`Sx{m
zW4E<a2LgSTbBPm?t9L3YxDM-GWX}7%#?T(|q1DR7l5=ZsU{b<M?$LCSM+-<9ZKvv{
zp?z%iIB%CQV`b^qm!E`&yYI!H&KCIVtoc4lt_pj<4@f?L%%65kZ&F^ue7M=>))~py
z()PrLy~<zd@U=FSk=5F}>#oI5tU!iCBD{NaR>Zj@23?q*b46BDcd`hGkyavmQXy^C
z<ISC3A`PxLEfjO$H=jKe=#s1M%r@q&WJ+iJz$|cwZzI|~h>v^V@`0a^=*ZA=<HmAt
z6;_V24QpeA#%i5;C>EZ)vN;&O<;Zd2S&be~?-d)Yl93ZO<(fOUEdqf8FxeIfmcF^*
zIC}~ZoP71p&ejWeMt|YKlk<z1yY(ezC(~_8i1dJb@li$NCYLdwgJ;3Gzp9Og?;B%j
z#V7QQjXmxJBPltWGULsUR-bS@q6pE0!x6y<;W2Fu&c;B%&P9lAg+m!cRxs?9QHX;P
z&EaA@rN!rbO&m}CuK<S^c<7v@=oTb-ed&y-u3b9k`?EWCXx}cqyRUmI;;hM;&9t3w
zMO)3MOwMkgEw?pi*^Pp_3J9xpktmrsGR81ToqykBMox*T1tp1$j&5D@b31it*R~Y}
z=9Y4{xD^d={)Et;8);}pMvn|pdcz2CHFRQB1eb3~N4MYq=>Lrtuoys#%<2U*P%i3<
zmINH^{K0A<2&W~1QBKCP#O}<<Vp;kqc6cjFNE~5g=}1z+&g0bXD!D=l-Sn3MTN~*I
zMX_pV7+ZDgu~h+QeqLecysr6O{n=?AuiFl8S*j_PrLc=|WcQVem$oKix6K`@{PRVe
zB=G}GthSVl`k5Y?G5gV{a{IkGcHz?*d3)}C<sU(S+hxS|%At=<pqJ+jeq+f~FYcQ>
zZ0+vHkM0s)nzJH`C=cO|Prjg2JGL_N?znT<X!_s3Po^_Hz76T_ujbd(Z@jbW*)8J~
z-903y?(uEAxg1QV4%WBC<X}3JgWhWX0QXk&2L?>AGYTXj2Fn7^AD~eFz{&Fm0+D55
zbVP@fETc+At^IA8KY)=$VDkLyLtEqzqD_(c1K!i4>PC)hU)4q(L}+y&+M7aT1<W?F
z@t&*D1&=ZW;WDlcb^Sn$#=6Z~w*Kfed(OI9!kGu{fm@8_70m>vx)a;P#X1vW5?EC;
z;OZa_!>`~v>voQ-yA4s~8*v3h0o`U?W%*ZeZO&r+E?m87DarpETu*{7SRb(XJZ*#<
zk<HTKn_+8cg@HbVZM(>ni1x%S23G~zFm&5x+zjEUcujwCoK+nhfpZN+$wLDbA#9tw
zy&xV^)cykp7_^pf4Jup)G^Z2j{j`*%)?kf{PfdRV=W(3MC+_>cs^w5v+NJLyErp`;
zCl<g061ZAz6lv~>NeDQ#B#U}X6?(nuAWH>_No+lyMTq189Okz_8v$unQwoQqrB*_a
z_&u+o-k_F{)Z_~mT0wGfNQ{q7ERQqf2AWP%R$V^ea47Aff{GLIEn&rkGBd4!9pX7I
z@bv-KHvlVHU9$*SHI&^lnHorD84C5dv}G3&PiCnBKVf&4ieqIrzso5*(80)xDvDXf
zy~EDxs|`57ig5%?!WZkXYx+DXNolF9%!0K}Ab#(ct03JcL4fKjh~eR>O<+E@TJbE7
zrPqJ@JN*hPAALGrSNJyl?zXQ+j_S2-;?)6XH$A<(VH<t!xt-5FN&NIn`d4iF^b0J{
z5kGi&>)nfcWY4^<|09!Uuc6cEKi1dNP0t)Y&E=K%oq#{Y)^tCoez58hnGsr}vbR&X
z*TkSRfwE+o8%5DqFw5^KiD*wThTBteTRtMTdZcB~iZR@?k_eF^&TQ8<-Q!M9Y7-xm
z<;ntc>tuD`X=c^OnXd9VyuZp-UHcwFqYinJcnBT39Tt9u0F@nRn@eumx57%#Z%7oi
z7*TbYrHZ^Pt#eD*vxYL*$?-hQ4#9?>MYSL4S76_eP-+d^`CG70!YYkB>~+Tr&A>hE
z0;k`Eo^q4SQ%mpxy+cJnaYyL3v8wMJfy1fq5IbRtNIFT9Qo$6P;}*c<nH%f#dQwx8
z;<FR78H{lLNriE~6^xn$#Olk{`}AbYE7@+|iNyYRdH#vjGBk=A;%?pxn80!&5cIOL
z=Me}@Y4eS5gPN<25n@LwW}{B#7Y-=eg>Nk`!fXDyS~wBh*EK)4OILqx_t1B;>XAq2
zKe}}<>QWdeB0p$9aDQ-m(=l<ZxU@wci-hu60_!AahAf=NYT2FLI*;WE=drYMR>{Hh
zSF)7L^I7@4>uSq=mD5Hoz{aavW>n4`Gr#erJbbSIw5RIGMnCP?XX;bWsy$e}X5PMN
z6Gp5JYryOQi#PqUXChgW_rZI+#s}y5FR^vuJsq0v-^KOBFm>m>j?n!~`q=?V=w5-4
za}z2lVa|=Nx%Hzm-1-se*l2@wt(rh8Lrox7Elm|t2zsWwZ;98esSK}#7=Ex4!Ykw&
zgz#dnf$nB4DUnXhE%2&{z$-Z^KJItob<&2=yu<Fq7@--ljAo}L5;OhHIM%{p(MIcU
z#WFj_X`U9y8A5Ru#}D>dYy4{52+dT{@`dM*a8e96V^`*{jl6+jPK;G=CO$TdS5ycu
z-cO?HIl{0Ssjen)ZCb$6#zkZ)#tLf2!YaBn_N60PLXymjHhIqp*Z4Oyo+Jc3+R-<H
zrM*>q3R8PAtVhMF@LB`jhsb-LQ_(!NG^qmwS~9DFt5)xQKw6_2Z?7^pU;9uJg4;g)
z0L!{5V(7vM6uyHZVmR<8)`d`VqAN8vmDQM99oDo|gM(Fmg|1Zcd0a7}4r#B}keFi4
zO~=EE>uWB2``rhBf50f}>gr_NclRc;r5<<OAT(4BqVLiFvfch<>cAqJr$e+u?(l>o
zr!&5M6YsxpE`tB6{*B;&4a71%0$szbZ|?8W@%Bolm>oB=oa<u7OT8yE)E_LeyHV8p
z$3vb}i&kKGU%PWl{!)4yIZ!eR1`J7H(-L8q5G}xC*LBN^Bv%=9gxyOeaPN$XAF9x<
z+euLG-Y;l1k~f3%pCit|)n`hOULX0mnkET7j&-``YwUjGSui!f^%y@BWluHVLs1p5
z#W>r<JCkFQ`5|eV+Y;r<%)oN!N<3HdaeU}zLu<PHWe`mqNnfN-;E^~makyX(zCe7z
zi)3J9=`XYi<Dc%k;|>R2j%#o=UgA<u>Ba5zEWOBX*m8?Alhix+m1J=^N<!^WHmkBQ
zW4)3<z^Q4&E2@zm45wbKiqa8wpN5)o0QW%xq78)GruLZ_b?lIt-9DRT=;QdE%0`1M
zq9mMTjLwwQv_j}Mk=9v<$cACBnr@J4>7{u+&Mm)8f57tBi{9?h<&_6dUk&<nxZkKJ
z?-;h}x_i?zPi@}%blqcOpZRNzB;{ep*E440Y^=k2+<x}7`{vM}KAl8odwd&wDWvfH
zrT5Q${Qid@?t1+3U7>mmac)G-hk9mE)AXHs4yzs)@XLu=xtMmRML6vb?!V1uQ=KD>
zjp9XNANc=flzli#QLkuHCCJE2p~DrO242z0y6?wSH8>o0Rs_guI+L)=>0#G+da!Z+
zL|0wRJ@aM{TfD4dy7=v~hcenNUg#=Vv?Q1Ja!dhOS@L3Dx91KdH3t^pWDL@r1p)QB
zN%fwR8*UcL7qaF~oN)h~@e}@dcd_4J+^sOTr*vTK?3rW7PM<xhbNB9@;fvQrf=_o*
z_*VKDpaEBq2q6IM{X4=P$_~~>>U6LRwDmezZWng3E3{KP5LPDZVGEr^SecdIj0Hz#
z`JmfUbNuG9rs*R(486T?N_MB{ai*!_C2y9uTlYE3;ak@pbC$Qf_a3#p+W!CJy>ble
z^gHj;FBe9J@6w0ol;8cF()?VUZ~~X|yQz`_30S-9thrPZ{#TH~J_W$;%V!_Jpm>cj
zV>{0+_6jFrhGQd0FuK`1;d{87KlwqM2lH!`Z3Q@w-JSeE?-c1!47)TLCw|CeUi)kU
zCi6weE+h820BHd?xy7dxz)yOtcd`P0!f+rB9EWHo39Q+KZ4droH)<J?QM;u!S{H3H
zGK}o(BX4~9c0VBH)+ofa(VZWdo7B}5ywFVR1+1G+FOP|!ITD^lgQp_d;v;rAJd4hv
z!gI*Y9B_v}S0Tg-;xosN?mREP*woCFm=W~H2gc*vKdAOEj{ZU#RQ|*<ZSXNd*E_Q_
zNdw`~Ib6o12(p1stRhQq)mzObR*U6ir5+gV!atBv!j<1yPrPgD-IHcaubDiJd^6|4
zKhB-KU=hP-Q_~e`ANrpAX`6V3sTHw`Pb;x;ZDkd`FlT(gC9={gT){63Rxf7M$`M$f
z>`ao(>u=>3B#gs7BoWOckqskU-pb&a#K>o~V|$W#^Wt21hR%USTk|_UFJevOoHfGI
z=Ff|8kbbbv$B+T6eWyT{8H)n@>;O^>E>rlk16ZvHGoJio0~}H6rv|WQaF5fIr+sQb
zUT%R|h{mL0-dcJu-n3#K{a%)0laiu#3y!zmnm|f|Z@;#rztNYKW&M%$K7tRtTsni&
z(H{cC(=dwi!V+1))3EZ)yn)F+)2vlGEGTNPo)OkQssiz28<uTXKTiiEmat$cS62*6
z4zqhC*yop^bewJiRhYs)fk|;P^Q~Ue1nZ3iPoCeGR{;Opka{g~0zEMZ)8G#f_?@La
zy=UsTZC<zMU-WW^x=n;^+U3J(|2qA2pE@az-m{=EkhP%UjpEv#?CQz|?b??ufKWbd
z%!;AFPcQjgTFm!NEQ`!7{Bs!ethW|8S*>0Q39b|`k~9FKum<Jo?`%8iVs$_Uu-C>4
z0xiZ^UPupW&4UGxi+P<1ytcf+BjBlX&ynQwWY}q)Jp0eDpJ|vc>&}zU$z3%y!Of)O
z0$NVa1<#R=!H#&>^5A*34|o;tKl(j-6yj?ZO^5sT`-pus-%)GZH)*x*R`7_#KG$Dl
zU$AEqVQd>YneE|3wqtJNJ7oZ2w*}4(*kFqa;N6JemFpF7Zba>3D_`@)R*0QxA$Fvt
zUSq}l+vrdwR)TsVvmP9RUmaH!Fr}q>*qsGwTE&}&oACzR265bWsb@jaCfERG9k^bK
z*38CUQ6gT^>a!C$!U}G66;}vNb+#m4kT)peeTCmh5GE%1W;b?0P!bwZ#X3GTB6O*l
zDh=}aFbzI*8`+N{_$=K6v}_E-q?(9X@R&)om<Xsxw^2wlud`T^U8vA=+);G2xdNHZ
zjuKYR!;mmV5r&3Q2_+OkaR~58G~@YijjjsB6&Coj)#CB=G&ggmRrD?4HIQGsCH{jr
z{-;&$*?|aA@FbdbB6z|IQP+dNYHInawk95xFcbT1FLM~fDBOY^?aa@>b;_WYgZPtp
za5L#%m2|d3Ek`1gsd*f`W9%jrn?2fn;>~}Q0}_^cjV{eb=>GwC+%CWX0C?JCU}Rum
zV3eFSTV&(!cz&C&4DuWdAaM4ogb9rPSNTtXeI0u-kjufq1QG=RYH18{0C?JCU}Rw6
zNcy`LNHYAZ{8!DsjsYlw0zLo$kVOWx0C?JMlTTz^Q543%ckg|FR2Ef3q){;<vIvba
zW)Wiy6=`V~F)FJX6{Ds@j4`4jo-S$@Sw@JgvWTd5_XyQiWK%I_Q8i+eYFAxEiKwbB
zM&$K7H#0SjEPlRs&%NiqbI*6LI>BrJz$5@AjAKh@&~T@aHXC^1ZKCXcM$I`yLlsdV
zIa9#`=gQ6><kbcqswB45Pb3(7LiS0C6v-56kmcUEOe%JL68YZvnW(N})K6i>y$-n3
zXt_fO-40r&PLdoSaeR!H%98Q;vH8LHBwGFqT3$f12u-`Ezc^Py#Vp|l^WK{efM3R_
z*+yVidDeBFV+Su;^Ds4S7Ld}L@tN6n*7(1oIYy*Ep-!!v5Owtix6C3Y`Oips*il}*
zZqoKU@@t4BZaQ{-BsqGP`E8!_2xFYvH45-%Fl<uXBY@HeDCmHFEIX&vdvgAM@A-W|
zq&KT%OxE!HtE?^Ky+TQKFsHjH*c|p=Vg_+nFX6e3HIX7odzRmb+#G7sZ>Nn3#vf?l
z4)f=|9PX3b<R*Kcwtc?>?<_tSFRTv(&<B_7schVoZ?}o*z7Lm?J0L1v3}U_b&i%UV
zoAmt(yl*I4FT($!2VdC#*VH|7Vh&OJ=fh>>o{5SVgU}1>8P$5Zh|pi-K2q1dGsGTN
zseyjS`%?${syOd_CAkZ5N)4$`IVbO-hXD$FTLtG4MlAAPK4L`BIij%Z&Cwg?sw(ef
z74y!u^A*{fUM0+1<h=|gZ2fnoCf-BhFJHjg@fU<K-{JrO0C?JCU|`UJ!U%>2h6jvs
zOiWCZnAR~}Vfw{v#+=05#k`F981o|*1r`^U7M6RgGORhQCs^OH1+i^ld&DlqZp0qP
zUdDcoqk>}#CmW{^XA9>B&TCw1Tz*_>TvNFAaoypT;P&F~;Xc5_#}mM_fad_uCtfMu
z7~U@44ZL@F|M5xjS@9+CRq-w3SKwd4|3;ud;DDfj;5i`$As?X$LidFJ3D*dp5MdE1
z6L}))Cpt&;k(hy4jMxgX8{%T(PU0=%%f#PE7y)67#12U=$u!9|lJ}$%q$WuVNw-OF
zkiI1SP9{gDO=geG6ImtM64?c^KjiG>667YyZIgQ?FD4%%KS4oAAxmM7!Z}4IMH|ID
z#YKuwl&qAplx8WNQu?8+pzNVsq&!3Uj*5Val}d_ApUMH1XR2JPIjS>MkEni9lTmX~
zt5fGt&r(05VW2TjlR-00i$yC+YlAkMc7paS?Q=RTI#xO{Iy-a)bp3RDbkFHA=&9-D
z>7CJ+&`;6dV!&YFVQ|3Uogs_i9wRfO7^6u>r;OQfKoMglV*_I!;|${-;|<2=OxR2u
zOwvp`OjZHm5tDl+zf69anwc&#{b0spres!NcFEkxe2w`I0CXFPng9U+008g+LI4E-
zJ^%#(0swjdhX8H>00A@r{Qv|20eIS-Q_C&{K@>eb?HSKlh=oPR%7WH2NJK>96(K@`
zu(9dsX``9Z(%s^*_65Gd#xIBuU}NPIe1K1I>Q;HQ85^nG>QlGQxpnWYY5;wBfDNmq
z6F@@K*unr;8W+%u8-s1k;nv_5jNrxKRt(|Y;5PJI9R|1K&Kfef1EbcX!CjcK-VE->
zL1Eb79^y-bd$C)1HTVgG_Nc+n@a%akBSMvy(XJ7q0*B^v?GpuvafU0_pjb!rI=H8m
z;GswxH>ij)dRNJg$*VDrgC*jGYBl>3KgKCsY|$4IIoP596e+g3uHu|JpWFp{0%24*
zC*+OO8dVM!sfnmkIjd~ErmTGQJ&Bo`Y?RIw?Wgin*DO*bv+7GGHL3jS67__>7>5l#
z@TCezSXca(#hXY*Dq1Gl=&na{S|A?PeZ4+r=814CoP)1Erp&vsQ_Xv>?k%Ht784v7
zGF<NG)q&Bvg6d@cSC_HYGpQ<+PFKm*U3VpBo!!}xYC@?**MI(_j*L9jsRhRI$<wR6
zM!mS-w^`x|-k*7Y$8sg-DtBwSm?=FQSYsbou*sWWkr%FF?sK=y8&>CJ=G|zo%6(n3
zcQ~eHuf($_xj&03@#w!~@&hCMr<DKz0C?JM&{b^HaS*`q?`>V%xx3>||Npk@hPSN6
z-JQW!fw7H_0>cTefspV9!Crvi8uS4OZox_58HWep6}t7u8~5_bU2>PZBZ`*z<HgJW
z;s;2SL=%mH7>t-O6H6TNB#=lF$)u1<8tG(^Nfz1UkV_u<6i`SJ#gtG=D_YZrwzQ)?
z9q33WI@5)&bfY^KG<2-kuv3PEaw_OSPkPatKJ=v@PF(b-5;q<OFpxnEW(Y$W#&AY3
zl2MFi3}YF`cqTBBNla!6Q<=teW-yZ~F>sKztm7)X`M`R%vxPkz=8(j&nYXNAml(yw
zHZil28@!iT_Hu+@{Ny(WIL2LWbDUYsW(U>Wr-nP+<1r6-$Rj?6zxRwMJmmzw@XvPg
zlIOg@&u6}}i8%zA%RFkSV;}X*r-2}igjm2r7V(M2ETM^|EN2-P+0RN=u!_}u;TxBD
z#Ys+anb*AIjl@a3BuJtpNwTC!s-#J}WJsoDNj9fB!+9=nle3)T78^J!Ib7p9S0q>R
zB%iH(mjWr2A}N*<DK+|Pn;QI@DO4A*SS*zhoff6aUAoe$v@0u`)x(WSO{pubN}JNI
zEK@p^<;s8aoDnrOSJUFW0beLsQ(e{QkCb#zM7z>qGq^*+`sT!~_VKtP`-Ih%R;A6{
za<;Bp{{lIAr&0g_086+4$WmCb0RfI#xd;FV0AnDq0V71P10!&-7eyc-OSk|IQA@A}
zQ(9QCG#jueSzu-$id9&!0wrOv0YzgYVz2@uM6wG31}d@)1_mm!6b1$=S+WEu2}M#w
zvJ40ZDzOFuM6o0Rh*4OuK!{ke1_MN~CIN_1ShxfLh*+@(0Yq6@Sy{LN|Anvwjj;s)
ML;wL%uV=LY00kR;TmS$7

diff --git a/doc/global.html b/doc/global.html
deleted file mode 100644
index 2691378..0000000
--- a/doc/global.html
+++ /dev/null
@@ -1,10836 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Global</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Global</h1>
-
-    
-
-
-
-
-<section>
-
-<header>
-    
-        <h2></h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-
-        
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-        
-    
-    </div>
-
-    
-
-    
-
-    
-
-     
-
-    
-
-    
-        <h3 class="subsection-title">Members</h3>
-
-        
-            
-<h4 class="name" id="$"><span class="type-signature">(constant) </span>$<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Created by gavorhes on 6/22/2016.
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery_floatthead.js.html">jquery/floatthead.js</a>, <a href="jquery_floatthead.js.html#line4">line 4</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="gulp"><span class="type-signature">(constant) </span>gulp<span class="type-signature"></span></h4>
-
-
-
-
-<div class="description">
-    Created by gavorhes on 5/10/2016.
Helpers functions for gulp tasks
-</div>
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="gulp-helpers.js.html">gulp-helpers.js</a>, <a href="gulp-helpers.js.html#line6">line 6</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-            
-<h4 class="name" id="offsetMinutes"><span class="type-signature"></span>offsetMinutes<span class="type-signature"> :number</span></h4>
-
-
-
-
-<div class="description">
-    The GMT offset time in minutes
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">number</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="mixin_RealEarthAnimate.js.html">mixin/RealEarthAnimate.js</a>, <a href="mixin_RealEarthAnimate.js.html#line14">line 14</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Methods</h3>
-
-        
-            
-
-    
-
-    <h4 class="name" id="bundleEs2015Multiple"><span class="type-signature"></span>bundleEs2015Multiple<span class="signature">(fileArray, production)</span><span class="type-signature"> &rarr; {*}</span></h4>
-
-    
-
-
-
-<div class="description">
-    make multiple bundles
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>fileArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array.&lt;Array.&lt;string>></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">array with elements [input file, output file]</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>production</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if is production</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="gulp-helpers.js.html">gulp-helpers.js</a>, <a href="gulp-helpers.js.html#line158">line 158</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    output stream
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="calculateExtent"><span class="type-signature"></span>calculateExtent<span class="signature">(layers)</span><span class="type-signature"> &rarr; {ol.Extent|Array.&lt;number>|*}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>layers</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array.&lt;<a href="LayerBaseVector.html">LayerBaseVector</a>></span>
-|
-
-<span class="param-type">Array.&lt;ol.layer.Vector></span>
-|
-
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-|
-
-<span class="param-type">ol.layer.Vector</span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">array of layers or single</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_extentUtil.js.html">olHelpers/extentUtil.js</a>, <a href="olHelpers_extentUtil.js.html#line14">line 14</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    - collective extent
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">ol.Extent</span>
-|
-
-<span class="param-type">Array.&lt;number></span>
-|
-
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="dateToYyyyMmDdHh000"><span class="type-signature"></span>dateToYyyyMmDdHh000<span class="signature">(dte)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Given a date return a string in the format YYYYmmdd_hh0000
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dte</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Date</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the input date</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_dateConvert.js.html">util/dateConvert.js</a>, <a href="util_dateConvert.js.html#line43">line 43</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the formatted date string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="dateToYyyyMmDdHhMmSs"><span class="type-signature"></span>dateToYyyyMmDdHhMmSs<span class="signature">(dte)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Given a date return a string in the format YYYY-mm-dd hh:MM:SS
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dte</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Date</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">to convert</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_dateConvert.js.html">util/dateConvert.js</a>, <a href="util_dateConvert.js.html#line24">line 24</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the formatted date string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="definedAndNotNull"><span class="type-signature"></span>definedAndNotNull<span class="signature">(input)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    check if the input is defined and not null
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>input</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input pointer</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_checkDefined.js.html">util/checkDefined.js</a>, <a href="util_checkDefined.js.html#line26">line 26</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true defined and not null
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="defineLegend"><span class="type-signature"></span>defineLegend<span class="signature">(itsIcon<span class="signature-attributes">opt</span>, itsLineStyle<span class="signature-attributes">opt</span>, itsIconConfig<span class="signature-attributes">opt</span>, itsLineConfig<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">A single line style
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>color</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the line color as rgb or hex</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>width</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5
-                
-                </td>
-            
-
-            <td class="description last">the line width</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIconConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">The icon subtype configuration
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default icon to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>iconArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, img]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">The property used to define icon attribute symbolization
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Other
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultColor</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    red
-                
-                </td>
-            
-
-            <td class="description last">The default line color to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultWidth</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5
-                
-                </td>
-            
-
-            <td class="description last">The default line width to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>lineArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, color, optional width]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerItsInventory.js.html">layers/LayerItsInventory.js</a>, <a href="layers_LayerItsInventory.js.html#line180">line 180</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    html to be added to the legend
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="defineStyle"><span class="type-signature"></span>defineStyle<span class="signature">(itsIcon<span class="signature-attributes">opt</span>, itsLineStyle<span class="signature-attributes">opt</span>, itsIconConfig<span class="signature-attributes">opt</span>, itsLineConfig<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {*}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineStyle</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">A single line style
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>color</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the line color as rgb or hex</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>width</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5
-                
-                </td>
-            
-
-            <td class="description last">the line width</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsIconConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">The icon subtype configuration
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultIcon</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The default icon to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>iconArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, img]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>itsLineConfig</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">The property used to define icon attribute symbolization
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>prop</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">The property used to define icon attribute symbolization</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    Other
-                
-                </td>
-            
-
-            <td class="description last">The default name to be used if no other match is found</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultColor</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    red
-                
-                </td>
-            
-
-            <td class="description last">The default line color to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>defaultWidth</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5
-                
-                </td>
-            
-
-            <td class="description last">The default line width to be used for no other matches</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>lineArray</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    []
-                
-                </td>
-            
-
-            <td class="description last">an array, items with format [property, name, color, optional width]</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerItsInventory.js.html">layers/LayerItsInventory.js</a>, <a href="layers_LayerItsInventory.js.html#line85">line 85</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    undefined, style, or style function
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="fitToMap"><span class="type-signature"></span>fitToMap<span class="signature">(layers, mp, zoomOut<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    given one or an array of layers, fit to the map
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>layers</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">Array.&lt;<a href="LayerBaseVector.html">LayerBaseVector</a>></span>
-|
-
-<span class="param-type">Array.&lt;ol.layer.Vector></span>
-|
-
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-|
-
-<span class="param-type">ol.layer.Vector</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">array of layers or single</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mp</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">the map to fit</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomOut</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-|
-
-<span class="param-type">undefined</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">levels to zoom out after fit</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_extentUtil.js.html">olHelpers/extentUtil.js</a>, <a href="olHelpers_extentUtil.js.html#line63">line 63</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="getUrlParams"><span class="type-signature"></span>getUrlParams<span class="signature">()</span><span class="type-signature"> &rarr; {object}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_getUrlParams.js.html">util/getUrlParams.js</a>, <a href="util_getUrlParams.js.html#line11">line 11</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    object representation of url params
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">object</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="hexAlphaToRgbOrRgba"><span class="type-signature"></span>hexAlphaToRgbOrRgba<span class="signature">(hexString, alphaVal<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Convert hex string to RGB or RGBA string
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>hexString</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">hex color string</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>alphaVal</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">Alpha value</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line41">line 41</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    - rgb or rgba color
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="htmlEscape"><span class="type-signature"></span>htmlEscape<span class="signature">(str)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    escape html charcters
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>str</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input string</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line33">line 33</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    escaped string
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="keyValPairs"><span class="type-signature"></span>keyValPairs<span class="signature">(obj)</span><span class="type-signature"> &rarr; {Array.&lt;<a href="global.html#keyValuePair">keyValuePair</a>>}</span></h4>
-
-    
-
-
-
-<div class="description">
-    iterate over the key value pairs of an object
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>obj</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the input object</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_objectHelpers.js.html">util/objectHelpers.js</a>, <a href="util_objectHelpers.js.html#line20">line 20</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    - array of key value pairs
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">Array.&lt;<a href="global.html#keyValuePair">keyValuePair</a>></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="makeBlueGreenRedGradient"><span class="type-signature"></span>makeBlueGreenRedGradient<span class="signature">(minVal, maxVal, flipColors)</span><span class="type-signature"> &rarr; {<a href="global.html#colorLookupByNumber">colorLookupByNumber</a>}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Make a blue green red gradient
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minVal</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minimum value</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxVal</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maximum value</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>flipColors</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if the colors should be flipped</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line88">line 88</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    color lookup function
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type"><a href="global.html#colorLookupByNumber">colorLookupByNumber</a></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="makeBlueGreenRedGradientZScore"><span class="type-signature"></span>makeBlueGreenRedGradientZScore<span class="signature">(median, stdDev, flipColors)</span><span class="type-signature"> &rarr; {<a href="global.html#colorLookupByNumber">colorLookupByNumber</a>}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Create a function that will return colors based on a gradient
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>median</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">median value</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>stdDev</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">standard deviation</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>flipColors</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">if the colors should be flipped</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line159">line 159</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    color lookup function
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type"><a href="global.html#colorLookupByNumber">colorLookupByNumber</a></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="makeFeatureServiceLegendAndSymbol"><span class="type-signature"></span>makeFeatureServiceLegendAndSymbol<span class="signature">(esriResponse)</span><span class="type-signature"> &rarr; {<a href="global.html#styleAndLegend">styleAndLegend</a>}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>esriResponse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer info</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line270">line 270</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    style and legend object
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type"><a href="global.html#styleAndLegend">styleAndLegend</a></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="makeGuid"><span class="type-signature"></span>makeGuid<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    guids are used to uniquely identify groups and features
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_makeGuid.js.html">util/makeGuid.js</a>, <a href="util_makeGuid.js.html#line13">line 13</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    a new guid
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="makeMapServiceLegend"><span class="type-signature"></span>makeMapServiceLegend<span class="signature">(esriResponse)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    make map service legent
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>esriResponse</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">layer info</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line360">line 360</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    legend content
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="mapServiceLegendItem"><span class="type-signature"></span>mapServiceLegendItem<span class="signature">(lyrObject, iconsOnly<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyrObject</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">the layer as defined in the response</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>iconsOnly</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">use only icons</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line327">line 327</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    legend html
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="overflowScroll"><span class="type-signature"></span>overflowScroll<span class="signature">($table, $tableContainer, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>$table</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">jquery reference to table</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>$tableContainer</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">jquery reference to table</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">float options</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery_floatthead.js.html">jquery/floatthead.js</a>, <a href="jquery_floatthead.js.html#line28">line 28</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="processLessFile"><span class="type-signature"></span>processLessFile<span class="signature">(inputFile, outputFile)</span><span class="type-signature"> &rarr; {*}</span></h4>
-
-    
-
-
-
-<div class="description">
-    convert less file
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>inputFile</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input less file</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>outputFile</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">output css file</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="gulp-helpers.js.html">gulp-helpers.js</a>, <a href="gulp-helpers.js.html#line127">line 127</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    stream
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="propertiesZoomStyle"><span class="type-signature"></span>propertiesZoomStyle<span class="signature">(styleFunc)</span><span class="type-signature"> &rarr; {function|*}</span></h4>
-
-    
-
-
-
-<div class="description">
-    wrapper to define a style function by properties and zoom level
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>styleFunc</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></span>
-|
-
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">style function</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_propertiesZoomStyle.js.html">olHelpers/propertiesZoomStyle.js</a>, <a href="olHelpers_propertiesZoomStyle.js.html#line22">line 22</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    new function
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">function</span>
-|
-
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="provide"><span class="type-signature"></span>provide<span class="signature">(namespace)</span><span class="type-signature"> &rarr; {object}</span></h4>
-
-    
-
-
-
-<div class="description">
-    create a namespace on the gv object
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>namespace</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">to create</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_provide.js.html">util/provide.js</a>, <a href="util_provide.js.html#line11">line 11</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    object representing the namespace
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">object</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="quickMap"><span class="type-signature"></span>quickMap<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {ol.Map}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Sets up a map with some default parameters and initializes
mapMove and mapPopup
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">config options
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>divId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    map
-                
-                </td>
-            
-
-            <td class="description last">map div id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>center</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">center config object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>x</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    -10018378
-                
-                </td>
-            
-
-            <td class="description last">center x, web mercator x or lon</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>y</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5574910
-                
-                </td>
-            
-
-            <td class="description last">center y, web mercator y or lat</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    7
-                
-                </td>
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>baseSwitcher</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>fullScreen</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_quickMap.js.html">olHelpers/quickMap.js</a>, <a href="olHelpers_quickMap.js.html#line27">line 27</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the ol map
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">ol.Map</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="quickMapBase"><span class="type-signature"></span>quickMapBase<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {ol.Map}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Sets up a map with some default parameters and initializes
mapMove and mapPopup
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">config options
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>divId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    map
-                
-                </td>
-            
-
-            <td class="description last">map div id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>center</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">center config object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>x</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    -10018378
-                
-                </td>
-            
-
-            <td class="description last">center x, web mercator x or lon</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>y</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5574910
-                
-                </td>
-            
-
-            <td class="description last">center y, web mercator y or lat</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    7
-                
-                </td>
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>baseSwitcher</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>fullScreen</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_quickMapBase.js.html">olHelpers/quickMapBase.js</a>, <a href="olHelpers_quickMapBase.js.html#line27">line 27</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the ol map
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">ol.Map</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="quickMapMulti"><span class="type-signature"></span>quickMapMulti<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {<a href="global.html#quickMapMultiReturn">quickMapMultiReturn</a>}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Sets up a map with some default parameters and initializes
mapMove and mapPopup
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">config options
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>divId</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    map
-                
-                </td>
-            
-
-            <td class="description last">map div id</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>center</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">center config object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>x</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    -10018378
-                
-                </td>
-            
-
-            <td class="description last">center x, web mercator x or lon</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>y</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    5574910
-                
-                </td>
-            
-
-            <td class="description last">center y, web mercator y or lat</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    7
-                
-                </td>
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">min zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxZoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">max zoom</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>baseSwitcher</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    true
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>fullScreen</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">boolean</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    false
-                
-                </td>
-            
-
-            <td class="description last">if add base map switcher</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_quickMapMulti.js.html">olHelpers/quickMapMulti.js</a>, <a href="olHelpers_quickMapMulti.js.html#line35">line 35</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    return map, map move, and map popup objects
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type"><a href="global.html#quickMapMultiReturn">quickMapMultiReturn</a></span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="resolutionToZoom"><span class="type-signature"></span>resolutionToZoom<span class="signature">(resolution)</span><span class="type-signature"> &rarr; {number|*}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get resolution from the zoom level
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>resolution</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the resolution</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_zoomResolutionConvert.js.html">olHelpers/zoomResolutionConvert.js</a>, <a href="olHelpers_zoomResolutionConvert.js.html#line68">line 68</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the zoom level
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="responsiveScroll"><span class="type-signature"></span>responsiveScroll<span class="signature">($table, $responsiveContainer, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>$table</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">jquery reference to table</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>$responsiveContainer</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">jquery reference to table</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">float options</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery_floatthead.js.html">jquery/floatthead.js</a>, <a href="jquery_floatthead.js.html#line45">line 45</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="rgb2hex"><span class="type-signature"></span>rgb2hex<span class="signature">(rgb)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    converts an RGB string to hex
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>rgb</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">rgb color</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line26">line 26</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    rbg as hex
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="rgbToRgba"><span class="type-signature"></span>rgbToRgba<span class="signature">(rgb, alpha)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>rgb</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">rgb color</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>alpha</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">alpha value 0 to 1</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line62">line 62</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    rgba color
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="triggerCallback"><span class="type-signature"></span>triggerCallback<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Created by gavorhes on 11/2/2015.
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery-plugin_range-change.js.html">jquery-plugin/range-change.js</a>, <a href="jquery-plugin_range-change.js.html#line16">line 16</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="undefinedOrNull"><span class="type-signature"></span>undefinedOrNull<span class="signature">(input)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
-
-    
-
-
-
-<div class="description">
-    check if the input is undefined or null
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>input</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">*</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">input pointer</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_checkDefined.js.html">util/checkDefined.js</a>, <a href="util_checkDefined.js.html#line12">line 12</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    true undefined or null
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">boolean</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="windowScroll"><span class="type-signature"></span>windowScroll<span class="signature">($table, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    implement the default window scroll
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-        <th>Default</th>
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>$table</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                </td>
-            
-
-            <td class="description last">jquery reference to table</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>options</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-                <td class="default">
-                
-                    {}
-                
-                </td>
-            
-
-            <td class="description last">float options</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery_floatthead.js.html">jquery/floatthead.js</a>, <a href="jquery_floatthead.js.html#line15">line 15</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        
-            
-
-    
-
-    <h4 class="name" id="zoomToResolution"><span class="type-signature"></span>zoomToResolution<span class="signature">(zoomLevel)</span><span class="type-signature"> &rarr; {number|*}</span></h4>
-
-    
-
-
-
-<div class="description">
-    Get the resolution given the zoom level
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_zoomResolutionConvert.js.html">olHelpers/zoomResolutionConvert.js</a>, <a href="olHelpers_zoomResolutionConvert.js.html#line45">line 45</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the map resolution
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">number</span>
-|
-
-<span class="param-type">*</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-        
-    
-
-    
-        <h3 class="subsection-title">Type Definitions</h3>
-
-        
-                
-
-    
-
-    <h4 class="name" id="colorLookupByNumber"><span class="type-signature"></span>colorLookupByNumber<span class="signature">(num)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>num</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the number to use to retrieve the color</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_colors.js.html">util/colors.js</a>, <a href="util_colors.js.html#line74">line 74</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    rgb color
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-            
-                
-<h4 class="name" id="dirNameFilePath">dirNameFilePath</h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-    <h5 class="subsection-title">Properties:</h5>
-
-    
-
-<table class="props">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>dirName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">directory name</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>fileName</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">file name</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="gulp-helpers.js.html">gulp-helpers.js</a>, <a href="gulp-helpers.js.html#line22">line 22</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-            
-                
-<h4 class="name" id="keyValuePair">keyValuePair</h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-    <h5 class="subsection-title">Properties:</h5>
-
-    
-
-<table class="props">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>key</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>value</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="util_objectHelpers.js.html">util/objectHelpers.js</a>, <a href="util_objectHelpers.js.html#line8">line 8</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="makeGetParams"><span class="type-signature"></span>makeGetParams<span class="signature">(extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback to generate the parameters passed in the get request
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerItsInventory.js.html">layers/LayerItsInventory.js</a>, <a href="layers_LayerItsInventory.js.html#line307">line 307</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="mapMoveCallbackFunction"><span class="type-signature"></span>mapMoveCallbackFunction<span class="signature">(extent, zoomLevel, evtType<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    This callback is displayed as a global member.
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-        <th>Attributes</th>
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">extent object
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">minY</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxX</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">maxY</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">zoom level</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evtType</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-                <td class="attributes">
-                
-                    &lt;optional><br>
-                
-
-                
-
-                
-                </td>
-            
-
-            
-
-            <td class="description last">undefined for initial load, otherwise one of 'change:center', 'change:resolution'</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapMoveCls.js.html">olHelpers/mapMoveCls.js</a>, <a href="olHelpers_mapMoveCls.js.html#line232">line 232</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="mapMoveMakeGetParams"><span class="type-signature"></span>mapMoveMakeGetParams<span class="signature">(lyr, extent, zoomLevel)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    The make mapMoveGetParams function takes the extent and the zoom level
context is 'this' object, probably want to do something with this.mapMoveParams
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>lyr</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="LayerBaseVector.html">LayerBaseVector</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>extent</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">
-                <h6>Properties</h6>
-                
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>minX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>minY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxX</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>maxY</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-            </td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoomLevel</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="layers_LayerBaseVector.js.html">layers/LayerBaseVector.js</a>, <a href="layers_LayerBaseVector.js.html#line8">line 8</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="mediaCallback"><span class="type-signature"></span>mediaCallback<span class="signature">(tm)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>tm</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery-plugin_animate-buttons.js.html">jquery-plugin/animate-buttons.js</a>, <a href="jquery-plugin_animate-buttons.js.html#line14">line 14</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="olStyleFunction"><span class="type-signature"></span>olStyleFunction<span class="signature">()</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Definition for openlayers style function
-</div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line49">line 49</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="popupCallback"><span class="type-signature"></span>popupCallback<span class="signature">(featureProperties, jqRef)</span><span class="type-signature"> &rarr; {string}</span></h4>
-
-    
-
-
-
-<div class="description">
-    The popup callback function
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>featureProperties</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the feature properties</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>jqRef</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">jQuery</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">reference to the div content to do some async stuff inside the div</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line409">line 409</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h5>Returns:</h5>
-
-        
-<div class="param-desc">
-    the html content to be added to the popup
-</div>
-
-
-
-<dl>
-    <dt>
-        Type
-    </dt>
-    <dd>
-        
-<span class="param-type">string</span>
-
-
-    </dd>
-</dl>
-
-    
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="popupChangedFunction"><span class="type-signature"></span>popupChangedFunction<span class="signature">($popContent)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    Definition for popup changed callback functions
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>$popContent</code></td>
-            
-
-            <td class="type">
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">jquery reference to the popup content</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_mapPopupCls.js.html">olHelpers/mapPopupCls.js</a>, <a href="olHelpers_mapPopupCls.js.html#line56">line 56</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="propertiesZoomStyle"><span class="type-signature"></span>propertiesZoomStyle<span class="signature">(properties, zoom)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    A style function based on properties and zoom level, wraps normal feature, resolution function
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>properties</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">the feature properties</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>zoom</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">level</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_propertiesZoomStyle.js.html">olHelpers/propertiesZoomStyle.js</a>, <a href="olHelpers_propertiesZoomStyle.js.html#line9">line 9</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-<h4 class="name" id="quickMapMultiReturn">quickMapMultiReturn</h4>
-
-
-
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-    <h5 class="subsection-title">Properties:</h5>
-
-    
-
-<table class="props">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>map</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Map</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">The X Coordinate</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapMove</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapMoveCls.html">MapMoveCls</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">The Y Coordinate</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>mapPopup</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="MapPopupCls.html">MapPopupCls</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">The Y Coordinate</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_quickMapMulti.js.html">olHelpers/quickMapMulti.js</a>, <a href="olHelpers_quickMapMulti.js.html#line12">line 12</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="rangeChangeCallback"><span class="type-signature"></span>rangeChangeCallback<span class="signature">(newValue, ratio, evt)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    callback on range change interaction, context of this is the firing dom element
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>newValue</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>ratio</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">value from 0 to 1 relative of the value to the min and max</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>evt</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">object</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last"></td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="jquery-plugin_range-change.js.html">jquery-plugin/range-change.js</a>, <a href="jquery-plugin_range-change.js.html#line37">line 37</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-                
-<h4 class="name" id="styleAndLegend">styleAndLegend</h4>
-
-
-
-
-<div class="description">
-    style and legend object
-</div>
-
-
-
-    <h5>Type:</h5>
-    <ul>
-        <li>
-            
-<span class="param-type">object</span>
-
-
-        </li>
-    </ul>
-
-
-
-
-
-    <h5 class="subsection-title">Properties:</h5>
-
-    
-
-<table class="props">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>style</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type"><a href="global.html#styleFunc">styleFunc</a></span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">style function</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>legend</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">string</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">legend content</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line258">line 258</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-            
-                
-
-    
-
-    <h4 class="name" id="styleFunc"><span class="type-signature"></span>styleFunc<span class="signature">(feat, resolution)</span><span class="type-signature"></span></h4>
-
-    
-
-
-
-<div class="description">
-    This callback is displayed as part of the Requester class.
-</div>
-
-
-
-
-
-
-
-
-
-    <h5>Parameters:</h5>
-    
-
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
-
-        <th>Type</th>
-
-        
-
-        
-
-        <th class="last">Description</th>
-    </tr>
-    </thead>
-
-    <tbody>
-    
-
-        <tr>
-            
-                <td class="name"><code>feat</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">ol.Feature</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">openlayers feature</td>
-        </tr>
-
-    
-
-        <tr>
-            
-                <td class="name"><code>resolution</code></td>
-            
-
-            <td class="type">
-            
-                
-<span class="param-type">number</span>
-
-
-            
-            </td>
-
-            
-
-            
-
-            <td class="description last">map resolution</td>
-        </tr>
-
-    
-    </tbody>
-</table>
-
-
-
-
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-        <a href="olHelpers_esriToOlStyle.js.html">olHelpers/esriToOlStyle.js</a>, <a href="olHelpers_esriToOlStyle.js.html#line8">line 8</a>
-    </li></ul></dd>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-            
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/doc/gulp-helpers.js.html b/doc/gulp-helpers.js.html
deleted file mode 100644
index 745af72..0000000
--- a/doc/gulp-helpers.js.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: gulp-helpers.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: gulp-helpers.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 5/10/2016.
- * Helpers functions for gulp tasks
- */
-
-const gulp = require('gulp');
-const babel = require('gulp-babel');
-const babelify = require('babelify');
-const browserify = require('browserify');
-const buffer = require('vinyl-buffer');
-const source = require('vinyl-source-stream');
-const sourcemaps = require('gulp-sourcemaps');
-const minify = require('gulp-minify');
-const less = require('gulp-less');
-const cssmin = require('gulp-cssmin');
-const rename = require('gulp-rename');
-const glob = require('glob');
-const watchify = require('watchify');
-const gulpUtil = require('gulp-util');
-
-
-/**
- * @typedef {object} dirNameFilePath
- * @property {string} dirName - directory name
- * @property {string} fileName - file name
- */
-
-/**
- * get directory and file name from output path
- * @param {string} outputFile - output file path
- * @returns {dirNameFilePath} file directory and path
- * @private
- */
-function _processOutDir(outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    return {dirName: outDir, fileName: outFileName};
-}
-
-/**
- *
- * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
- * @param {dirNameFilePath|string} outFile - output file as string or path object
- * @param {boolean} [production=false] if production, minify and don't watch
- * @returns {*} the stream
- * @private
- */
-export function bundleEs2015(inputFile, outFile, production) {
-    "use strict";
-
-
-
-    if (typeof outFile == 'string') {
-        outFile = _processOutDir(outFile);
-    }
-
-    production = typeof production == 'boolean' ? production : false;
-
-    if (inputFile.indexOf('*') > -1) {
-        inputFile = glob.sync(inputFile);
-    }
-
-
-    let bundler = browserify({
-        entries: inputFile,
-        cache: {},
-        packageCache: {},
-        debug: true
-    });
-
-    
-    bundler.transform(babelify.configure({
-        presets: ["es2015"],
-        ignore: /ol\-build\.js|jquery\.min/
-        // ignore: /ol\-build\.js|jquery\.min|\/node_modules\/(?!webmapsjs\/)|\/node_modules\/webmapsjs\/(?!lib\/)/
-    }));
-
-    if (!production) {
-        bundler = watchify(bundler);
-    }
-
-
-    function runBundle() {
-        console.log(inputFile);
-        let stream = bundler.bundle()
-            .on('error', function (err) {
-                console.error(err);
-            })
-            .pipe(source(outFile.fileName))
-            .pipe(buffer())
-            .pipe(sourcemaps.init({loadMaps: true}));
-
-        if (production) {
-            stream = stream.pipe(minify({
-                ext: {
-                    src: '-debug.js',
-                    min: '.js'
-                },
-                exclude: ['tasks'],
-                ignoreFiles: ['.combo.js', '-min.js']
-            }));
-        }
-
-        return stream.pipe(sourcemaps.write('./')).pipe(gulp.dest(outFile.dirName));
-    }
-
-    if (!production) {
-        bundler.on('update', runBundle);
-        bundler.on('log', gulpUtil.log);
-    }
-
-    return runBundle();
-}
-
-
-/**
- * convert less file
- * @param {string} inputFile - input less file
- * @param {string} outputFile - output css file
- * @returns {*} stream
- */
-export function processLessFile(inputFile, outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    let fileNameParts = outFileName.split('.');
-
-    return gulp.src(inputFile)
-        .pipe(less().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(cssmin().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(rename({
-            basename: fileNameParts[0],
-            extname: '.' + fileNameParts[1],
-            suffix: '.min'
-        }))
-        .pipe(gulp.dest(outDir));
-}
-
-/**
- * make multiple bundles
- * @param {Array&lt;Array&lt;string>>} fileArray - array with elements [input file, output file]
- * @param {boolean} production - if is production
- * @returns {*} output stream
- */
-export function bundleEs2015Multiple(fileArray, production) {
-    "use strict";
-
-    let outStream = undefined;
-
-    for (let f of fileArray) {
-        outStream = bundleEs2015(f[0], f[1], production);
-    }
-
-    return outStream;
-}
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/index.html b/doc/index.html
index 2d798ce..c91aa98 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1,65 +1,114 @@
 <!DOCTYPE html>
-<html lang="en">
+<html>
 <head>
-    <meta charset="utf-8">
-    <title>JSDoc: Home</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+  <meta charset="utf-8">
+  <base data-ice="baseUrl">
+  <title data-ice="title">API Document</title>
+  <link type="text/css" rel="stylesheet" href="css/style.css">
+  <link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
+  <script src="script/prettify/prettify.js"></script>
+  
+  
+  <script src="script/manual.js"></script>
 </head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Home</h1>
-
-    
-
-
-
-    
-
-
-    <h3> </h3>
-
-
-
-
-
-
-
-
-
-
+<body class="layout-container" data-ice="rootContainer">
+
+<header>
+  <a href="./">Home</a>
+  
+  <a href="identifiers.html">Reference</a>
+  <a href="source.html">Source</a>
+  
+  <a data-ice="repoURL" href="https://github.com/glennvorhes/webmapsjs.git" class="repo-url-github">Repository</a>
+  <div class="search-box">
+  <span>
+    <img src="./image/search.png">
+    <span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
+  </span>
+    <ul class="search-result"></ul>
+  </div>
+</header>
+
+<nav class="navigation" data-ice="nav"><div>
+  <ul>
     
-
-
-
-
-
-
-
-
-
+  <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-bundleEs2015Multiple">bundleEs2015Multiple</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-processLessFile">processLessFile</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-dirNameFilePath">dirNameFilePath</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">collections</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collections/ItsLayerCollection.js~ItsLayerCollection.html">ItsLayerCollection</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collections/LayerLegend.js~LayerLegend.html">LayerLegend</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collections/Sliders.js~Sliders.html">Sliders</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">domUtil</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/domUtil/SelectBoxBase.js~SelectBoxBase.html">SelectBoxBase</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">jquery</div><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-overflowScroll">overflowScroll</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-responsiveScroll">responsiveScroll</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-windowScroll">windowScroll</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-jQuery">jQuery</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">jquery-plugin</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/jquery-plugin/day-range.js~DayRange.html">DayRange</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">layers</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerBase.js~LayerBase.html">LayerBase</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerBaseVector.js~LayerBaseVector.html">LayerBaseVector</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerBaseVectorEsri.js~LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerBaseVectorGeoJson.js~LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerBaseXyzTile.js~LayerBaseXyzTile.html">LayerBaseXyzTile</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerEsriMapServer.js~LayerEsriMapServer.html">LayerEsriMapServer</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerEsriTile.js~LayerEsriTile.html">LayerEsriTile</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerItsInventory.js~LayerItsInventory.html">LayerItsInventory</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerRealEarthTile.js~LayerRealEarthTile.html">LayerRealEarthTile</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/layers/LayerRealEarthVector.js~LayerVectorRealEarth.html">LayerVectorRealEarth</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">mixin</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/mixin/RealEarthAnimate.js~RealEarthAnimate.html">RealEarthAnimate</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/mixin/RealEarthAnimateTile.js~RealEarthAnimateTile.html">RealEarthAnimateTile</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/mixin/RealEarthAnimateVector.js~RealEarthAnimateVector.html">RealEarthAnimateVector</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">ol</div><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-ol">ol</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">olHelpers</div><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/olHelpers/SortedFeatures.js~SortedFeatures.html">SortedFeatures</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/olHelpers/layerSwipe.js~LayerSwipe.html">LayerSwipe</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/olHelpers/mapInteractionBase.js~MapInteractionBase.html">MapInteractionBase</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/olHelpers/mapMoveCls.js~MapMoveCls.html">MapMoveCls</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/olHelpers/mapPopupCls.js~MapPopupCls.html">MapPopupCls</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-makeMapServiceLegend">makeMapServiceLegend</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-calculateExtent">calculateExtent</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-fitToMap">fitToMap</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-propertiesZoomStyle">propertiesZoomStyle</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-quickMap">quickMap</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-quickMapBase">quickMapBase</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-quickMapMulti">quickMapMulti</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-resolutionToZoom">resolutionToZoom</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-zoomToResolution">zoomToResolution</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-styleAndLegend">styleAndLegend</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-quickMapMultiReturn">quickMapMultiReturn</a></span></span></li>
+<li data-ice="doc"><div data-ice="dirPath" class="nav-dir-path">util</div><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-definedAndNotNull">definedAndNotNull</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-undefinedOrNull">undefinedOrNull</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-rgb2hex">rgb2hex</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-rgbToRgba">rgbToRgba</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getUrlParams">getUrlParams</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-makeGuid">makeGuid</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-keyValPairs">keyValPairs</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-provide">provide</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-colorLookupByNumber">colorLookupByNumber</a></span></span></li>
+<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-keyValuePair">keyValuePair</a></span></span></li>
+</ul>
 </div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
 </nav>
 
-<br class="clear">
+<div class="content" data-ice="content"><div data-ice="index" class="github-markdown"><h1 id="webmapsjs">webmapsjs</h1>
+<p>Openlayers helpers</p>
+</div>
+</div>
 
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
+<footer class="footer">
+  Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(0.4.8)</span></a>
 </footer>
 
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
+<script src="script/search_index.js"></script>
+<script src="script/search.js"></script>
+<script src="script/pretty-print.js"></script>
+<script src="script/inherited-summary.js"></script>
+<script src="script/test-summary.js"></script>
+<script src="script/inner-link.js"></script>
+<script src="script/patch-for-local.js"></script>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/doc/jquery-plugin_animate-buttons.js.html b/doc/jquery-plugin_animate-buttons.js.html
deleted file mode 100644
index f6e3510..0000000
--- a/doc/jquery-plugin_animate-buttons.js.html
+++ /dev/null
@@ -1,287 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: jquery-plugin/animate-buttons.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: jquery-plugin/animate-buttons.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-import $ from '../jquery/jquery';
-import provide from '../util/provide';
-import {} from './range-change';
-
-
-let nm = provide('jQueryPlugin');
-
-/**
- * @callback mediaCallback
- * @param {number} tm
- */
-
-function timeToLocalDateString(tm) {
-    "use strict";
-    let d = new Date(tm);
-    let p1 = d.toLocaleTimeString().split(' ');
-    let p2 = p1[0].split(':');
-    p2 = p2.slice(0, 2);
-
-    return d.toLocaleDateString() + '&lt;br>' + p2.join(':') + ' ' + p1[1];
-}
-
-
-class MediaControl {
-    constructor(jQueryElement, min, max, val, step, func, playInterval, dateFormat) {
-
-        this._container = jQueryElement;
-        this._playInterval = playInterval;
-        this._interval = undefined;
-        this._func = func;
-
-        this._dateFormat = dateFormat;
-
-        this._currentValue = undefined;
-        this._min = undefined;
-        this._max = undefined;
-        this._step = undefined;
-        this._playing = false;
-
-        let htmlStr =
-            '&lt;span class="media-player-button media-back">&lt;/span>' +
-            '&lt;span class="media-player-button media-play">&lt;/span>' +
-            '&lt;span class="media-player-button media-pause media-disabled">&lt;/span>' +
-            '&lt;span class="media-player-button media-stop media-disabled" >&lt;/span>' +
-            '&lt;span class="media-player-button media-ahead">&lt;/span>' +
-            `&lt;input type="range">` +
-            `&lt;div class="media-control-value-label-container">` +
-            `&lt;span class="media-control-value-label-min">&lt;/span>` +
-            `&lt;span class="media-control-value-label-val">&lt;/span>` +
-            `&lt;span class="media-control-value-label-max">&lt;/span>` +
-            `&lt;/div>`;
-
-        this._container.append(htmlStr);
-
-        let btnPause = this._container.find('.media-pause');
-        let btnPlay = this._container.find('.media-play');
-        this._$btnStop = this._container.find('.media-stop');
-        let btnAhead = this._container.find('.media-ahead');
-        let btnBack = this._container.find('.media-back');
-        this._$slider = this._container.find('input[type=range]');
-
-        this._$valLabelMin = this._container.find('.media-control-value-label-min');
-        this._$valLabelVal = this._container.find('.media-control-value-label-val');
-        this._$valLabelMax = this._container.find('.media-control-value-label-max');
-
-        this.setMinMaxValueStep(min, max, val, step);
-
-
-        let _this = this;
-
-        this._$slider.rangeChange(function (newVal, ratio, evt) {
-            _this.currentValue = newVal;
-        }, 100);
-
-        btnPlay.click(function () {
-            let $this = $(this);
-            $this.addClass('media-disabled');
-            _this._$btnStop.removeClass('media-disabled');
-            btnAhead.addClass('media-locked');
-            btnBack.addClass('media-locked');
-            _this._$slider.prop('disabled', true);
-            _this._playing = true;
-
-            _this._interval = setInterval(function () {
-                _this.currentValue += _this._step;
-            }, _this._playInterval);
-        });
-
-        this._$btnStop.click(function () {
-            clearInterval(_this._interval);
-            let $this = $(this);
-            $this.addClass('media-disabled');
-            btnPlay.removeClass('media-disabled');
-            btnAhead.removeClass('media-locked');
-            btnBack.removeClass('media-locked');
-            _this._$slider.prop('disabled', false);
-            _this._playing = false;
-        });
-
-        btnAhead.click(function () {
-            _this.currentValue = _this.currentValue + _this._step;
-        });
-
-        btnBack.click(function () {
-            _this.currentValue = _this.currentValue - _this._step;
-        });
-    }
-
-    stopPlaying(){
-        if (this._playing){
-            this._$btnStop.trigger('click');
-        }
-    }
-
-    get playing(){
-        return this._playing;
-    }
-
-    get min() {
-        return this._min;
-    }
-
-    get max() {
-        return this._max;
-    }
-
-    get step() {
-        return this._step;
-    }
-
-    get currentValue() {
-        return this._currentValue;
-    }
-
-    set currentValue(newValue) {
-        if (newValue > this._max) {
-            newValue = this._min;
-        } else if (newValue &lt; this._min) {
-            newValue = this._max;
-        }
-        this._currentValue = newValue;
-        this._$slider.val(this._currentValue.toFixed(2));
-
-        if (this._dateFormat) {
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-        } else {
-            this._$valLabelVal.html(this.currentValue.toString());
-        }
-
-        this._func(newValue);
-    }
-
-    /**
-     * set min and max value with step
-     * @param {number} newMin the new min
-     * @param {number} newMax the new mas
-     * @param {number} [newValue=newMin] the value to set
-     * @param {number} [newStep=(newMax-newMin)/20] step value
-     */
-    setMinMaxValueStep(newMin, newMax, newValue, newStep) {
-        this._min = newMin;
-        this._max = newMax;
-
-        newValue = typeof newValue == 'number' ? newValue : newMin;
-        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;
-
-        this._currentValue = newValue;
-        this._step = newStep;
-
-        this._$slider.prop('min', this.min.toString());
-        this._$slider.prop('max', this.max.toString());
-        this._$slider.prop('step', this.step.toString());
-        this._$slider.val(this.currentValue.toString());
-
-        if (this._dateFormat) {
-            this._$valLabelMin.html(timeToLocalDateString(this._min));
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            this._$valLabelMax.html(timeToLocalDateString(this._max));
-        } else {
-            this._$valLabelMin.html(this._min.toString());
-            this._$valLabelVal.html(this.currentValue.toString());
-            this._$valLabelMax.html(this._max.toString());
-        }
-    }
-
-    /**
-     *
-     * @param {mediaCallback} newFunc the callback on change
-     */
-    set changeFunction(newFunc) {
-        this._func = newFunc;
-    }
-}
-
-nm.MediaControl = MediaControl;
-
-
-/**
- * Adds a media control to a container
- * @param {number} [min=0] the min
- * @param {number} [max=100] the max
- * @param {number} [val=0] the val
- * @param {number} [step=1] the step
- * @param {mediaCallback} [func=function (n) {console.log('default function', n);}] media change callback function
- * @param {number} [playInterval=500] play interval
- * @param {boolean} [dateFormat=false] date format
- * @this {jQuery}
- * @returns {MediaControl} the Media control object
- */
-$.fn.mediaControl = function (min, max, val, step, func, playInterval, dateFormat) {
-
-    min = typeof min == 'number' ? min : 0;
-    max = typeof max == 'number' ? max : 100;
-    val = typeof val == 'number' ? val : 0;
-    step = typeof step == 'number' ? step : 1;
-    func = typeof func == 'function' ? func : function (n) {
-        console.log('default function', n);
-    };
-
-    playInterval = typeof playInterval == 'number' ? playInterval : 500;
-    dateFormat = typeof dateFormat == 'boolean' ? dateFormat : false;
-
-    this.addClass('media-control-container');
-
-    return new MediaControl(this, min, max, val, step, func, playInterval, dateFormat);
-};
-
-
-
-export default undefined;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/jquery-plugin_day-range.js.html b/doc/jquery-plugin_day-range.js.html
deleted file mode 100644
index d8fabe2..0000000
--- a/doc/jquery-plugin_day-range.js.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: jquery-plugin/day-range.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: jquery-plugin/day-range.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>import $ from '../jquery/jquery';
-import '../jquery/jquery-ui';
-import provide from '../util/provide';
-let nm = provide('jQueryPlugin');
-
-
-
-class DayRange {
-
-    /**
-     * constructor for the date range
-     * @param {number} dayRange number of days
-     * @param {jQuery} jQueryRef reference to the jquery element
-     */
-    constructor(dayRange, jQueryRef) {
-        this._workingDayRange = dayRange - 1;
-
-        let pickerHtml = '&lt;label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date&lt;/label>' +
-            '&lt;input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
-            '&lt;br>&lt;label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date&lt;/label>' +
-            '&lt;input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
-
-        jQueryRef.append(pickerHtml);
-
-        this._$startDate = $('#start-date');
-        this._$endDate = $('#end-date');
-
-        this._$startDate.datepicker();
-        this._$endDate.datepicker();
-
-        this._startDate = null;
-        this._endDate = null;
-
-        let dte1 = new Date();
-        dte1.setHours(0, 0, 0, 0);
-        let dte2 = new Date(dte1.getTime());
-        dte2.setDate(dte2.getDate() + dayRange);
-        dte2.setHours(23, 59, 59, 0);
-        this._maxDateRange = dte2 - dte1;
-
-        let _this = this;
-
-        //add event listeners
-        this._$startDate.change(function () {
-            _this.startDate = this.value;
-        });
-
-        this._$endDate.change(function () {
-            _this.endDate = this.value;
-        });
-
-        // initialize
-        this.endDate = (new Date()).getTime();
-    }
-
-    get startDate() {
-        return this._startDate;
-    }
-
-    set startDate(val) {
-        this._startDate = new Date(val);
-        this._startDate.setHours(0, 0, 0, 0);
-        this._$startDate.val(this._startDate.toLocaleDateString());
-
-        if (this.endDate == null || this._endDate - this._startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() &lt; 24 * 60 * 60 * 1000) {
-            let tmpDate = new Date(this._startDate.getTime());
-            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
-            this.endDate = tmpDate.getTime();
-        }
-    }
-
-    get endDate() {
-        return this._endDate;
-    }
-
-
-    set endDate(val) {
-        this._endDate = new Date(val);
-        this._endDate.setHours(23, 59, 59, 0);
-        this._$endDate.val(this._endDate.toLocaleDateString());
-        if (this._startDate == null || this._endDate - this.startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() &lt; 24 * 60 * 60 * 1000) {
-            let tmpDate = new Date(this._endDate.getTime());
-            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
-            this.startDate = tmpDate.getTime();
-        }
-    }
-}
-
-nm.DayRange = DayRange;
-let jQuery = $;
-
-/**
- * Adds day range control
- * @param {number} dayRange the number of days
- * @returns {DayRange} the day range object
- */
-jQuery.fn.dayRange = function (dayRange) {
-    return new DayRange(dayRange, this);
-};
-
-export default undefined;
-
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/jquery-plugin_range-change.js.html b/doc/jquery-plugin_range-change.js.html
deleted file mode 100644
index 91f248d..0000000
--- a/doc/jquery-plugin_range-change.js.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: jquery-plugin/range-change.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: jquery-plugin/range-change.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>
-
-import $ from '../jquery/jquery';
-let mouseIn = false;
-let mouseDown = false;
-let timeout = null;
-let dragged = false;
-let lastVal;
-
-
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-function triggerCallback(callback, evt) {
-    "use strict";
-
-    let val = parseFloat(this.value);
-    let min = parseFloat(this.min);
-    let max = parseFloat(this.max);
-    let step = parseFloat(this.step);
-
-    if (max - val &lt; step){
-        val = max;
-    }
-
-    let percent =  (val - min) / (max - min);
-
-    if (typeof lastVal == 'number' &amp;&amp; val ==  lastVal){
-        return;
-    }
-    lastVal = val;
-    callback(val, percent, evt);
-}
-
-/**
- * callback on range change interaction, context of this is the firing dom element
- * @callback rangeChangeCallback
- * @param {number} newValue
- * @param {number} ratio value from 0 to 1 relative of the value to the min and max
- * @param {object} evt
- */
-
-/**
- * Add a variety of listeners for range inputs applied to a common callback
- * @param {rangeChangeCallback} callback - the callback
- * @param {number} [changeTimeout=75] before the callback is called
- * @this {jQuery}
- * @returns {jQuery} the jQuery object
- */
-$.fn.rangeChange = function (callback, changeTimeout) {
-
-    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;
-
-    this.mouseenter(function () {
-        mouseIn = true;
-    });
-
-    this.mouseleave(function () {
-        mouseIn = false;
-        mouseDown = false;
-    });
-
-    this.mousedown(function () {
-        mouseDown = true;
-    });
-
-    this.mouseup(function () {
-        mouseDown = false;
-    });
-
-    this.mousemove(
-        /**
-         *
-         * @param {object} evt - event properties
-         * @this {HTMLElement}
-         */
-        function (evt) {
-        if (!(mouseIn &amp;&amp; mouseDown)) {
-            return;
-        }
-
-        dragged = true;
-
-        if (lastVal == this['value']) {
-            return;
-        }
-        lastVal = this['value'];
-
-        if (timeout != null) {
-            clearTimeout(timeout);
-        }
-
-        let _this = this;
-
-        timeout = setTimeout(function () {
-            triggerCallback.call(_this, callback, evt);
-            timeout = null;
-
-        }, changeTimeout);
-    });
-
-    this.keyup(
-        /**
-         *
-         * @param {object} evt - event properties
-         */
-        function (evt) {
-        if (evt.keyCode == 37 || evt.keyCode == 39) {
-            triggerCallback.call(this, callback, evt);
-        }
-    });
-
-    this.change(function (evt) {
-        if (dragged) {
-            dragged = false;
-
-            return;
-        }
-        triggerCallback.call(this, callback, evt);
-    });
-
-    return this;
-};
-
-export default undefined;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/jquery_floatthead.js.html b/doc/jquery_floatthead.js.html
deleted file mode 100644
index 1b85bed..0000000
--- a/doc/jquery_floatthead.js.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: jquery/floatthead.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: jquery/floatthead.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 6/22/2016.
- */
-const $ = require('jquery');
-global.jQuery = $;
-
-require('floatthead');
-
-
-/**
- * implement the default window scroll
- * @param {jQuery} $table - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function windowScroll($table, options){
-    "use strict";
-    options = options || {};
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $tableContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function overflowScroll($table, $tableContainer, options){
-    "use strict";
-    options = options || {};
-
-    options.scrollContainer = (t) => {
-        return $tableContainer;
-    };
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $responsiveContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function responsiveScroll($table, $responsiveContainer, options){
-    "use strict";
-    options = options || {};
-
-    options.responsiveContainer = (t) => {
-        return $responsiveContainer;
-    };
-
-    $table.floatThead(options);
-}
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerBaseVector.js.html b/doc/layers_LayerBaseVector.js.html
deleted file mode 100644
index 4c26c2d..0000000
--- a/doc/layers_LayerBaseVector.js.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerBaseVector.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerBaseVector.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import mapMove from '../olHelpers/mapMove';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * The make mapMoveGetParams function takes the extent and the zoom level
- * context is 'this' object, probably want to do something with this.mapMoveParams
- * @callback mapMoveMakeGetParams
- * @param {LayerBaseVector} lyr
- * @param {object} extent
- * @param {number} extent.minX
- * @param {number} extent.minY
- * @param {number} extent.maxX
- * @param {number} extent.maxY
- * @param {number} zoomLevel
- */
-
-
-/**
- * The Vector layer base
- * @augments LayerBase
- * @abstract
- */
-class LayerBaseVector extends LayerBase {
-
-    /**
-     * The base vector layer
-     * @param {string} url - pass an empty string to prevent default load and add from a json source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     */
-    constructor(url, options) {
-        super(url, options);
-
-        //prevent regular load if no url has been provided
-        if (this.url.trim() == '') {
-            this._loaded = true;
-        }
-
-        this._style = typeof options.style == 'undefined' ? undefined : options.style;
-
-        if (this.visible) {
-            this._autoLoad = true;
-        } else {
-            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
-        }
-
-        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
-
-        if (options.mapMoveObj){
-            this._mapMove = options.mapMoveObj;
-        } else {
-            this._mapMove = this._onDemand ? mapMove : undefined;
-        }
-
-        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
-            function(lyr, extent, zoomLevel){
-                return {};
-            };
-
-        if (this._onDemand) {
-            this._loaded = true;
-            this._mapMoveParams = {};
-            this._mapMove.checkInit();
-            this._mapMove.addVectorLayer(this);
-        }
-
-        this._source = new ol.source.Vector();
-
-        /**
-         *
-         * @type {ol.layer.Vector|ol.layer.Base}
-         */
-        this._olLayer = new ol.layer.Vector(
-            {
-                source: this._source,
-                visible: this.visible,
-                style: this.style,
-                minResolution: this._minResolution,
-                maxResolution: this._maxResolution,
-                zIndex: this._zIndex
-            }
-        );
-    }
-
-    /**
-     * dummy to be overridden
-     * @param {object} featureCollection - geojson or esrijson object
-     */
-    addFeatures(featureCollection) {
-        console.log('Layer vector base addFeatures is a placeholder and does nothing');
-    }
-
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    mapMoveBefore(zoom, evtType) {
-        if (this.minZoom !== undefined) {
-            if (zoom &lt; this.minZoom) {
-                return false;
-            }
-        }
-
-        if (this.maxZoom !== undefined) {
-            if (zoom > this.maxZoom) {
-                return false;
-            }
-        }
-
-        return this.visible;
-    }
-
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    mapMoveMakeGetParams(extent, zoomLevel) {
-        this._mapMoveParams = {};
-        $.extend(this._mapMoveParams, this.params);
-        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-    }
-
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    mapMoveCallback(d) {
-        if (this.source) {
-            this._source.clear();
-        }
-    }
-
-    /**
-     * clear features in the layer
-     */
-    clear() {
-        if (this._source) {
-            this._source.clear();
-        }
-    }
-
-    /**
-     * get on demand delay in miliseconds
-     * @type {number|*}
-     */
-    get onDemandDelay() {
-        return this._onDemandDelay;
-    }
-
-    /**
-     * get if the layer is autoloaded
-     * @type {boolean}
-     */
-    get autoLoad() {
-        return this._autoLoad;
-    }
-
-    /**
-     * get the style definition
-     * @type {ol.Style|styleFunc}
-     */
-    get style() {
-        return this._style;
-    }
-
-    /**
-     * set the style
-     * @param {ol.Style|styleFunc} style - the style or function
-     */
-    set style(style) {
-        this._style = style;
-        this.olLayer.setStyle(this._style);
-    }
-
-    /**
-     * get the map CRS if it is defined by the map move object
-     * @type {string|*}
-     */
-    get mapCrs() {
-        if (this._mapMove) {
-            return this._mapMove.map.getView().getProjection().getCode();
-        } else {
-            return undefined;
-        }
-    }
-
-    /**
-     * get the map move object
-     * @type {MapMoveCls|*}
-     */
-    get mapMove() {
-        return this._mapMove;
-    }
-
-    /**
-     * map move params
-     * @type {object}
-     */
-    get mapMoveParams() {
-        return this._mapMoveParams;
-    }
-
-        /**
-     * Get the layer visibility
-     * @type {boolean}
-     */
-    get visible() {
-        return super.visible;
-    }
-
-    /**
-     * Set the layer visibility
-     * @type {boolean}
-     * @override
-     */
-    set visible(visibility) {
-        super.visible = visibility;
-
-        if (this._onDemand) {
-            this.mapMove.triggerLyrLoad(this);
-        }
-    }
-
-    /**
-     * get the layer vector source
-     * @override
-     * @type {ol.source.Vector}
-     */
-    get source(){
-        return super.source;
-    }
-
-    /**
-     * array of ol features
-     * @type {Array.&lt;ol.Feature>}
-     */
-    get features(){
-        return this.source.getFeatures();
-    }
-
-    /**
-     * 
-     * @returns {ol.layer|Vector|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer(){
-        return super.olLayer;
-    }
-}
-
-nm.LayerBaseVector = LayerBaseVector;
-export default LayerBaseVector;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerBaseVectorGeoJson.js.html b/doc/layers_LayerBaseVectorGeoJson.js.html
deleted file mode 100644
index 5d8fdeb..0000000
--- a/doc/layers_LayerBaseVectorGeoJson.js.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerBaseVectorGeoJson.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerBaseVectorGeoJson.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/2/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseVector from './LayerBaseVector';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-let nm = provide('layers');
-
-/**
- * The Vector GeoJson Layer
- * @augments LayerBaseVector
- */
-class LayerBaseVectorGeoJson extends LayerBaseVector {
-
-    /**
-     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     */
-    constructor(url, options) {
-        url = typeof url == 'string' ? url : '';
-        super(url, options);
-
-        this._geoJsonFormat = new ol.format.GeoJSON();
-
-        this._transform = options.transform || {};
-        this._transform.dataProjection = this._transform.dataProjection || "EPSG:4326";
-        this._transform.featureProjection = this._transform.featureProjection || "EPSG:3857";
-
-        if (this.autoLoad || this.visible) {
-            this._load();
-        }
-    }
-
-    /**
-     * add feature collection
-     * @param {object} featureCollection - as geojson object
-     */
-    addFeatures(featureCollection) {
-        if (this._transform.dataProjection == 'EPSG:3857' &amp;&amp; this._transform.featureProjection == 'EPSG:3857') {
-            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
-        } else {
-            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
-        }
-    }
-
-    /**
-     * trigger load features
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    _load() {
-
-        if (super._load()) {
-            return true;
-        }
-
-        $.get(this._url,
-            this._params,
-            (d) => {
-                this.addFeatures(d);
-                this.loadCallback(this);
-            }, 'json').fail(
-            function () {
-                this._loaded = false;
-            }
-        );
-
-        return false;
-    }
-
-    /**
-     * callback function on map move
-     * @param {object} d the json response
-     * @override
-     */
-    mapMoveCallback(d) {
-        super.mapMoveCallback(d);
-        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
-    }
-}
-
-nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-export default LayerBaseVectorGeoJson;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerBaseXyzTile.js.html b/doc/layers_LayerBaseXyzTile.js.html
deleted file mode 100644
index e4c2204..0000000
--- a/doc/layers_LayerBaseXyzTile.js.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerBaseXyzTile.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerBaseXyzTile.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/4/2015.
- */
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * XYZ tile
- * @augments LayerBase
- */
-class LayerBaseXyzTile extends LayerBase {
-
-    /**
-     * The XYZ tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-    constructor(url, options) {
-        super(url, options);
-        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});
-        this._olLayer = new ol.layer.Tile({
-            source: this._source,
-            visible: this.visible,
-            opacity: this.opacity,
-            minResolution: this._minResolution,
-            maxResolution: this._maxResolution,
-            zIndex: this._zIndex
-        });
-
-
-        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-
-        if (this._useEsriStyle) {
-            this.addLegendContent();
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    addLegendContent(additionalContent) {
-        if (!this._useEsriStyle) {
-            super.addLegendContent(additionalContent);
-        } else {
-            let urlCopy = this.url;
-
-            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
-            if (mapServerIndex > -1) {
-                urlCopy = urlCopy.slice(0, mapServerIndex + 9);
-            } else {
-                return;
-            }
-
-            if (urlCopy[urlCopy.length - 1] !== '/') {
-                urlCopy += '/';
-            }
-
-            urlCopy += 'legend?f=pjson&amp;callback=?';
-
-            let _this = this;
-            let superAddLegend = super.addLegendContent;
-
-            $.get(urlCopy, {}, function (d) {
-                let newHtml = esriToOl.makeMapServiceLegend(d);
-                superAddLegend.call(_this, newHtml);
-            }, 'json');
-        }
-    }
-
-    /**
-     *
-     * @returns {ol.source.XYZ} the vector source
-     */
-    get source() {
-        return super.source;
-    }
-
-    /**
-     *
-     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer() {
-        return super.olLayer;
-    }
-}
-
-nm.LayerBaseXyzTile = LayerBaseXyzTile;
-export default LayerBaseXyzTile;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerEsriMapServer.js.html b/doc/layers_LayerEsriMapServer.js.html
deleted file mode 100644
index 309c37a..0000000
--- a/doc/layers_LayerEsriMapServer.js.html
+++ /dev/null
@@ -1,214 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerEsriMapServer.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerEsriMapServer.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/7/2015.
- */
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
-import mapPopup from '../olHelpers/mapPopup';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-class LayerEsriMapServer extends LayerBase {
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array&lt;number>} [options.showLayers=undefined] if a popup should be added
-     */
-    constructor(url, options) {
-        super(url, options);
-        this._source = new ol.source.TileArcGISRest(
-            {
-                url: this.url == '' ? undefined : this.url,
-                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}
-            }
-        );
-
-        this._olLayer = new ol.layer.Tile({
-            source: this._source,
-            visible: this.visible,
-            opacity: this.opacity,
-            minResolution: this._minResolution,
-            maxResolution: this._maxResolution,
-            zIndex: this._zIndex
-        });
-
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-
-        this._esriFormat = new ol.format.EsriJSON();
-        this._popupRequest = null;
-
-        this.addLegendContent();
-
-        if (options.addPopup) {
-            mapPopup.addMapServicePopup(this);
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    addLegendContent(additionalContent) {
-        let urlCopy = this.url;
-
-        if (urlCopy[urlCopy.length - 1] !== '/') {
-            urlCopy += '/';
-        }
-
-        urlCopy += 'legend?f=pjson&amp;callback=?';
-
-        let _this = this;
-        let superAddLegend = super.addLegendContent;
-
-        $.get(urlCopy, {}, function (d) {
-            let newHtml = esriToOl.makeMapServiceLegend(d);
-            superAddLegend.call(_this, newHtml);
-        }, 'json');
-    }
-
-
-    getPopupInfo(queryParams) {
-        if (!this.visible) {
-            return;
-        }
-
-        let urlCopy = this.url;
-
-        if (urlCopy[urlCopy.length - 1] != '/') {
-            urlCopy += '/';
-        }
-
-        urlCopy += 'identify?callback=?';
-
-        let _this = this;
-
-        if (this._popupRequest != null) {
-            this._popupRequest.abort();
-        }
-
-        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (let r of d['results']) {
-
-                let popupHtml = '&lt;table class="esri-popup-table">';
-
-                for (let a in r['attributes']) {
-                    if (r['attributes'].hasOwnProperty(a)) {
-                        let attrVal = r['attributes'][a];
-
-                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                            continue;
-                        }
-
-                        let attr = a;
-                        if (attr.length > 14) {
-                            attr = attr.slice(0, 11) + '...';
-                        }
-
-                        popupHtml += `&lt;tr>&lt;td>${attr}&lt;/td>&lt;td>${attrVal}&lt;/td>&lt;/tr>`;
-                    }
-                }
-
-                popupHtml += '&lt;/table>';
-
-                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
-            }
-        }, 'json').always(function () {
-            _this._popupRequest = null;
-        });
-    }
-
-    /**
-     * overwrite the base load
-     * @protected
-     */
-    _load() {
-    }
-
-    /**
-     *
-     * @returns {ol.source.TileArcGISRest} the vector source
-     */
-    get source() {
-        return super.source;
-    }
-
-    /**
-     *
-     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer() {
-        return super.olLayer;
-    }
-}
-nm.LayerEsriMapServer = LayerEsriMapServer;
-export default LayerEsriMapServer;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerEsriTile.js.html b/doc/layers_LayerEsriTile.js.html
deleted file mode 100644
index 3745d0b..0000000
--- a/doc/layers_LayerEsriTile.js.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerEsriTile.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerEsriTile.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/4/2015.
- */
-import provide from '../util/provide';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
-
-const nm = provide('layers');
-
-
-/**
- * Esri tile
- * @augments LayerBaseXyzTile
- */
-class LayerEsriTile extends LayerBaseXyzTile {
-
-    /**
-     * The Esri tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-    
-    constructor(url, options) {
-        if (url.search(/\/$/) == -1){
-            url += '/';
-        }
-        url += 'tile/{z}/{y}/{x}';
-        
-        super(url, options);
-    }
-}
-
-nm.LayerBaseXyzTile = LayerEsriTile;
-export default LayerEsriTile;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerRealEarthTile.js.html b/doc/layers_LayerRealEarthTile.js.html
deleted file mode 100644
index 77e1db7..0000000
--- a/doc/layers_LayerRealEarthTile.js.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerRealEarthTile.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerRealEarthTile.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/4/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
-import RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';
-import provide from '../util/provide';
-const mixIns = require('es6-mixins');
-const nm = provide('layers');
-
-/**
- * Real earth tile
- * @augments LayerBaseXyzTile
- */
-class LayerRealEarthTile extends LayerBaseXyzTile {
-    /**
-     * The base layer for all others
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {string} options.products - the products to request
-     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-    constructor(options) {
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&amp;x={x}&amp;y={y}&amp;z={z}`, options);
-            this._products = options.products;
-        } else {
-            super('', options);
-            this._products = options.products;
-
-            if (!this.timeInit){
-                mixIns([RealEarthAnimateTile], this);
-            }
-            this.timeInit();
-        }
-    }
-}
-
-nm.LayerRealEarthTile = LayerRealEarthTile;
-export default LayerRealEarthTile;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/layers_LayerRealEarthVector.js.html b/doc/layers_LayerRealEarthVector.js.html
deleted file mode 100644
index e35aa76..0000000
--- a/doc/layers_LayerRealEarthVector.js.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerRealEarthVector.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerRealEarthVector.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/13/2015.
- */
-
-import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
-import RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';
-import provide from '../util/provide';
-const mixIns = require('es6-mixins');
-const nm = provide('layers');
-
-/**
- * Vector real earth vector
- * @augments LayerBaseVectorGeoJson
- */
-class LayerVectorRealEarth extends LayerBaseVectorGeoJson {
-    /**
-     * Real Earth vector layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     *
-     * @param {string} options.products real earth products identifier
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-    constructor(options) {
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            options.params = {products: options.products};
-            super('http://realearth.ssec.wisc.edu/api/shapes', options);
-        } else {
-            options.autoLoad = false;
-            super('', options);
-            this._products = options.products;
-            if (!this.timeInit) {
-                mixIns([RealEarthAnimateVector], this);
-            }
-            this.timeInit();
-        }
-    }
-}
-
-nm.LayerVectorRealEarth = LayerVectorRealEarth;
-export default LayerVectorRealEarth;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/mixin_RealEarthAnimate.js.html b/doc/mixin_RealEarthAnimate.js.html
deleted file mode 100644
index 1f6f08f..0000000
--- a/doc/mixin_RealEarthAnimate.js.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: mixin/RealEarthAnimate.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: mixin/RealEarthAnimate.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/4/2015.
- */
-import provide from '../util/provide';
-import mapPopup from '../olHelpers/mapPopup';
-import $ from '../jquery/jquery';
-const nm = provide('mixin');
-
-
-/**
- * The GMT offset time in minutes
- * @type {number}
- */
-let offsetMinutes = (new Date()).getTimezoneOffset();
-
-/**
- * Mixin to get the product times
- * Be sure to call getTimeInit after the mixin has been applied
- */
-class RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load(){};
-
-    /**
-     * Call this after the mixin has been applied
-     */
-    timeInit() {
-        if (!this._products) {
-            throw 'this mixin must be applied to one of the RealEarth layer objects with this.products defined';
-        }
-
-        this._rawDateStrings = [];
-        this._localDates = [];
-        this.localTimes = [];
-        this._animateEnabled = true;
-        this._loaded = true;
-        this._currentTime = undefined;
-        this._currentIndex = undefined;
-
-        let _this = this;
-
-        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, function (d) {
-            if (d.length == 0) {
-                console.log(`${this._products} layer not available or does not have times`);
-
-                return;
-            }
-            d = d[0];
-            for (let i = 0; i &lt; d['times'].length; i++) {
-                _this._loadDates.call(_this, d['times'][i]);
-            }
-            _this.loadCallback.call(_this);
-            _this._loadLatest.call(_this);
-        }, 'json');
-    }
-
-
-    /**
-     *
-     * @returns {boolean} if animation enabled
-     */
-    get animationEnabled(){
-        return this._animateEnabled;
-    }
-
-    /**
-     * Given the raw time string, add to the arrays to keep track of dates and cache
-     * @param {string} inString - input string to parse
-     * @returns {string} the converted string
-     * @protected
-     */
-    _loadDates(inString) {
-        let yr = inString.slice(0, 4);
-        let month = inString.slice(4, 6);
-        let d = inString.slice(6, 8);
-        let hr = inString.slice(9, 11);
-        let mn = inString.slice(11, 13);
-        let sec = inString.slice(13, 15);
-
-        let rawDateStr = inString.replace('.', '_');
-        this._rawDateStrings.push(rawDateStr);
-
-        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;
-        let newDte = new Date(dteStr);
-        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
-        this._localDates.push(newDte);
-        this.localTimes.push(newDte.getTime());
-
-        return rawDateStr;
-    }
-
-    /**
-     *
-     * @protected
-     * @returns {boolean} if should continue
-     */
-    _loadLatest(){
-        mapPopup.closePopup();
-        if (this.localTimes.length > 0){
-            this._currentIndex = this.localTimes.length -1;
-
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     *
-     * @param {number} theTime - the time
-     * @returns {boolean} true if new index, false if the same or below lowest value
-     */
-    setLayerTime(theTime){
-        if (!this.visible){
-            return false;
-        }
-
-        this._currentTime = theTime;
-
-        let newIndex;
-
-        if (theTime &lt; this.localTimes[0]){
-            return false;
-        } else if (theTime > this.localTimes[this.localTimes.length - 1]){
-            newIndex = this.localTimes.length - 1;
-        }
-
-        for (let i = 0; i &lt; this.localTimes.length; i++){
-            if (this.localTimes[i] >= theTime){
-                newIndex = i;
-                break;
-            }
-        }
-
-        if (newIndex == this._currentIndex){
-            return false;
-        } else {
-            this._currentIndex = newIndex;
-            mapPopup.closePopup();
-
-            return true;
-        }
-    }
-}
-
-nm.RealEarthAnimate = RealEarthAnimate;
-export default RealEarthAnimate;
-
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/mixin_RealEarthAnimateTile.js.html b/doc/mixin_RealEarthAnimateTile.js.html
deleted file mode 100644
index ba069c8..0000000
--- a/doc/mixin_RealEarthAnimateTile.js.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: mixin/RealEarthAnimateTile.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: mixin/RealEarthAnimateTile.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/4/2015.
- */
-import RealEarthAnimate from './RealEarthAnimate';
-import provide from '../util/provide';
-const nm = provide('mixin');
-
-/**
- * Animate real earth tile
- * @augments RealEarthAnimate
- */
-class RealEarthAnimateTile extends RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load() {
-        super.load();
-    };
-
-
-    timeInit() {
-        super.timeInit();
-        this._sourceUrls = [];
-    }
-
-    _loadDates(inString) {
-        let rawDte = super._loadDates(inString);
-        let dteProductUrl =
-            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&amp;x={x}&amp;y={y}&amp;z={z}`;
-        this._sourceUrls.push(dteProductUrl);
-    }
-
-    /**
-     * @protected
-     */
-    _loadLatest() {
-        if (super._loadLatest()){
-            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
-        }
-    }
-
-    setLayerTime(theTime) {
-        if (super.setLayerTime(theTime)) {
-            if (this.olLayer.getZIndex() &lt; 0){
-                this.olLayer.setZIndex(0);
-            }
-            this._source.setUrl(this._sourceUrls[this._currentIndex]);
-        } else {
-            this.olLayer.setZIndex(-1);
-        }
-    }
-}
-
-nm.RealEarthAnimateTile = RealEarthAnimateTile;
-export default RealEarthAnimateTile;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/mixin_RealEarthAnimateVector.js.html b/doc/mixin_RealEarthAnimateVector.js.html
deleted file mode 100644
index 8d35988..0000000
--- a/doc/mixin_RealEarthAnimateVector.js.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: mixin/RealEarthAnimateVector.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: mixin/RealEarthAnimateVector.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/4/2015.
- */
-import RealEarthAnimate from './RealEarthAnimate';
-import provide from '../util/provide';
-const nm = provide('mixin');
-const $ = require('jquery');
-
-
-/**
- * class mixin to animate RealEarth vector layers
- * @augments RealEarthAnimate
- */
-class RealEarthAnimateVector extends RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load() {
-        super.load();
-    };
-
-    /**
-     * Call this after the mixin has been applied
-     */
-    timeInit() {
-        super.timeInit();
-        this._rawTimesLookup = {};
-        this._dataCache = [];
-    }
-
-    /**
-     * Given the raw time string, add to the arrays to keep track of dates and cache
-     * @param {string} inString - input date string
-     * @protected
-     */
-    _loadDates(inString) {
-        let rawDte = super._loadDates(inString);
-        this._dataCache.push(null);
-        this._rawTimesLookup[rawDte] = null;
-    }
-
-    /**
-     * @protected
-     */
-    _loadLatest() {
-        if(super._loadLatest()){
-            this._loadAtTimeIndex.call(this, this._currentIndex);
-        }
-    }
-    //
-    //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&amp;x=1&amp;y=5&amp;z=4
-    //
-    //    20160108.205500
-    //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&amp;x=34&amp;y=46&amp;z=7
-
-    /**
-     * Load the features at the date index specified
-     * @param {number} i the index of the features to be loaded by date
-     * @param {boolean} [setAsSource=true] set to false to trigger cache load only
-     * @private
-     */
-    _loadAtTimeIndex(i, setAsSource) {
-        setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
-        if (this._dataCache[i] != null) {
-            this.source.clear();
-            this._loadFeatures(this._dataCache[i]);
-        } else {
-            let _this = this;
-            $.get('http://realearth.ssec.wisc.edu:80/api/shapes',
-                {products: `${this._products}_${this._rawDateStrings[i]}`},
-                function (d) {
-                    _this._dataCache[i] = d;
-                    _this._rawTimesLookup[_this._rawDateStrings[i]] = d;
-                    if (setAsSource) {
-                        _this.source.clear();
-                        _this._loadFeatures.call(_this, _this._dataCache[i]);
-                    }
-                }, 'json'
-            );
-        }
-    }
-
-    /**
-     * helper to load the features at the index specified
-     * @param {object} geojObj - the geojson object
-     * @private
-     */
-    _loadFeatures(geojObj) {
-        this.source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
-    }
-
-    setLayerTime(theTime) {
-        if (super.setLayerTime(theTime)){
-            this._loadAtTimeIndex(this._currentIndex);
-        } else {
-            this.source.clear();
-        }
-    }
-}
-
-nm.RealEarthAnimateVector = RealEarthAnimateVector;
-export default RealEarthAnimateVector;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_SortedFeatures.js.html b/doc/olHelpers_SortedFeatures.js.html
deleted file mode 100644
index 3bde7f6..0000000
--- a/doc/olHelpers_SortedFeatures.js.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/SortedFeatures.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/SortedFeatures.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/23/2015.
- */
-import provide from '../util/provide';
-let nm = provide('olHelpers');
-
-/**
- * take an array of features and sort by a given property name
- */
-class SortedFeatures {
-
-    /**
-     *
-     * @param {Array&lt;ol.Feature>} features array of ol features
-     * @param {string} propertyName - the property name to use for lookup
-     */
-    constructor(features, propertyName) {
-        this.sortedFeatures = features;
-        this.propertyName = propertyName;
-
-        if (this.sortedFeatures.length > 0) {
-            this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
-
-            let _this = this;
-            this.sortedFeatures.sort(function (a, b) {
-                if (_this._propertyType == 'number'){
-                    return (a['getProperties']()[_this.propertyName] - b['getProperties']()[_this.propertyName]);
-                } else if (_this._propertyType == 'string'){
-                    return (a['getProperties']()[_this.propertyName] > b['getProperties']()[_this.propertyName]);
-                }
-            });
-        }
-    }
-
-    /**
-     * recursive search to find the value
-     * @param {number|string} propertyValue - the property value to search for
-     * @param {boolean} [exactMatch=false] if only an exact match should be returned
-     * @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
-     * @returns {ol.Feature|undefined} the feature matching the lookup
-     */
-    getFeature(propertyValue, exactMatch, sortedFeatures) {
-        if (typeof sortedFeatures == 'undefined'){
-            sortedFeatures = this.sortedFeatures;
-        }
-
-        if (typeof exactMatch !== 'boolean'){
-            exactMatch = false;
-        }
-
-        if (sortedFeatures.length == 0){
-            return undefined;
-        }
-
-        if (sortedFeatures.length == 1){
-            if (exactMatch){
-                if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue){
-                    return sortedFeatures[0];
-                } else {
-                    return undefined;
-                }
-            } else {
-                return sortedFeatures[0];
-            }
-        }
-
-        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];
-        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
-
-        if (exactMatch){
-            if (lowProp == propertyValue){
-                return sortedFeatures[0];
-            } else if (propertyValue &lt; lowProp){
-                return undefined;
-            } else if (highProp == propertyValue){
-                return sortedFeatures[sortedFeatures.length - 1];
-            } else if (propertyValue >  highProp){
-                return undefined;
-            }
-        } else {
-            if (propertyValue &lt;= lowProp){
-                return sortedFeatures[0];
-            } else if (propertyValue >= highProp){
-                return sortedFeatures[sortedFeatures.length - 1];
-            }
-        }
-
-        let midIndex = Math.floor(sortedFeatures.length / 2);
-        let midFeature = sortedFeatures[midIndex];
-        let midProperty = midFeature.getProperties()[this.propertyName];
-
-        if (midProperty ===  propertyValue){
-            return midFeature;
-        }
-
-        if (propertyValue &lt; midProperty){
-            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));
-        } else {
-            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
-        }
-    }
-}
-
-nm.SortedFeatures = SortedFeatures;
-export default SortedFeatures;
-
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_layerSwipe.js.html b/doc/olHelpers_layerSwipe.js.html
deleted file mode 100644
index 2778724..0000000
--- a/doc/olHelpers_layerSwipe.js.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/layerSwipe.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/layerSwipe.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 6/1/2016.
- */
-
-
-import provide from '../util/provide';
-import $ from '../jquery/jquery';
-
-let nm = provide('collections.layerSwipe');
-
-
-class LayerSwipe {
-
-    /**
-     *
-     * @param {ol.Map} map - the map
-     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
-     */
-    constructor(map, sliderContent) {
-
-        sliderContent = sliderContent || '';
-        /**
-         *
-         * @type {Array&lt;LayerBase>}
-         */
-        this.leftLayers = [];
-
-        /**
-         *
-         * @type {Array&lt;LayerBase>}
-         */
-        this.rightLayers = [];
-
-        this._percentRight = 50;
-        this.offset = null;
-
-        this._map = map;
-        this.$mapElement = $(map.getTargetElement());
-        this.$mapElement.append(`&lt;div class="layer-swiper">${sliderContent}&lt;/div>`);
-
-
-        this.$swiper = this.$mapElement.find('.layer-swiper');
-        this.percentRight = this.percentRight;
-
-        this.dragging = false;
-
-        this.$mapElement.mouseleave(() => {
-            this.dragging = false;
-        });
-
-        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){
-            evt.preventDefault();
-        });
-
-        this.$swiper.mousedown((evt) => {
-            this.dragging = true;
-            this.offset = evt.offsetX;
-        });
-
-        $(window).mouseup(() => {
-            this.dragging = false;
-        });
-
-        this.$mapElement.mousemove((evt) => {
-            if (this.dragging) {
-                let mapLeft = this.$mapElement.position().left;
-                let mapWidth = this.$mapElement.width();
-
-                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;
-            }
-        });
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to left side
-     */
-    addLeftLayer(lyr) {
-
-        if (this.leftLayers.indexOf(lyr) != -1){
-            return;
-        }
-
-        lyr.olLayer.on('precompose', (event) => {
-            let ctx = event.context;
-            let width = ctx.canvas.width * (this.percentRight / 100);
-
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(0, 0, width, ctx.canvas.height);
-            ctx.clip();
-        });
-
-        lyr.olLayer.on('postcompose', function (event) {
-            let ctx = event.context;
-            ctx.restore();
-        });
-
-
-        this.leftLayers.push(lyr);
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to right side
-     */
-    addRightLayer(lyr) {
-
-        if (this.rightLayers.indexOf(lyr) != -1){
-            return;
-        }
-
-        lyr.olLayer.on('precompose', (event) => {
-            let ctx = event.context;
-            let width = ctx.canvas.width * (this.percentRight / 100);
-
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
-            ctx.clip();
-        });
-
-        lyr.olLayer.on('postcompose', function (event) {
-            let ctx = event.context;
-            ctx.restore();
-        });
-
-        this.rightLayers.push(lyr);
-    }
-
-    get percentRight() {
-        return this._percentRight;
-    }
-
-    set percentRight(pcnt) {
-        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
-
-        if (pcnt &lt; 0) {
-            return;
-        } else if (maxed &amp;&amp; pcnt > this.percentRight) {
-            return;
-        }
-
-        this._percentRight = pcnt;
-        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);
-        this._map.render();
-    }
-}
-
-nm.LayerSwipe = LayerSwipe;
-export default LayerSwipe;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_mapInteractionBase.js.html b/doc/olHelpers_mapInteractionBase.js.html
deleted file mode 100644
index 2c0b590..0000000
--- a/doc/olHelpers_mapInteractionBase.js.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/mapInteractionBase.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/mapInteractionBase.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/8/2015.
- */
-import provide from '../util/provide';
-const nm = provide('olHelpers');
-
-
-/**
- * base interaction
- */
-class MapInteractionBase {
-
-    /**
-     * map interaction base
-     * @param {string} subtype - the interaction subtype
-     */
-    constructor(subtype) {
-        this._map = undefined;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-
-    /**
-     * base initializer, returns true for already initialized
-     * @param {ol.Map} theMap - the ol Map
-     * @returns {boolean} true for already initialized
-     */
-    init(theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * get reference to the ol map object
-     * @returns {ol.Map} the map object
-     */
-    get map() {
-        return this._map;
-    }
-
-    /**
-     * get if is initialized
-     * @returns {boolean} is initialized
-     */
-    get initialized() {
-        return this._initialized;
-    }
-
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    _checkInit() {
-        if (!this.initialized) {
-            let msg = `${this._subtype} object not initialized`;
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    }
-
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    checkInit(){
-        this._checkInit();
-    }
-}
-nm.MapInteractionBase = MapInteractionBase;
-export default MapInteractionBase;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_mapMove.js.html b/doc/olHelpers_mapMove.js.html
deleted file mode 100644
index 50676e6..0000000
--- a/doc/olHelpers_mapMove.js.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/mapMove.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/mapMove.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import MapMoveCls from './mapMoveCls';
-
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-export default new MapMoveCls();
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_mapMoveCls.js.html b/doc/olHelpers_mapMoveCls.js.html
deleted file mode 100644
index bd0f076..0000000
--- a/doc/olHelpers_mapMoveCls.js.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/mapMoveCls.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/mapMoveCls.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/3/2015.
- */
-
-
-import $ from '../jquery/jquery';
-import MapInteractionBase from './mapInteractionBase';
-import * as checkDefined from '../util/checkDefined';
-import provide from '../util/provide';
-import makeGuid from '../util/makeGuid';
-const nm = provide('olHelpers');
-
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-class MapMoveCls extends MapInteractionBase {
-
-    /**
-     * constructor called implicitly
-     */
-    constructor() {
-        super('map move');
-        this._arrLyrRequest = [];
-        this._arrLyrTimeout = [];
-        this._arrLayer = [];
-        this._lookupLayer = {};
-
-        this._mapMoveCallbacks = [];
-        this._mapMoveCallbacksLookup = {};
-        this._mapMoveCallbackDelays = [];
-        this._mapMoveCallbackContext = [];
-        this._mapMoveCallbackTimeout = [];
-
-        this._mapExtent = undefined;
-        this._zoomLevel = undefined;
-    }
-
-    /**
-     * initialize the map move object
-     * @param {ol.Map} theMap - the ol map
-     */
-    init(theMap) {
-        if (super.init(theMap)) {
-            return;
-        }
-
-        let _this = this;
-
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-
-            _this._updateMapExtent();
-
-            // trigger the layer updates
-            for (let i = 0; i &lt; _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-
-            // trigger the map callbacks
-            for (let i = 0; i &lt; _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    }
-
-    _updateMapExtent() {
-        let theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-
-        let extentArray = theView.calculateExtent(this.map.getSize());
-
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    }
-
-    /**
-     * return the map extent
-     */
-    get mapExtent() {
-        if (!this._mapExtent) {
-            this._updateMapExtent();
-        }
-
-        return this._mapExtent;
-    }
-
-    /**
-     * Trigger the layer load
-     * @param {LayerBaseVector|*} lyr - the layer being acted on
-     * @param {number} [index=undefined] - index of the layer
-     * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    triggerLyrLoad(lyr, index, eventType) {
-
-        if (checkDefined.undefinedOrNull(lyr) &amp;&amp; checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        } else if (checkDefined.definedAndNotNull(lyr) &amp;&amp; checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        } else if (checkDefined.undefinedOrNull(lyr) &amp;&amp; checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null &amp;&amp; this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-
-        // dummy callback used if before load returns false
-        let callbackFunc = function () {};
-
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-
-            let _this = this;
-
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    let _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(
-                        theLayer.url,
-                        theLayer.mapMoveParams,
-                        function (d) {
-                            /**
-                             * @type {LayerBaseVector}
-                             */
-                            theLayer.mapMoveCallback(d);
-                            theLayer.loadCallback();
-                        }, 'json').fail(
-                        function (jqXHR) {
-                            if (jqXHR.statusText != 'abort') {
-                                console.log('failed');
-                                console.log(theLayer.url);
-                                console.log(theLayer.mapMoveParams);
-                            }
-                        }).always(
-                        function () {
-                            _innerThis._arrLyrTimeout[theIndex] = null;
-                            _innerThis._arrLyrRequest[theIndex] = null;
-                        });
-                }
-                innerFunction.call(_this, lyr, index);
-            };
-        } else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    }
-
-    /**
-     * trigger the map move call back at the given index
-     * @param {number} ind - the index of the layer
-     * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'
-     * @param {string} [functionId=undefined] the function id used to reference the added callback function
-     */
-    triggerMoveCallback(ind, eventType, functionId) {
-
-        if (typeof ind == 'undefined' &amp;&amp; typeof functionId == 'undefined'){
-            throw 'either the function index or the id must be defined';
-        }
-
-        if (typeof ind !== 'number'){
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-
-        if (ind &lt; 0){
-            console.log('function not found');
-
-            return;
-        }
-
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-
-        let ctx = this._mapMoveCallbackContext[ind];
-        let theFunc = this._mapMoveCallbacks[ind];
-
-        let _this = this;
-
-        let f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
-            } else {
-                theFunc(_this._mapExtent, _this._zoomLevel, eventType);
-            }
-        };
-
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    }
-
-    /**
-     * Add a layer to the interaction
-     * @param {LayerBaseVector|*} lyr - layer to add
-     * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add
-     */
-    addVectorLayer(lyr, triggerOnAdd) {
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-
-            return;
-        }
-        this._checkInit();
-
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    }
-
-    /**
-     * This callback is displayed as a global member.
-     * @callback mapMoveCallbackFunction
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     */
-
-    /**
-     * add a callback to the map move event
-     * @param {mapMoveCallbackFunction} func - callback function
-     * @param {*} context - the context to use for this function
-     * @param {number} [delay=50] the delay before call load
-     * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove
-     * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering
-     */
-    addCallback(func, context, delay, triggerOnAdd, functionId) {
-
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-
-            return;
-        }
-        this._checkInit();
-        if (!functionId){
-            functionId = makeGuid();
-        }
-
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = func;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    }
-}
-
-nm.MapMoveCls = MapMoveCls;
-export default MapMoveCls;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_mapPopup.js.html b/doc/olHelpers_mapPopup.js.html
deleted file mode 100644
index e7f2619..0000000
--- a/doc/olHelpers_mapPopup.js.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/mapPopup.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/mapPopup.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import MapPopupCls from './mapPopupCls';
-
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-export default new MapPopupCls();
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_propertiesZoomStyle.js.html b/doc/olHelpers_propertiesZoomStyle.js.html
deleted file mode 100644
index a48947e..0000000
--- a/doc/olHelpers_propertiesZoomStyle.js.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/propertiesZoomStyle.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/propertiesZoomStyle.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import provide from '../util/provide';
-import * as zoomResolutionConvert from './zoomResolutionConvert';
-const nm = provide('olHelpers');
-
-/**
- * A style function based on properties and zoom level, wraps normal feature, resolution function
- * @callback propertiesZoomStyle
- * @param {object} properties the feature properties
- * @param {number} zoom level
- *
- */
-
-/**
- * wrapper to define a style function by properties and zoom level
- * @param {propertiesZoomStyle|*} styleFunc - style function
- * @returns {function|*} new function
- */
-function propertiesZoomStyle(styleFunc) {
-    if (styleFunc == undefined){
-        return undefined;
-    }
-
-    return function (feature, resolution) {
-        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
-    };
-}
-
-nm.propertiesZoomStyle = propertiesZoomStyle;
-export default propertiesZoomStyle;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_quickMap.js.html b/doc/olHelpers_quickMap.js.html
deleted file mode 100644
index ade2673..0000000
--- a/doc/olHelpers_quickMap.js.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/quickMap.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/quickMap.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/15/2015.
- */
-
-import quickMapBase from './quickMapBase';
-import provide from '../util/provide';
-import mapMove from './mapMove';
-import mapPopup from './mapPopup';
-let nm = provide('olHelpers');
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    let m = quickMapBase(options);
-    mapMove.init(m);
-    mapPopup.init(m);
-
-    return m;
-}
-
-
-nm.quickMap = quickMap;
-export default quickMap;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_quickMapMulti.js.html b/doc/olHelpers_quickMapMulti.js.html
deleted file mode 100644
index b61d1b0..0000000
--- a/doc/olHelpers_quickMapMulti.js.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/quickMapMulti.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/quickMapMulti.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/15/2015.
- */
-
-import quickMapBase from './quickMapBase';
-import provide from '../util/provide';
-import MapMoveCls from './mapMoveCls';
-import MapPopupCls from './mapPopupCls';
-let nm = provide('olHelpers');
-
-
-/**
- * @typedef {object} quickMapMultiReturn
- * @property {ol.Map} map The X Coordinate
- * @property {MapMoveCls} mapMove The Y Coordinate
- * @property {MapPopupCls} mapPopup The Y Coordinate
- */
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {quickMapMultiReturn} return map, map move, and map popup objects
- */
-function quickMapMulti(options) {
-    let m = quickMapBase(options);
-    let mov = new MapMoveCls();
-    let pop = new MapPopupCls();
-    mov.init(m);
-    pop.init(m);
-
-    return {map: m, mapMove: mov, mapPopup: pop};
-}
-
-nm.quickMapMulti = quickMapMulti;
-export default quickMapMulti;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/olHelpers_zoomResolutionConvert.js.html b/doc/olHelpers_zoomResolutionConvert.js.html
deleted file mode 100644
index 6c4620d..0000000
--- a/doc/olHelpers_zoomResolutionConvert.js.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/zoomResolutionConvert.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/zoomResolutionConvert.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import provide from '../util/provide';
-const nm = provide('olHelpers.zoomResolutionConvert');
-
-let _zoomResLookup = [
-    156543.03392804097, //0
-    78271.51696402048, //1
-    39135.75848201024, //2
-    19567.87924100512, //3
-    9783.93962050256, //4
-    4891.96981025128, //5
-    2445.98490512564, //6
-    1222.99245256282, //7
-    611.49622628141, //8
-    305.748113140705, //9
-    152.8740565703525, //10
-    76.43702828517625, //11
-    38.21851414258813, //12
-    19.109257071294063, //13
-    9.554628535647032, //14
-    4.777314267823516, //15
-    2.388657133911758, //16
-    1.194328566955879, //17
-    0.5971642834779395, //18
-    0.29858214173896974, //19
-    0.14929107086948487, //20
-    0.07464553543474244, //21
-    0.03732276771737122, //22
-    0.01866138385868561, //23
-    0.009330691929342804, //24
-    0.004665345964671402, //25
-    0.002332672982335701, //26
-    0.0011663364911678506, //27
-    0.0005831682455839253 //28
-];
-
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-export function zoomToResolution(zoomLevel) {
-    "use strict";
-
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 &amp;&amp; zoomLevel >= 0 &amp;&amp; zoomLevel &lt;= 28) {
-            return _zoomResLookup[zoomLevel];
-        } else {
-            console.log(`invalid zoom level provided: ${zoomLevel}`);
-
-            return undefined;
-        }
-    } else {
-        return undefined;
-    }
-}
-nm.zoomToResolution = zoomToResolution;
-
-
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-export function resolutionToZoom(resolution){
-    for (let i = 0; i &lt; _zoomResLookup.length; i++){
-        if (resolution >= _zoomResLookup[i] ){
-            return i;
-        }
-    }
-
-    return 0;
-}
-
-nm.resolutionToZoom = resolutionToZoom;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/scripts/linenumber.js b/doc/scripts/linenumber.js
deleted file mode 100644
index 8d52f7e..0000000
--- a/doc/scripts/linenumber.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*global document */
-(function() {
-    var source = document.getElementsByClassName('prettyprint source linenums');
-    var i = 0;
-    var lineNumber = 0;
-    var lineId;
-    var lines;
-    var totalLines;
-    var anchorHash;
-
-    if (source && source[0]) {
-        anchorHash = document.location.hash.substring(1);
-        lines = source[0].getElementsByTagName('li');
-        totalLines = lines.length;
-
-        for (; i < totalLines; i++) {
-            lineNumber++;
-            lineId = 'line' + lineNumber;
-            lines[i].id = lineId;
-            if (lineId === anchorHash) {
-                lines[i].className += ' selected';
-            }
-        }
-    }
-})();
diff --git a/doc/scripts/prettify/Apache-License-2.0.txt b/doc/scripts/prettify/Apache-License-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/doc/scripts/prettify/Apache-License-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
diff --git a/doc/scripts/prettify/lang-css.js b/doc/scripts/prettify/lang-css.js
deleted file mode 100644
index 041e1f5..0000000
--- a/doc/scripts/prettify/lang-css.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n"]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com",
-/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);
diff --git a/doc/scripts/prettify/prettify.js b/doc/scripts/prettify/prettify.js
deleted file mode 100644
index eef5ad7..0000000
--- a/doc/scripts/prettify/prettify.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
-(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
-[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
-f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
-(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
-{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
-t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
-"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
-l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
-q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
-q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
-"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
-a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
-for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
-m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
-a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
-j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
-"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
-H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
-J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
-I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
-["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
-/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
-["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
-hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
-!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
-250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
-PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
diff --git a/doc/styles/jsdoc-default.css b/doc/styles/jsdoc-default.css
deleted file mode 100644
index 24aa20f..0000000
--- a/doc/styles/jsdoc-default.css
+++ /dev/null
@@ -1,353 +0,0 @@
-@font-face {
-    font-family: 'Open Sans';
-    font-weight: normal;
-    font-style: normal;
-    src: url('../fonts/OpenSans-Regular-webfont.eot');
-    src:
-        local('Open Sans'),
-        local('OpenSans'),
-        url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
-        url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
-        url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
-}
-
-@font-face {
-    font-family: 'Open Sans Light';
-    font-weight: normal;
-    font-style: normal;
-    src: url('../fonts/OpenSans-Light-webfont.eot');
-    src:
-        local('Open Sans Light'),
-        local('OpenSans Light'),
-        url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
-        url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
-        url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
-}
-
-html
-{
-    overflow: auto;
-    background-color: #fff;
-    font-size: 14px;
-}
-
-body
-{
-    font-family: 'Open Sans', sans-serif;
-    line-height: 1.5;
-    color: #4d4e53;
-    background-color: white;
-}
-
-a, a:visited, a:active {
-    color: #0095dd;
-    text-decoration: none;
-}
-
-a:hover {
-    text-decoration: underline;
-}
-
-header
-{
-    display: block;
-    padding: 0px 4px;
-}
-
-tt, code, kbd, samp {
-    font-family: Consolas, Monaco, 'Andale Mono', monospace;
-}
-
-.class-description {
-    font-size: 130%;
-    line-height: 140%;
-    margin-bottom: 1em;
-    margin-top: 1em;
-}
-
-.class-description:empty {
-    margin: 0;
-}
-
-#main {
-    float: left;
-    width: 70%;
-}
-
-article dl {
-    margin-bottom: 40px;
-}
-
-section
-{
-    display: block;
-    background-color: #fff;
-    padding: 12px 24px;
-    border-bottom: 1px solid #ccc;
-    margin-right: 30px;
-}
-
-.variation {
-    display: none;
-}
-
-.signature-attributes {
-    font-size: 60%;
-    color: #aaa;
-    font-style: italic;
-    font-weight: lighter;
-}
-
-nav
-{
-    display: block;
-    float: right;
-    margin-top: 28px;
-    width: 30%;
-    box-sizing: border-box;
-    border-left: 1px solid #ccc;
-    padding-left: 16px;
-}
-
-nav ul {
-    font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
-    font-size: 100%;
-    line-height: 17px;
-    padding: 0;
-    margin: 0;
-    list-style-type: none;
-}
-
-nav ul a, nav ul a:visited, nav ul a:active {
-    font-family: Consolas, Monaco, 'Andale Mono', monospace;
-    line-height: 18px;
-    color: #4D4E53;
-}
-
-nav h3 {
-    margin-top: 12px;
-}
-
-nav li {
-    margin-top: 6px;
-}
-
-footer {
-    display: block;
-    padding: 6px;
-    margin-top: 12px;
-    font-style: italic;
-    font-size: 90%;
-}
-
-h1, h2, h3, h4 {
-    font-weight: 200;
-    margin: 0;
-}
-
-h1
-{
-    font-family: 'Open Sans Light', sans-serif;
-    font-size: 48px;
-    letter-spacing: -2px;
-    margin: 12px 24px 20px;
-}
-
-h2, h3
-{
-    font-size: 30px;
-    font-weight: 700;
-    letter-spacing: -1px;
-    margin-bottom: 12px;
-}
-
-h4
-{
-    font-size: 18px;
-    letter-spacing: -0.33px;
-    margin-bottom: 12px;
-    color: #4d4e53;
-}
-
-h5, .container-overview .subsection-title
-{
-    font-size: 120%;
-    font-weight: bold;
-    letter-spacing: -0.01em;
-    margin: 8px 0 3px 0;
-}
-
-h6
-{
-    font-size: 100%;
-    letter-spacing: -0.01em;
-    margin: 6px 0 3px 0;
-    font-style: italic;
-}
-
-.ancestors { color: #999; }
-.ancestors a
-{
-    color: #999 !important;
-    text-decoration: none;
-}
-
-.clear
-{
-    clear: both;
-}
-
-.important
-{
-    font-weight: bold;
-    color: #950B02;
-}
-
-.yes-def {
-    text-indent: -1000px;
-}
-
-.type-signature {
-    color: #aaa;
-}
-
-.name, .signature {
-    font-family: Consolas, Monaco, 'Andale Mono', monospace;
-}
-
-.details { margin-top: 14px; border-left: 2px solid #DDD; }
-.details dt { width: 120px; float: left; padding-left: 10px;  padding-top: 6px; }
-.details dd { margin-left: 70px; }
-.details ul { margin: 0; }
-.details ul { list-style-type: none; }
-.details li { margin-left: 30px; padding-top: 6px; }
-.details pre.prettyprint { margin: 0 }
-.details .object-value { padding-top: 0; }
-
-.description {
-    margin-bottom: 1em;
-    margin-top: 1em;
-}
-
-.code-caption
-{
-    font-style: italic;
-    font-size: 107%;
-    margin: 0;
-}
-
-.prettyprint
-{
-    border: 1px solid #ddd;
-    width: 80%;
-    overflow: auto;
-}
-
-.prettyprint.source {
-    width: inherit;
-}
-
-.prettyprint code
-{
-    font-size: 100%;
-    line-height: 18px;
-    display: block;
-    padding: 4px 12px;
-    margin: 0;
-    background-color: #fff;
-    color: #4D4E53;
-}
-
-.prettyprint code span.line
-{
-  display: inline-block;
-}
-
-.prettyprint.linenums
-{
-  padding-left: 70px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-
-.prettyprint.linenums ol
-{
-  padding-left: 0;
-}
-
-.prettyprint.linenums li
-{
-  border-left: 3px #ddd solid;
-}
-
-.prettyprint.linenums li.selected,
-.prettyprint.linenums li.selected *
-{
-  background-color: lightyellow;
-}
-
-.prettyprint.linenums li *
-{
-  -webkit-user-select: text;
-  -moz-user-select: text;
-  -ms-user-select: text;
-  user-select: text;
-}
-
-.params, .props
-{
-    border-spacing: 0;
-    border: 0;
-    border-collapse: collapse;
-}
-
-.params .name, .props .name, .name code {
-    color: #4D4E53;
-    font-family: Consolas, Monaco, 'Andale Mono', monospace;
-    font-size: 100%;
-}
-
-.params td, .params th, .props td, .props th
-{
-    border: 1px solid #ddd;
-    margin: 0px;
-    text-align: left;
-    vertical-align: top;
-    padding: 4px 6px;
-    display: table-cell;
-}
-
-.params thead tr, .props thead tr
-{
-    background-color: #ddd;
-    font-weight: bold;
-}
-
-.params .params thead tr, .props .props thead tr
-{
-    background-color: #fff;
-    font-weight: bold;
-}
-
-.params th, .props th { border-right: 1px solid #aaa; }
-.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
-
-.params td.description > p:first-child,
-.props td.description > p:first-child
-{
-    margin-top: 0;
-    padding-top: 0;
-}
-
-.params td.description > p:last-child,
-.props td.description > p:last-child
-{
-    margin-bottom: 0;
-    padding-bottom: 0;
-}
-
-.disabled {
-    color: #454545;
-}
diff --git a/doc/styles/prettify-jsdoc.css b/doc/styles/prettify-jsdoc.css
deleted file mode 100644
index 5a2526e..0000000
--- a/doc/styles/prettify-jsdoc.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/* JSDoc prettify.js theme */
-
-/* plain text */
-.pln {
-  color: #000000;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* string content */
-.str {
-  color: #006400;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a keyword */
-.kwd {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* a comment */
-.com {
-  font-weight: normal;
-  font-style: italic;
-}
-
-/* a type name */
-.typ {
-  color: #000000;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a literal value */
-.lit {
-  color: #006400;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* punctuation */
-.pun {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* lisp open bracket */
-.opn {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* lisp close bracket */
-.clo {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* a markup tag name */
-.tag {
-  color: #006400;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a markup attribute name */
-.atn {
-  color: #006400;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a markup attribute value */
-.atv {
-  color: #006400;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a declaration */
-.dec {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* a variable name */
-.var {
-  color: #000000;
-  font-weight: normal;
-  font-style: normal;
-}
-
-/* a function name */
-.fun {
-  color: #000000;
-  font-weight: bold;
-  font-style: normal;
-}
-
-/* Specify class=linenums on a pre to get line numbering */
-ol.linenums {
-  margin-top: 0;
-  margin-bottom: 0;
-}
diff --git a/doc/styles/prettify-tomorrow.css b/doc/styles/prettify-tomorrow.css
deleted file mode 100644
index b6f92a7..0000000
--- a/doc/styles/prettify-tomorrow.css
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Tomorrow Theme */
-/* Original theme - https://github.com/chriskempson/tomorrow-theme */
-/* Pretty printing styles. Used with prettify.js. */
-/* SPAN elements with the classes below are added by prettyprint. */
-/* plain text */
-.pln {
-  color: #4d4d4c; }
-
-@media screen {
-  /* string content */
-  .str {
-    color: #718c00; }
-
-  /* a keyword */
-  .kwd {
-    color: #8959a8; }
-
-  /* a comment */
-  .com {
-    color: #8e908c; }
-
-  /* a type name */
-  .typ {
-    color: #4271ae; }
-
-  /* a literal value */
-  .lit {
-    color: #f5871f; }
-
-  /* punctuation */
-  .pun {
-    color: #4d4d4c; }
-
-  /* lisp open bracket */
-  .opn {
-    color: #4d4d4c; }
-
-  /* lisp close bracket */
-  .clo {
-    color: #4d4d4c; }
-
-  /* a markup tag name */
-  .tag {
-    color: #c82829; }
-
-  /* a markup attribute name */
-  .atn {
-    color: #f5871f; }
-
-  /* a markup attribute value */
-  .atv {
-    color: #3e999f; }
-
-  /* a declaration */
-  .dec {
-    color: #f5871f; }
-
-  /* a variable name */
-  .var {
-    color: #c82829; }
-
-  /* a function name */
-  .fun {
-    color: #4271ae; } }
-/* Use higher contrast and text-weight for printable form. */
-@media print, projection {
-  .str {
-    color: #060; }
-
-  .kwd {
-    color: #006;
-    font-weight: bold; }
-
-  .com {
-    color: #600;
-    font-style: italic; }
-
-  .typ {
-    color: #404;
-    font-weight: bold; }
-
-  .lit {
-    color: #044; }
-
-  .pun, .opn, .clo {
-    color: #440; }
-
-  .tag {
-    color: #006;
-    font-weight: bold; }
-
-  .atn {
-    color: #404; }
-
-  .atv {
-    color: #060; } }
-/* Style */
-/*
-pre.prettyprint {
-  background: white;
-  font-family: Consolas, Monaco, 'Andale Mono', monospace;
-  font-size: 12px;
-  line-height: 1.5;
-  border: 1px solid #ccc;
-  padding: 10px; }
-*/
-
-/* Specify class=linenums on a pre to get line numbering */
-ol.linenums {
-  margin-top: 0;
-  margin-bottom: 0; }
-
-/* IE indents via margin-left */
-li.L0,
-li.L1,
-li.L2,
-li.L3,
-li.L4,
-li.L5,
-li.L6,
-li.L7,
-li.L8,
-li.L9 {
-  /* */ }
-
-/* Alternate shading for lines */
-li.L1,
-li.L3,
-li.L5,
-li.L7,
-li.L9 {
-  /* */ }
diff --git a/doc/util_checkDefined.js.html b/doc/util_checkDefined.js.html
deleted file mode 100644
index 4ebf5a8..0000000
--- a/doc/util_checkDefined.js.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/checkDefined.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/checkDefined.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/11/2015.
- */
-import provide from './provide';
-let nm = provide('util.checkDefined');
-
-/**
- * check if the input is undefined or null
- * @param {*} input - input pointer
- * @returns {boolean} true undefined or null
- */
-export function undefinedOrNull (input){
-    "use strict";
-
-    return (typeof input === 'undefined' || input === null);
-}
-
-nm.undefinedOrNull = undefinedOrNull;
-
-
-/**
- * check if the input is defined and not null
- * @param {*} input - input pointer
- * @returns {boolean} true defined and not null
- */
-export function definedAndNotNull (input){
-    "use strict";
-
-    return !(undefinedOrNull(input));
-}
-
-nm.definedAndNotNull = definedAndNotNull;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_colors.js.html b/doc/util_colors.js.html
deleted file mode 100644
index 001fb93..0000000
--- a/doc/util_colors.js.html
+++ /dev/null
@@ -1,227 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/colors.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/colors.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/3/2015.
- */
-import provide from './provide';
-import * as chk from './checkDefined';
-let nm = provide('util.colors');
-
-
-/**
- * helper function to convert to hex
- * @param {number|string} x - the number to convert to hex
- * @returns {string} number as hex
- * @private
- */
-function _hex(x) {
-    let hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
-
-    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
-}
-
-/**
- * converts an RGB string to hex
- * @param {string} rgb - rgb color
- * @returns {string} rbg as hex
- */
-export function rgb2hex(rgb) {
-    let rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
-
-    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
-}
-
-nm.rgb2hex = rgb2hex;
-
-
-/**
- * Convert hex string to RGB or RGBA string
- * @param {string} hexString - hex color string
- * @param {number} [alphaVal=undefined] Alpha value
- * @returns {string} - rgb or rgba color
- */
-export function hexAlphaToRgbOrRgba(hexString, alphaVal) {
-    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
-    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
-    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
-    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
-    if (alphaVal) {
-        return `rgba(${r},${g},${b},${alphaVal})`;
-    } else {
-        return `rgba(${r},${g},${b})`;
-    }
-}
-
-nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-
-
-/**
- * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
- * @param {string} rgb - rgb color
- * @param {number} alpha - alpha value 0 to 1
- * @returns {string} rgba color
- */
-export function rgbToRgba(rgb, alpha) {
-    let pieces = rgb.split(',');
-    pieces[0] = pieces[0].replace('rgb', 'rgba');
-    pieces[2] = pieces[2].replace(')', '');
-    pieces.push(' ' + alpha.toFixed(1) + ')');
-
-    return pieces.join(',');
-}
-
-nm.rgbToRgba = rgbToRgba;
-
-
-/**
- * @typedef {function} colorLookupByNumber
- * @param {number} num - the number to use to retrieve the color
- * @returns {string} rgb color
- */
-
-
-/**
- * Make a blue green red gradient
- * @param {number} minVal - minimum value
- * @param {number} maxVal - maximum value
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-export function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
-
-    if (typeof flipColors != "boolean") {
-        flipColors = false;
-    }
-
-    return function (theVal) {
-        let r, g, b;
-        let ratio;
-
-        if (chk.undefinedOrNull(theVal)) {
-            return 'rgb(100,100,100)';
-        }
-
-        let percent = (theVal - minVal) / (maxVal - minVal);
-
-        if (flipColors == true) {
-            percent = 1 - percent;
-        }
-
-        if (percent >= 1) {
-            r = 255;
-            g = 0;
-            b = 0;
-        } else if (percent &lt;= 0) {
-            r = 0;
-            g = 0;
-            b = 255;
-        } else if (percent &lt; .25) {
-            // green up, blue constant
-            r = 0;
-            g = Math.floor(255 * percent / 0.25);
-            b = 255;
-        } else if (percent &lt; 0.50) {
-            //blue down, green constant
-            ratio = (percent - 0.25) / 0.25;
-            r = 0;
-            g = 255;
-            b = 255 - Math.floor(255 * ratio);
-        } else if (percent &lt; 0.75) {
-            // red up, green constant
-            ratio = (percent - 0.5) / 0.25;
-            r = Math.floor(255 * ratio);
-            g = 255;
-            b = 0;
-        } else {
-            // green down, red constant
-            ratio = (percent - 0.75) / 0.25;
-            r = 255;
-            g = 255 - Math.floor(255 * ratio);
-            b = 0;
-        }
-
-        r = r.toFixed();
-        g = g.toFixed();
-        b = b.toFixed();
-
-        return 'rgb(' + r + ',' + g + ',' + b + ')';
-    };
-}
-
-nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-
-
-/**
- * Create a function that will return colors based on a gradient
- * @param {number} median - median value
- * @param {number} stdDev - standard deviation
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-export function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
-
-    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
-
-    return function (theVal) {
-
-        let zScore;
-        if (theVal == null) {
-            zScore = null;
-        } else {
-            zScore = (theVal - median) / stdDev;
-        }
-
-        return grd(zScore);
-    };
-}
-
-nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_dateConvert.js.html b/doc/util_dateConvert.js.html
deleted file mode 100644
index 8bc0ad9..0000000
--- a/doc/util_dateConvert.js.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/dateConvert.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/dateConvert.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/4/2015.
- */
-
-import provide from './provide';
-let nm = provide('util.dateConvert');
-
-function leadingPad(inNum) {
-    let strNum = inNum.toFixed();
-    if (strNum.length &lt; 2) {
-        strNum = '0' + strNum;
-    }
-
-    return strNum;
-}
-
-nm.leadingPad = leadingPad;
-
-/**
- * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
- * @param {Date} dte to convert
- * @returns {string} the formatted date string
- */
-export function dateToYyyyMmDdHhMmSs(dte) {
-    let yr = dte.getYear() + 1900;
-    let month = leadingPad(dte.getMonth() + 1);
-    let day = leadingPad(dte.getDate());
-    let hrs = leadingPad(dte.getHours());
-    let mns = leadingPad(dte.getMinutes());
-    let secs = leadingPad(dte.getSeconds());
-
-    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;
-}
-
-nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
-
-
-/**
- * Given a date return a string in the format YYYYmmdd_hh0000
- * @param {Date} dte the input date
- * @returns {string} the formatted date string
- */
-export function dateToYyyyMmDdHh000(dte) {
-    let yr = dte.getYear() + 1900;
-    let month = leadingPad(dte.getMonth() + 1);
-    let day = leadingPad(dte.getDate());
-    let hrs = leadingPad(dte.getHours());
-
-    return `${yr}${month}${day}_${hrs}0000`;
-}
-
-nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_formatString.js.html b/doc/util_formatString.js.html
deleted file mode 100644
index 7afbeaf..0000000
--- a/doc/util_formatString.js.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/formatString.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/formatString.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 10/30/2015.
- */
-
-if (!String.prototype.format) {
-    /**
-     *  helper function for string replacement to keep code clean
-     * usage
-     * var aString = 'some{0}stuff{1}replaced';
-     * var c = 'cat';
-     * var b = 'bird';
-     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
-     * prettier than
-     * 'some' + c + 'stuff' + b + 'replaced'
-     * but same effect
-     * adapted to take a single array that is used for replacement by position ie
-     * var arrReplacements = [c, b];
-     * aString.format(arrReplacements)
-     * @returns {string} converted string
-     */
-    String.prototype.format = function () {
-        let args = arguments;
-        for (let i = 0; i &lt; args.length; i++) {
-            args[i] = (args[i] !== null ? args[i] : '');
-        }
-
-        //if the first argument is an array, use that
-        if (args[0].constructor == Array) {
-            args = args[0];
-        }
-
-        return this.replace(/{(\d+)}/g, function (match, number) {
-            return typeof args[number] != 'undefined' ? args[number] : match;
-        });
-    };
-}
-
-export default undefined;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_getUrlParams.js.html b/doc/util_getUrlParams.js.html
deleted file mode 100644
index bc64016..0000000
--- a/doc/util_getUrlParams.js.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/getUrlParams.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/getUrlParams.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 6/23/2016.
- */
-import provide from './provide';
-let nm = provide('util');
-
-/**
- *
- * @returns {object} object representation of url params
- */
-function getUrlParams() {
-    "use strict";
-
-    let match;
-    let pl = /\+/g;  // Regex for replacing addition symbol with a space
-    let search = /([^&amp;=]+)=?([^&amp;]*)/g;
-    let decode = function (s) {
-        return decodeURIComponent(s.replace(pl, " "));
-    };
-    let query = window.location.search.substring(1);
-
-    let urlParams = {};
-    while (match = search.exec(query)) {
-        /**
-         * @type {string}
-         */
-        let val =  decode(match[2]).trim();
-
-        let typedVal = null;
-        if (val.length == 0){
-            // pass
-        } else if (!isNaN(val)){
-            if (val.indexOf('.') > -1){
-                typedVal = parseFloat(val);
-            } else {
-                typedVal = parseInt(val);
-            }
-        } else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true'){
-            typedVal = val.toLowerCase() == 'true';
-        } else {
-            typedVal = val;
-        }
-        urlParams[decode(match[1])] = typedVal;
-    }
-
-    return urlParams;
-}
-
-nm.getUrlParams = getUrlParams;
-
-export default getUrlParams;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_makeGuid.js.html b/doc/util_makeGuid.js.html
deleted file mode 100644
index 28eef9a..0000000
--- a/doc/util_makeGuid.js.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/makeGuid.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/makeGuid.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import provide from './provide';
-let nm = provide('util');
-
-
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-            .replace(/[xy]/g, function (c) {
-                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r &amp; 0x3 | 0x8;
-
-                return v.toString(16);
-            });
-
-}
-nm.makeGuid = makeGuid;
-export default makeGuid;
-
-
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_objectHelpers.js.html b/doc/util_objectHelpers.js.html
deleted file mode 100644
index 5550e14..0000000
--- a/doc/util_objectHelpers.js.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/objectHelpers.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/objectHelpers.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 6/7/2016.
- */
-
-import provide from './provide';
-let nm = provide('util');
-
-/**
- * @typedef {object} keyValuePair
- * @property {string} key
- * @property {object} value
- */
-
-
-/**
- * iterate over the key value pairs of an object
- * @param {object} obj - the input object
- * @returns {Array&lt;keyValuePair>} - array of key value pairs
- */
-export function keyValPairs(obj) {
-    let outArray = [];
-    for (let key of Object.keys(obj)) {
-        outArray.push({'key': key, 'value': obj[key]});
-
-    }
-    outArray.sort(function (a, b) {
-        "use strict";
-
-        return a > b ? 1 : -1;
-    });
-
-    return outArray;
-}
-
-nm.keyValPairs = keyValPairs;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/doc/util_provide.js.html b/doc/util_provide.js.html
deleted file mode 100644
index 4a0065e..0000000
--- a/doc/util_provide.js.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: util/provide.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: util/provide.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
- * Created by gavorhes on 12/10/2015.
- */
-
-
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace){
-    "use strict";
-    if (typeof window.gv == 'undefined'){
-        window.gv = {};
-    }
-
-    let parts = namespace.split('.');
-    let nameSpace = window.gv;
-
-    for (let i=0; i&lt; parts.length; i++){
-        let newObject = nameSpace[parts[i]];
-
-        if (typeof newObject == 'undefined'){
-            nameSpace[parts[i]] = {};
-        }
-
-        nameSpace = nameSpace[parts[i]];
-    }
-
-    return nameSpace;
-}
-
-provide('util');
-window.gv.util.provide = provide;
-
-export default provide;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/lib-ts/_internalnterfaces.d.ts b/lib-ts/_internalnterfaces.d.ts
new file mode 100644
index 0000000..c98298e
--- /dev/null
+++ b/lib-ts/_internalnterfaces.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Created by gavorhes on 9/21/2016.
+ */
+export interface extentObject {
+    minX: number;
+    minY: number;
+    maxX: number;
+    maxY: number;
+}
diff --git a/lib-ts/_internalnterfaces.js b/lib-ts/_internalnterfaces.js
new file mode 100644
index 0000000..8c92720
--- /dev/null
+++ b/lib-ts/_internalnterfaces.js
@@ -0,0 +1,5 @@
+/**
+ * Created by gavorhes on 9/21/2016.
+ */
+"use strict";
+//# sourceMappingURL=_internalnterfaces.js.map
\ No newline at end of file
diff --git a/lib-ts/_internalnterfaces.js.map b/lib-ts/_internalnterfaces.js.map
new file mode 100644
index 0000000..903f44a
--- /dev/null
+++ b/lib-ts/_internalnterfaces.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"_internalnterfaces.js","sourceRoot":"","sources":["../src-ts/_internalnterfaces.ts"],"names":[],"mappings":"AAAA;;GAEG"}
\ No newline at end of file
diff --git a/lib-ts/_scratch/Hello.d.ts b/lib-ts/_scratch/Hello.d.ts
new file mode 100644
index 0000000..57cc082
--- /dev/null
+++ b/lib-ts/_scratch/Hello.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+import * as React from "react";
+export interface HelloProps {
+    compiler: string;
+    framework: string;
+}
+export declare class Hello extends React.Component<HelloProps, {}> {
+    render(): JSX.Element;
+}
diff --git a/lib-ts/_scratch/Hello.js b/lib-ts/_scratch/Hello.js
new file mode 100644
index 0000000..e494b54
--- /dev/null
+++ b/lib-ts/_scratch/Hello.js
@@ -0,0 +1,22 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+var React = require("react");
+var Hello = (function (_super) {
+    __extends(Hello, _super);
+    function Hello() {
+        _super.apply(this, arguments);
+    }
+    Hello.prototype.render = function () {
+        return React.createElement("h1", null, "Hello from ", this.props.compiler, " and ", this.props.framework, "!");
+    };
+    return Hello;
+}(React.Component));
+exports.Hello = Hello;
+//# sourceMappingURL=Hello.js.map
\ No newline at end of file
diff --git a/lib-ts/_scratch/Hello.js.map b/lib-ts/_scratch/Hello.js.map
new file mode 100644
index 0000000..193287e
--- /dev/null
+++ b/lib-ts/_scratch/Hello.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Hello.js","sourceRoot":"","sources":["../../src-ts/_scratch/Hello.tsx"],"names":[],"mappings":";;;;;;AAAA;;GAEG;AACH,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAI/B;IAA2B,yBAA+B;IAA1D;QAA2B,8BAA+B;IAI1D,CAAC;IAHG,sBAAM,GAAN;QACI,MAAM,CAAC,qBAAC,EAAE,wBAAa,IAAI,CAAC,KAAK,CAAC,QAAS,WAAM,IAAI,CAAC,KAAK,CAAC,SAAU,MAAM,CAAC;IACjF,CAAC;IACL,YAAC;AAAD,CAAC,AAJD,CAA2B,KAAK,CAAC,SAAS,GAIzC;AAJY,aAAK,QAIjB,CAAA"}
\ No newline at end of file
diff --git a/lib-ts/_test/another.d.ts b/lib-ts/_test/another.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/another.js b/lib-ts/_test/another.js
new file mode 100644
index 0000000..8080833
--- /dev/null
+++ b/lib-ts/_test/another.js
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+console.log('here is another');
+console.log('here is another');
+//# sourceMappingURL=another.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/another.js.map b/lib-ts/_test/another.js.map
new file mode 100644
index 0000000..7f3f01d
--- /dev/null
+++ b/lib-ts/_test/another.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"another.js","sourceRoot":"","sources":["../../src-ts/_test/another.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/_test/compare-test.d.ts b/lib-ts/_test/compare-test.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/compare-test.js b/lib-ts/_test/compare-test.js
new file mode 100644
index 0000000..7bd10e0
--- /dev/null
+++ b/lib-ts/_test/compare-test.js
@@ -0,0 +1,41 @@
+"use strict";
+/**
+ * Created by gavorhes on 6/1/2016.
+ */
+var quickMap_1 = require('../olHelpers/quickMap');
+var layerSwipe_1 = require('../olHelpers/layerSwipe');
+var LayerEsriMapServer_1 = require('../layers/LayerEsriMapServer');
+var map = quickMap_1.quickMap();
+var swiper = new layerSwipe_1.default(map);
+var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {
+    minZoom: 6,
+    maxZoom: 12,
+    name: 'WisDOT Regions',
+    useEsriStyle: true
+});
+var metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {
+    minZoom: 7,
+    visible: true,
+    name: 'Metamanager Segments'
+});
+var truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+    minZoom: 7,
+    visible: true,
+    name: 'truck2014',
+    showLayers: [8]
+});
+var truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+    minZoom: 7,
+    visible: true,
+    name: 'truck2015',
+    showLayers: [9]
+});
+map.addLayer(wisDotRegions.olLayer);
+map.addLayer(truckSpeed2014.olLayer);
+map.addLayer(truckSpeed2015.olLayer);
+map.addLayer(metamanagerSegments.olLayer);
+swiper.addLeftLayer(wisDotRegions);
+swiper.addRightLayer(metamanagerSegments);
+swiper.addLeftLayer(truckSpeed2014);
+swiper.addRightLayer(truckSpeed2015);
+//# sourceMappingURL=compare-test.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/compare-test.js.map b/lib-ts/_test/compare-test.js.map
new file mode 100644
index 0000000..c9710e3
--- /dev/null
+++ b/lib-ts/_test/compare-test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"compare-test.js","sourceRoot":"","sources":["../../src-ts/_test/compare-test.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,yBAAuB,uBAAuB,CAAC,CAAA;AAC/C,2BAAuB,yBAAyB,CAAC,CAAA;AACjD,mCAAiC,8BAA8B,CAAC,CAAA;AAEhE,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAGrB,IAAI,MAAM,GAAG,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC;AAGjC,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,8GAA8G,EAC9G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;IACtB,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEP,IAAI,mBAAmB,GAAG,IAAI,uCAAkB,CAC5C,0GAA0G,EAC1G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,sBAAsB;CAC/B,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,oGAAoG,EACpG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,oGAAoG,EACpG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAG1C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACnC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAE1C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACpC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/_test/itsMap.d.ts b/lib-ts/_test/itsMap.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/itsMap.js b/lib-ts/_test/itsMap.js
new file mode 100644
index 0000000..2d8c28e
--- /dev/null
+++ b/lib-ts/_test/itsMap.js
@@ -0,0 +1,21 @@
+"use strict";
+/**
+ * Created by gavorhes on 12/18/2015.
+ */
+// import 'babel-polyfill/dist/polyfill.min';
+var ItsLayerCollection_1 = require('../collections/ItsLayerCollection');
+var LayerLegend_1 = require('../collections/LayerLegend');
+var quickMap_1 = require('../olHelpers/quickMap');
+var map = quickMap_1.default();
+var itsLayerCollection = new ItsLayerCollection_1.default(map);
+var layerArray = [
+    {
+        groupName: 'ITS Inventory Layers',
+        collapse: false,
+        addCheck: true,
+        items: itsLayerCollection.layers
+    }
+];
+var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
+console.log('it works');
+//# sourceMappingURL=itsMap.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/itsMap.js.map b/lib-ts/_test/itsMap.js.map
new file mode 100644
index 0000000..5dc862c
--- /dev/null
+++ b/lib-ts/_test/itsMap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"itsMap.js","sourceRoot":"","sources":["../../src-ts/_test/itsMap.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,6CAA6C;AAC7C,mCAA+B,mCAAmC,CAAC,CAAA;AACnE,4BAAwB,4BAA4B,CAAC,CAAA;AACrD,yBAAqB,uBAAuB,CAAC,CAAA;AAE7C,IAAI,GAAG,GAAG,kBAAQ,EAAE,CAAC;AAErB,IAAI,kBAAkB,GAAG,IAAI,4BAAkB,CAAC,GAAG,CAAC,CAAC;AAErD,IAAI,UAAU,GAAG;IACb;QACI,SAAS,EAAE,sBAAsB;QACjC,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,kBAAkB,CAAC,MAAM;KACnC;CACJ,CAAC;AAEF,IAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAKjE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/_test/my_little_test.d.ts b/lib-ts/_test/my_little_test.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/my_little_test.js b/lib-ts/_test/my_little_test.js
new file mode 100644
index 0000000..7b2c0aa
--- /dev/null
+++ b/lib-ts/_test/my_little_test.js
@@ -0,0 +1,31 @@
+"use strict";
+var animate_buttons_1 = require('../domUtil/animate-buttons');
+//
+//
+console.log('eat this fish');
+console.log('eat this fish');
+console.log('eat this bird');
+//
+// let g = new ol3.source.Vector();
+//
+// console.log(olx);
+console.log('i am here5');
+function me(eat) {
+    if (eat === void 0) { eat = 10; }
+    console.log(eat, 'one');
+}
+me();
+var control = new animate_buttons_1.MediaControl('map');
+//
+//
+// console.log(ol3);
+//
+//
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log('here');
+//
+//# sourceMappingURL=my_little_test.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/my_little_test.js.map b/lib-ts/_test/my_little_test.js.map
new file mode 100644
index 0000000..b85547f
--- /dev/null
+++ b/lib-ts/_test/my_little_test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"my_little_test.js","sourceRoot":"","sources":["../../src-ts/_test/my_little_test.ts"],"names":[],"mappings":";AACA,gCAA2B,4BAK3B,CAAC,CALsD;AACvD,EAAE;AACF,EAAE;AAGF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AAGpB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAI1B,YAAa,GAAgB;IAAhB,mBAAgB,GAAhB,QAAgB;IACzB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,EAAE,EAAE,CAAC;AAEL,IAAI,OAAO,GAAG,IAAI,8BAAY,CAAC,KAAK,CAAC,CAAC;AAEtC,EAAE;AACF,EAAE;AACF,oBAAoB;AACpB,EAAE;AACF,EAAE;AACF,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,uBAAuB;AACvB,EAAE"}
\ No newline at end of file
diff --git a/lib-ts/_test/reacttst.d.ts b/lib-ts/_test/reacttst.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/reacttst.js b/lib-ts/_test/reacttst.js
new file mode 100644
index 0000000..5ce1acf
--- /dev/null
+++ b/lib-ts/_test/reacttst.js
@@ -0,0 +1,10 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+"use strict";
+var React = require("react");
+var ReactDOM = require("react-dom");
+var Hello_1 = require("../_scratch/Hello");
+console.log('I am in a tsx file for some reason');
+ReactDOM.render(React.createElement(Hello_1.Hello, {compiler: "TypeScript", framework: "React"}), document.getElementById("example"));
+//# sourceMappingURL=reacttst.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/reacttst.js.map b/lib-ts/_test/reacttst.js.map
new file mode 100644
index 0000000..26019fa
--- /dev/null
+++ b/lib-ts/_test/reacttst.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reacttst.js","sourceRoot":"","sources":["../../src-ts/_test/reacttst.tsx"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAC/B,IAAY,QAAQ,WAAM,WAAW,CAAC,CAAA;AAEtC,sBAAsB,mBAAmB,CAAC,CAAA;AAE1C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAElD,QAAQ,CAAC,MAAM,CACX,oBAAC,aAAK,GAAC,QAAQ,EAAC,YAAY,EAAC,SAAS,EAAC,OAAO,EAAG,EACjD,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CACrC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/_test/slider-test.d.ts b/lib-ts/_test/slider-test.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/_test/slider-test.js b/lib-ts/_test/slider-test.js
new file mode 100644
index 0000000..cd8e671
--- /dev/null
+++ b/lib-ts/_test/slider-test.js
@@ -0,0 +1,173 @@
+"use strict";
+/**
+ * Created by gavorhes on 6/22/2016.
+ */
+var Sliders_1 = require('../collections/Sliders');
+var slidersConfig = [
+    {
+        label: 'AADT',
+        yearOptions: [
+            { label: '1', column: 'aadtyr_1' }
+        ]
+    },
+    {
+        label: 'AADT Future',
+        yearOptions: [
+            { label: '5', column: 'aadtyr_5' },
+            { label: '10', column: 'aadtyr_10' },
+            { label: '15', column: 'aadtyr_15' },
+            { label: '20', column: 'aadtyr_20' }
+        ]
+    },
+    {
+        label: 'Growth',
+        yearOptions: [
+            { label: '5', column: 'growth_5' },
+            { label: '10', column: 'growth_10' },
+            { label: '15', column: 'growth_15' },
+            { label: '20', column: 'growth_20' }
+        ]
+    },
+    {
+        label: 'Truck',
+        yearOptions: [
+            { label: '1', column: 'trkdyr_1' },
+            { label: '20', column: 'trkdyr_20' }
+        ]
+    },
+    {
+        label: 'LOS',
+        yearOptions: [
+            { label: '1', column: 'losyr_1' }
+        ]
+    },
+    {
+        label: 'LOS Future',
+        yearOptions: [
+            { label: '5', column: 'losyr_5' },
+            { label: '10', column: 'losyr_10' },
+            { label: '15', column: 'losyr_15' },
+            { label: '20', column: 'losyr_20' }
+        ]
+    },
+    {
+        label: 'Crash Rate',
+        yearOptions: [
+            { label: 1, column: 'crash_rate' }
+        ]
+    },
+    {
+        label: 'Severity',
+        yearOptions: [
+            { label: 1, column: 'crash_severity' }
+        ]
+    },
+    {
+        label: 'Weather',
+        yearOptions: [
+            { label: 1, column: 'weather' }
+        ]
+    },
+    {
+        label: 'Event',
+        yearOptions: [
+            { label: 1, column: 'event' }
+        ]
+    }
+];
+var presetConfig = [
+    {
+        label: 'Default TIP',
+        presets: [
+            { column: 'aadtyr_1', value: 10.0 },
+            { column: 'aadtyr_20', value: 7.0 },
+            { column: 'growth_20', value: 7.0 },
+            { column: 'trkdyr_1', value: 4.0 },
+            { column: 'losyr_1', value: 12.0 },
+            { column: 'losyr_20', value: 12.0 },
+            { column: 'crash_rate', value: 15.0 },
+            { column: 'crash_severity', value: 13.0 },
+            { column: 'weather', value: 9.0 },
+            { column: 'event', value: 11.0 }
+        ]
+    },
+    {
+        label: 'Safety',
+        presets: [
+            { column: 'aadtyr_1', value: 20.0 },
+            { column: 'aadtyr_20', value: 0.0 },
+            { column: 'growth_20', value: 0.0 },
+            { column: 'trkdyr_1', value: 0.0 },
+            { column: 'losyr_1', value: 0.0 },
+            { column: 'losyr_20', value: 0.0 },
+            { column: 'crash_rate', value: 40.0 },
+            { column: 'crash_severity', value: 40.0 },
+            { column: 'weather', value: 0.0 },
+            { column: 'event', value: 0.0 }
+        ]
+    },
+    {
+        label: 'Mobility Present',
+        presets: [
+            { column: 'aadtyr_1', value: 25.0 },
+            { column: 'aadtyr_20', value: 25.0 },
+            { column: 'growth_20', value: 0.0 },
+            { column: 'trkdyr_1', value: 25.0 },
+            { column: 'losyr_1', value: 25.0 },
+            { column: 'losyr_20', value: 0.0 },
+            { column: 'crash_rate', value: 0.0 },
+            { column: 'crash_severity', value: 0.0 },
+            { column: 'weather', value: 0.0 },
+            { column: 'event', value: 0.0 }
+        ]
+    },
+    {
+        label: 'Mobility Future',
+        presets: [
+            { column: 'aadtyr_1', value: 0.0 },
+            { column: 'aadtyr_20', value: 25.0 },
+            { column: 'growth_20', value: 25.0 },
+            { column: 'trkdyr_1', value: 25.0 },
+            { column: 'losyr_1', value: 0.0 },
+            { column: 'losyr_20', value: 25.0 },
+            { column: 'crash_rate', value: 0.0 },
+            { column: 'crash_severity', value: 0.0 },
+            { column: 'weather', value: 0.0 },
+            { column: 'event', value: 0.0 }
+        ]
+    },
+    {
+        label: 'Service',
+        presets: [
+            { column: 'aadtyr_1', value: 30.0 },
+            { column: 'aadtyr_20', value: 0.0 },
+            { column: 'growth_20', value: 10.0 },
+            { column: 'trkdyr_1', value: 0.0 },
+            { column: 'losyr_1', value: 30.0 },
+            { column: 'losyr_20', value: 30.0 },
+            { column: 'crash_rate', value: 0.0 },
+            { column: 'crash_severity', value: 0.0 },
+            { column: 'weather', value: 0.0 },
+            { column: 'event', value: 0.0 }
+        ]
+    },
+    {
+        label: 'Freight Performance',
+        presets: [
+            { column: 'aadtyr_1', value: 20.0 },
+            { column: 'aadtyr_20', value: 0.0 },
+            { column: 'growth_20', value: 0.0 },
+            { column: 'trkdyr_1', value: 60.0 },
+            { column: 'losyr_1', value: 20.0 },
+            { column: 'losyr_20', value: 0.0 },
+            { column: 'crash_rate', value: 0.0 },
+            { column: 'crash_severity', value: 0.0 },
+            { column: 'weather', value: 0.0 },
+            { column: 'event', value: 0.0 }
+        ]
+    }
+];
+var sliders = new Sliders_1.TipSliders(slidersConfig, presetConfig, 'slider-container', 'preset-selector', 'region-selector', 'version-selector', function (chg) { console.log(chg); });
+// sliders.changedCallback = (chg) => {console.log(chg)};
+window['glob'] = sliders;
+//# sourceMappingURL=slider-test.js.map
\ No newline at end of file
diff --git a/lib-ts/_test/slider-test.js.map b/lib-ts/_test/slider-test.js.map
new file mode 100644
index 0000000..31fc4ac
--- /dev/null
+++ b/lib-ts/_test/slider-test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"slider-test.js","sourceRoot":"","sources":["../../src-ts/_test/slider-test.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/collections/ItsLayerCollection.d.ts b/lib-ts/collections/ItsLayerCollection.d.ts
new file mode 100644
index 0000000..27376a0
--- /dev/null
+++ b/lib-ts/collections/ItsLayerCollection.d.ts
@@ -0,0 +1,36 @@
+import { ol } from 'custom-ol';
+import LayerItsInventory from "../layers/LayerItsInventory";
+declare class ItsLayerCollection {
+    _map: ol.Map;
+    _layers: Array<LayerItsInventory>;
+    /**
+     * Create a collection of all ITS layers
+     * @param {ol.Map} theMap the openlayers map
+     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
+     *
+     * BLUE Bluetooth Detector - Bluetooth Detector
+     * CABINET Cabinets - The cabinets
+     * CCTV Camera - Traffic Cameras
+     * HUT Communication Hut - Communication Hut
+     * VAULT Communication Vault - The communication vaults
+     * HAR Highway Advisory Radio - Advisory Radios
+     * LIGHT Lighting - Lighting
+     * LOOP Loop Detectors - Loop Detectors
+     * DMS Message Board - Message Boards and Signs
+     * MICROWAVE Microwave Detector - Microwave Detectors
+     * PULL Pull Box - A pull box
+     * RWIS RWIS - Road weather information system
+     * GATE Ramp Gate - The ramp Gates
+     * METER Ramp Meter - The ramp meters
+     * SIGNAL Signal - Traffic Signal
+     * TOWER Tower - The towers
+     * TRENCH
+     */
+    constructor(theMap: ol.Map, exclude?: Array<string>);
+    /**
+     * Return the array of layers in this collection
+     * @returns {Array<LayerItsInventory>} an array of layers
+     */
+    layers: LayerItsInventory[];
+}
+export default ItsLayerCollection;
diff --git a/lib-ts/collections/ItsLayerCollection.js b/lib-ts/collections/ItsLayerCollection.js
new file mode 100644
index 0000000..b55376d
--- /dev/null
+++ b/lib-ts/collections/ItsLayerCollection.js
@@ -0,0 +1,155 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+"use strict";
+var colors = require('../util/colors');
+var provide_1 = require('../util/provide');
+var LayerItsInventory_1 = require("../layers/LayerItsInventory");
+var nm = provide_1.default('collections');
+var itsConfig = [
+    {
+        name: 'Camera',
+        itsType: 'cctv',
+        minZoom: 11,
+        itsIconConfig: {
+            prop: 'owner',
+            defaultName: 'WisDOT',
+            defaultIcon: 'cctv.png',
+            iconArray: [
+                ['City of Madison', 'Madison', 'cctv-mad.png']
+            ]
+        }
+    },
+    {
+        name: 'Message Signs',
+        itsType: 'DMS',
+        minZoom: 11,
+        itsIconConfig: {
+            prop: 'dmsType',
+            defaultName: 'DMS',
+            defaultIcon: 'dms.png',
+            iconArray: [
+                ['pcms', 'PCMS', 'pcms.png']
+            ]
+        }
+    },
+    { name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false },
+    { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true },
+    { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false },
+    { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false },
+    { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false },
+    { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false },
+    { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false },
+    {
+        name: 'Loop Detectors',
+        itsType: 'loop',
+        legendCollapse: true,
+        minZoom: 14,
+        visible: false,
+        itsIconConfig: {
+            prop: 'dtctrType',
+            defaultName: 'Other',
+            defaultIcon: 'loopdetectorother.png',
+            iconArray: [
+                ['detector', 'Detector', 'loopdetector.png'],
+                ['long', 'Long', 'loopdetectorlong.png'],
+                ['zone', 'Zone', 'loopdetectorzone.png']
+            ]
+        },
+        onDemand: true
+    },
+    { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false },
+    { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true },
+    { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false },
+    { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false },
+    { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false },
+    { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true },
+    { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false },
+    {
+        name: 'Trench',
+        itsType: 'trench',
+        onDemand: true,
+        visible: false,
+        onDemandDelay: 500,
+        minZoom: 15,
+        legendCollapse: true,
+        itsLineConfig: {
+            prop: 'owner',
+            //defaultName: 'Other',
+            //defaultWidth: 7,
+            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
+            lineArray: [
+                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],
+                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],
+                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],
+                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],
+                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],
+                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],
+                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],
+                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],
+                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]
+            ]
+        }
+    }
+];
+var ItsLayerCollection = (function () {
+    /**
+     * Create a collection of all ITS layers
+     * @param {ol.Map} theMap the openlayers map
+     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
+     *
+     * BLUE Bluetooth Detector - Bluetooth Detector
+     * CABINET Cabinets - The cabinets
+     * CCTV Camera - Traffic Cameras
+     * HUT Communication Hut - Communication Hut
+     * VAULT Communication Vault - The communication vaults
+     * HAR Highway Advisory Radio - Advisory Radios
+     * LIGHT Lighting - Lighting
+     * LOOP Loop Detectors - Loop Detectors
+     * DMS Message Board - Message Boards and Signs
+     * MICROWAVE Microwave Detector - Microwave Detectors
+     * PULL Pull Box - A pull box
+     * RWIS RWIS - Road weather information system
+     * GATE Ramp Gate - The ramp Gates
+     * METER Ramp Meter - The ramp meters
+     * SIGNAL Signal - Traffic Signal
+     * TOWER Tower - The towers
+     * TRENCH
+     */
+    function ItsLayerCollection(theMap, exclude) {
+        this._map = theMap;
+        this._layers = [];
+        exclude = typeof exclude == 'object' ? exclude : [];
+        for (var i = 0; i < itsConfig.length; i++) {
+            var lyrConfig = itsConfig[i];
+            var addLayer = true;
+            for (var j = 0; j < exclude.length; j++) {
+                if (exclude[j] == lyrConfig.itsType) {
+                    addLayer = false;
+                    break;
+                }
+            }
+            if (addLayer) {
+                var inventLyr = new LayerItsInventory_1.default(lyrConfig);
+                this._map.addLayer(inventLyr.olLayer);
+                this._layers.push(inventLyr);
+            }
+        }
+    }
+    Object.defineProperty(ItsLayerCollection.prototype, "layers", {
+        /**
+         * Return the array of layers in this collection
+         * @returns {Array<LayerItsInventory>} an array of layers
+         */
+        get: function () {
+            return this._layers;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return ItsLayerCollection;
+}());
+nm.ItsLayerCollection = ItsLayerCollection;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = ItsLayerCollection;
+//# sourceMappingURL=ItsLayerCollection.js.map
\ No newline at end of file
diff --git a/lib-ts/collections/ItsLayerCollection.js.map b/lib-ts/collections/ItsLayerCollection.js.map
new file mode 100644
index 0000000..b1c5692
--- /dev/null
+++ b/lib-ts/collections/ItsLayerCollection.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ItsLayerCollection.js","sourceRoot":"","sources":["../../src-ts/collections/ItsLayerCollection.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/collections/LayerLegend.d.ts b/lib-ts/collections/LayerLegend.d.ts
new file mode 100644
index 0000000..e6997b7
--- /dev/null
+++ b/lib-ts/collections/LayerLegend.d.ts
@@ -0,0 +1,26 @@
+/**
+ * a wrapper to make a legend
+ */
+declare class LayerLegend {
+    $divElement: any;
+    _legendItems: any;
+    layerGroup: any;
+    legendId: any;
+    /**
+     *
+     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
+     * @param {string} divId the div where the legend should be added
+     * @param {object} options for legend
+     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
+     * @param {string} [options.legendTitle=Legend] the legend title
+     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
+     */
+    constructor(legendItems: any, divId: any, options: any);
+    /**
+     * @param {Array} [legendItems=this._layerConfig] the legend items
+     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
+     * @private
+     */
+    _buildTree(legendItems: any, parents?: any): void;
+}
+export default LayerLegend;
diff --git a/lib-ts/collections/LayerLegend.js b/lib-ts/collections/LayerLegend.js
new file mode 100644
index 0000000..9268f1b
--- /dev/null
+++ b/lib-ts/collections/LayerLegend.js
@@ -0,0 +1,287 @@
+/**
+ * Created by gavorhes on 12/16/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var makeGuid_1 = require('../util/makeGuid');
+var mapMove_1 = require('../olHelpers/mapMove');
+var nm = provide_1.default('collections');
+var $ = require('jquery');
+var LayerGroup = (function () {
+    /**
+     *
+     * @param {object} [groupConfig={}] - group configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
+     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
+     * @param {LayerGroup} [parent=undefined] - the parent group
+     */
+    function LayerGroup(groupConfig, parent) {
+        this.groupLayers = [];
+        this.groupLayersLookup = {};
+        this.groupGroups = [];
+        this.groupGroupsLookup = {};
+        this.itemIdArray = [];
+        if (typeof groupConfig == 'undefined') {
+            this.parent = null;
+            this.groupId = 'root';
+            this.groupName = 'root';
+            this.allGroupLookup = { root: this };
+            this.allGroupArray = [this];
+            this.allLayerArray = [];
+            this.allLayerLookup = {};
+            this.layerParentLookup = {};
+            this.collapse = false;
+            this.addCheck = false;
+        }
+        else {
+            this.groupId = makeGuid_1.default();
+            this.parent = parent;
+            this.groupName = groupConfig.groupName;
+            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
+            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
+        }
+    }
+    /**
+     *
+     * @param {object} groupConfig - configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
+     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
+     * @param {Array<LayerGroup>} parents parent groups
+     * @returns {LayerGroup} the layer group just added
+     */
+    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
+        var parent;
+        if (parents.length > 0) {
+            parent = parents[parents.length - 1];
+        }
+        else {
+            parent = 'root';
+        }
+        /**
+         * @type {LayerGroup}
+         */
+        var parentGroup = this.allGroupLookup[parent];
+        var newGroup = new LayerGroup(groupConfig, parentGroup);
+        this.allGroupLookup[newGroup.groupId] = newGroup;
+        this.allGroupArray.push(newGroup);
+        parentGroup.groupGroups.push(newGroup);
+        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
+        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
+            console.log(newGroup.groupId);
+            throw 'layer and group ids must be unique';
+        }
+        parentGroup.itemIdArray.push(newGroup.groupId);
+        return newGroup;
+    };
+    /**
+     *
+     * @param {LayerBase} newLayer the layer to be added
+     * @param {Array} parents array
+     */
+    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
+        var parent;
+        if (parents.length > 0) {
+            parent = parents[parents.length - 1];
+        }
+        else {
+            parent = 'root';
+        }
+        this.allLayerLookup[newLayer.id] = newLayer;
+        this.allLayerArray.push(newLayer);
+        /**
+         * @type {LayerGroup}
+         */
+        var parentGroup = this.allGroupLookup[parent];
+        parentGroup.groupLayers.push(newLayer);
+        parentGroup.groupLayersLookup[newLayer.id] = newLayer;
+        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
+            console.log(newLayer.id);
+            throw 'layer and group ids must be unique';
+        }
+        parentGroup.itemIdArray.push(newLayer.id);
+        this.layerParentLookup[newLayer.id] = parentGroup;
+    };
+    LayerGroup.prototype.getLegendHtml = function (legendId, options) {
+        var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">";
+        legendHtml += ("<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">") +
+            ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") +
+            "<span></span>" +
+            "</label></li>";
+        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
+        return legendHtml;
+    };
+    /**
+     * @param {Array} itemIds the items to process
+     * @param {LayerGroup} theGroup new group
+     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
+     * @static
+     * @returns {string} html string
+     */
+    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {
+        if (itemIds.length == 0) {
+            return '';
+        }
+        var theHml = '';
+        var itemId = itemIds[0];
+        if (theGroup.groupLayersLookup[itemId]) {
+            /**
+             * @type {LayerBase}
+             */
+            var lyr = theGroup.groupLayersLookup[itemId];
+            theHml += ("<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">") + lyr.getLegendDiv() + '</li>';
+        }
+        else if (theGroup.groupGroupsLookup[itemId]) {
+            /**
+             * type {LayerGroup}
+             */
+            var otherGroup = theGroup.groupGroupsLookup[itemId];
+            theHml += "<li>";
+            theHml += ("<div id=\"" + otherGroup.groupId + "-legend-layer-div\" ") +
+                ("class=\"legend-layer-group  " + layerDivClasses.join(' ') + "\">");
+            if (otherGroup.addCheck) {
+                theHml += ("<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">") +
+                    ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>");
+            }
+            else {
+                theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>";
+            }
+            theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander";
+            theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">";
+            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
+            theHml += '</span>';
+            //parents.push(groupId);
+            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
+            theHml += '</div>';
+            theHml += '</li>';
+        }
+        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
+    };
+    return LayerGroup;
+}());
+/**
+ * a wrapper to make a legend
+ */
+var LayerLegend = (function () {
+    /**
+     *
+     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
+     * @param {string} divId the div where the legend should be added
+     * @param {object} options for legend
+     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
+     * @param {string} [options.legendTitle=Legend] the legend title
+     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
+     */
+    function LayerLegend(legendItems, divId, options) {
+        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
+            var i = legendItems_1[_i];
+            if (typeof i == 'undefined') {
+                throw 'undefined item passed in array to legend constructor';
+            }
+        }
+        options = options || {};
+        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
+        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
+        options.layerDivClasses = options.layerDivClasses || [];
+        // if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            mapMove_1.default.checkInit();
+        }
+        this.$divElement = $('#' + divId);
+        this._legendItems = legendItems;
+        this.layerGroup = new LayerGroup();
+        this._buildTree(legendItems);
+        this.legendId = makeGuid_1.default();
+        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
+        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
+            var l = _b[_a];
+            l.applyCollapse();
+        }
+        var _this = this;
+        //// if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            mapMove_1.default.checkInit();
+            mapMove_1.default.addCallback(function (ext, zoom, evt) {
+                if (typeof evt == 'undefined' || evt == 'change:resolution') {
+                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
+                        var lyr = _a[_i];
+                        var $lyrLi = $('#' + lyr.id + '-layer-li');
+                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
+                            $lyrLi.addClass('layer-not-visible');
+                        }
+                        else {
+                            $lyrLi.removeClass('layer-not-visible');
+                        }
+                    }
+                }
+            }, this, 100, true, 'legend1');
+        }
+        // <editor-fold desc="add event listeners">
+        this.$divElement.find(".suppress-by-extent").change(function () {
+            var legendLayerLis = $('.legend-layer-li');
+            if (this.checked) {
+                legendLayerLis.removeClass('layer-force-show');
+            }
+            else {
+                legendLayerLis.addClass('layer-force-show');
+            }
+        });
+        this.$divElement.find('.legend-check').change(function () {
+            var lyrId = this.id.replace('-legend-layer-check', '');
+            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
+        });
+        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
+            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
+        });
+        this.$divElement.find('.layer-group-expander').click(function () {
+            var $this = $(this);
+            $this.removeClass('legend-layer-group-initial-collapse');
+            $this.siblings('ul').slideToggle();
+            if ($this.hasClass('legend-layer-group-collapsed')) {
+                $this.removeClass('legend-layer-group-collapsed');
+                $this.html('&#9660;');
+            }
+            else {
+                $this.addClass('legend-layer-group-collapsed');
+                $this.html('&#9654;');
+            }
+        });
+        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
+        // </editor-fold>
+    }
+    /**
+     * @param {Array} [legendItems=this._layerConfig] the legend items
+     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
+     * @private
+     */
+    LayerLegend.prototype._buildTree = function (legendItems, parents) {
+        if (legendItems.length == 0) {
+            return;
+        }
+        var oneItem = legendItems[0];
+        //reset the parent if the item is in the base array
+        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
+            parents = [];
+        }
+        if (typeof oneItem['groupName'] !== 'undefined') {
+            var groupItem = legendItems[0];
+            var newGroup = this.layerGroup.addGroup(groupItem, parents);
+            parents.push(newGroup.groupId);
+            this._buildTree(groupItem.items, parents);
+        }
+        else {
+            /**
+             * @type {LayerBase}
+             */
+            var layerItem = legendItems[0];
+            this.layerGroup.addLegendLayer(layerItem, parents);
+        }
+        this._buildTree(legendItems.slice(1), parents);
+    };
+    return LayerLegend;
+}());
+nm.LayerLegend = LayerLegend;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerLegend;
+//# sourceMappingURL=LayerLegend.js.map
\ No newline at end of file
diff --git a/lib-ts/collections/LayerLegend.js.map b/lib-ts/collections/LayerLegend.js.map
new file mode 100644
index 0000000..a5ade04
--- /dev/null
+++ b/lib-ts/collections/LayerLegend.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerLegend.js","sourceRoot":"","sources":["../../src-ts/collections/LayerLegend.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/collections/Sliders.d.ts b/lib-ts/collections/Sliders.d.ts
new file mode 100644
index 0000000..59d1c8a
--- /dev/null
+++ b/lib-ts/collections/Sliders.d.ts
@@ -0,0 +1,73 @@
+export interface TipSliderConfig {
+    label: string;
+    yearOptions: Array<{
+        column: string;
+        label: string;
+    }>;
+}
+export interface TipPresetConfig {
+    label: string;
+    presets: Array<{
+        column: string;
+        value: number;
+    }>;
+}
+/**
+ * class to keep track of the sliders
+ */
+export declare class Sliders {
+    $container: JQuery;
+    reservedPercent: number;
+    total: number;
+    lockedCount: number;
+    notLockedCount: number;
+    private _sliderList;
+    private _sliderLookup;
+    resetting: boolean;
+    private _lockedList;
+    private _inRangeList;
+    private _atMinList;
+    private _atMaxList;
+    _slideFinishedFunctions: Array<Function>;
+    /**
+     *
+     * @param sliderConfigs
+     * @param presetConfig
+     * @param divId
+     */
+    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>, divId: string);
+    addSlideFinishedFunction(finishedFunction: any): void;
+    /**
+     * split array into subarrays holding the sliders
+     * @private
+     */
+    _splitSliderArray(): void;
+    /**
+     * handle remainder, recursive to take care of min max overshoots
+     * @param {number} remain the remainder
+     * @param {string} skipDomId - this dom id
+     * @private
+     */
+    _handleRemainder(remain: any, skipDomId: any): void;
+    /**
+     * reset all
+     */
+    reset(): void;
+    /**
+     *
+     * @param {object} keyValList key and value list
+     */
+    setValues(keyValList: any): void;
+    /**
+     * get the weight sum
+     * @returns {number} the weight sum
+     */
+    getSum(): number;
+    /**
+     * get the parameter weights
+     * @returns {object} lookup with parameter weights
+     */
+    getParams(): {};
+    _addEventListeners(): void;
+}
+export default Sliders;
diff --git a/lib-ts/collections/Sliders.js b/lib-ts/collections/Sliders.js
new file mode 100644
index 0000000..47d444a
--- /dev/null
+++ b/lib-ts/collections/Sliders.js
@@ -0,0 +1,502 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('collections');
+var $ = require('jquery');
+var TipPresets = (function () {
+    function TipPresets(conf) {
+        this.label = conf.label;
+        this.presets = conf.presets;
+        this.domId = this.label.replace(/ /g, '').toLowerCase();
+    }
+    return TipPresets;
+}());
+var _Slider = (function () {
+    /**
+     * Slider constructor
+     * @param sliderConfig - the configuration
+
+     */
+    function _Slider(sliderConfig) {
+        //let _this = this;
+        this._dropdownSelection = null;
+        this._weight = null;
+        this.name = sliderConfig.label;
+        this.domId = this.name.toLowerCase().replace(/ /g, '-');
+        this._locked = false;
+        this._min = 0.0;
+        this._max = 100;
+        this.labelLow = null;
+        this.labelHigh = null;
+        this.labelVal = null;
+        this.slider = null;
+        this.chk = null;
+        this.atMin = false;
+        this.atMax = false;
+        var sel = "<select class=\"" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + "\" id=\"" + this.domId + "_chg\">";
+        for (var i = 0; i < sliderConfig.yearOptions.length; i++) {
+            var itm = sliderConfig.yearOptions[i];
+            sel += "<option value=\"" + itm.column + "\">" + itm.label + "</option>";
+        }
+        sel += '</select>';
+        this.selectedParamDefault = this.selectedParam;
+        this.html = '<div class="slider-div">' +
+            ("<label for=\"" + this.domId + "_chk\" class=\"slider-label\">" + this.name + "</label>") +
+            sel + "<br>" +
+            ("<input id=\"" + this.domId + "_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">") +
+            ("<label id=\"" + this.domId + "_low\" class=\"low-high\"></label>") +
+            ("<input id=\"" + this.domId + "\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">") +
+            ("<label id=\"" + this.domId + "_high\" class=\"low-high\"></label>") +
+            ("<label id=\"" + this.domId + "_lbl\" for=\"" + this.domId + "\" class=\"percent-label\"></label></div>");
+    }
+    /**
+     * add html to dom
+     * @param {jQuery} $container - container element
+     */
+    _Slider.prototype.addToDom = function ($container) {
+        $container.append(this.html);
+        this.labelLow = $("#" + this.domId + "_low");
+        this.labelHigh = $("#" + this.domId + "_high");
+        this.labelVal = $("#" + this.domId + "_lbl");
+        this.slider = $("#" + this.domId);
+        this.selectionBox = $("#" + this.domId + "_chg");
+        this.chk = $("#" + this.domId + "_chk");
+    };
+    /**
+     * increment the slider
+     * @param {number} delta change delta
+     * @returns {number} the remainder not able to be allocated to this slider
+     */
+    _Slider.prototype.increment = function (delta) {
+        var remainder = 0;
+        delta = Number(delta.toFixed(1));
+        this._weight += delta;
+        if (this._weight < this._min) {
+            remainder = this._min - this._weight;
+            this._weight = this._min;
+            this.atMin = true;
+        }
+        else if (this._weight > this._max) {
+            remainder = this._max - this._weight;
+            this._weight = this._max;
+            this.atMax = true;
+        }
+        else {
+            this.atMin = false;
+            this.atMax = false;
+        }
+        this.slider.val(this._weight.toFixed(1));
+        this.labelVal.html(this._weight.toFixed(1) + '%');
+        return remainder;
+    };
+    /**
+     * set the value and drop down
+     * @param {number} newVal the new value
+     * @param {string} selectedParam the selected parameter
+     */
+    _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) {
+        this.min = 0;
+        this.max = 100;
+        this.weight = newVal;
+        this.slider.val(newVal.toFixed(1));
+        this.selectionBox.val(selectedParam);
+        this.selectedParam = selectedParam;
+        this.locked = true;
+    };
+    Object.defineProperty(_Slider.prototype, "locked", {
+        /**
+         *
+         * @returns {boolean} if locked
+         */
+        get: function () {
+            return this._locked;
+        },
+        /**
+         *
+         * @param {boolean} val if locked
+         */
+        set: function (val) {
+            this._locked = val;
+            this.slider.prop('disabled', this._locked);
+            this.selectionBox.prop('disabled', this._locked);
+            this.chk.prop('checked', !this._locked);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(_Slider.prototype, "min", {
+        /**
+         *
+         * @returns {number} the minimum
+         */
+        get: function () {
+            return this._min;
+        },
+        /**
+         *
+         * @param {number} newVal new minimum
+         */
+        set: function (newVal) {
+            this._min = Number(newVal.toFixed(1));
+            if (this._min < 0) {
+                this._min = 0;
+            }
+            this.labelLow.html(this._min.toFixed(1));
+            this.slider.attr('min', this._min.toFixed(1));
+            this.atMin = this._weight == this._min;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(_Slider.prototype, "max", {
+        /**
+         *
+         * @returns {number} the maximum
+         */
+        get: function () {
+            return this._max;
+        },
+        /**
+         *
+         * @param {number} newVal the maximum
+         */
+        set: function (newVal) {
+            this._max = Number(newVal.toFixed(1));
+            if (this._max > 100) {
+                this._max = 100.0;
+            }
+            this.labelHigh.html(this._max.toFixed(1));
+            this.slider.attr('max', this._max.toFixed(1));
+            this.atMax = this._weight == this._max;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(_Slider.prototype, "weight", {
+        /**
+         *
+         * @returns {number} the weight
+         */
+        get: function () {
+            return this._weight;
+        },
+        /**
+         *
+         * @param {number} newVal the weight
+         */
+        set: function (newVal) {
+            this._weight = Number(newVal.toFixed(1));
+            this.labelVal.html(this._weight.toFixed(1) + '%');
+            if (this._weight <= this._min) {
+                this.atMin = true;
+                this.atMax = false;
+            }
+            else if (this._weight >= this._max) {
+                this.atMin = false;
+                this.atMax = true;
+            }
+            else {
+                this.atMin = false;
+                this.atMax = false;
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return _Slider;
+}());
+nm._Slider = _Slider;
+/**
+ * class to keep track of the sliders
+ */
+var TipSliders = (function () {
+    /**
+     *
+     * @param sliderConfigs
+     * @param presetConfig
+     * @param divId
+     * @param presetSelectorId
+     * @param regionSelectorId
+     * @param versionSelectorId
+     */
+    function TipSliders(sliderConfigs, presetConfig, divId, presetSelectorId, regionSelectorId, versionSelectorId, chgCallback) {
+        var _this = this;
+        this.resetting = false;
+        this.reservedPercent = 0.0;
+        this.$container = $('#' + divId);
+        this.$container.addClass('slider-container');
+        this.changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { };
+        this._$presetSelector = $('#' + presetSelectorId);
+        this._$regionSelector = $('#' + regionSelectorId);
+        this._$versionSelector = $('#' + versionSelectorId);
+        this._sliderList = [];
+        this._sliderLookup = {};
+        for (var i = 0; i < sliderConfigs.length; i++) {
+            var sld = new _Slider(sliderConfigs[i]);
+            this._sliderList.push(sld);
+            this._sliderLookup[sld.domId] = sld;
+            sld.addToDom(this.$container);
+        }
+        this._presetArray = [];
+        this._presetLookup = {};
+        for (var i = 0; i < presetConfig.length; i++) {
+            var preset = new TipPresets(presetConfig[i]);
+            var idx = (i + 1).toFixed();
+            this._presetLookup[idx] = preset;
+            this._presetArray.push(preset);
+            this._$presetSelector.append("<option value=\"" + idx + "\">" + preset.label + "</option>");
+        }
+        this._lockedList = [];
+        this._inRangeList = [];
+        this._atMinList = [];
+        this._atMaxList = [];
+        this.lockedCount = 10;
+        this.notLockedCount = 0;
+        this._splitSliderArray();
+        this._$presetSelector.change(function () {
+            _this.setPresetValues();
+            _this._runChangedCallback();
+        });
+        this._$regionSelector.change(function () {
+            _this._runChangedCallback();
+        });
+        this._$versionSelector.change(function () {
+            _this._runChangedCallback();
+        });
+        this._$presetSelector.trigger('change');
+        this._addEventListeners();
+    }
+    TipSliders.prototype._runChangedCallback = function () {
+        this.changedCallback(this.paramWeightsRegionVersion);
+    };
+    TipSliders.prototype.setPresetValues = function () {
+        var thePreset = this._presetLookup[this._$presetSelector.val()];
+        for (var i = 0; i < thePreset.presets.length; i++) {
+            var presetValues = thePreset.presets[i];
+            var theSlider = this._sliderList[i];
+            theSlider.locked = true;
+            theSlider.setValAndDropDown(presetValues.value, presetValues.column);
+        }
+    };
+    /**
+     * split array into subarrays holding the sliders
+     * @private
+     */
+    TipSliders.prototype._splitSliderArray = function () {
+        this._lockedList = [];
+        this._inRangeList = [];
+        this._atMinList = [];
+        this._atMaxList = [];
+        for (var i = 0; i < this._sliderList.length; i++) {
+            var sld = this._sliderList[i];
+            if (sld.locked) {
+                this._lockedList.push(sld);
+            }
+            else if (sld.atMin) {
+                this._atMinList.push(sld);
+            }
+            else if (sld.atMax) {
+                this._atMaxList.push(sld);
+            }
+            else {
+                this._inRangeList.push(sld);
+            }
+        }
+        this.lockedCount = this._lockedList.length;
+        this.notLockedCount = this._sliderList.length - this.lockedCount;
+    };
+    /**
+     * handle remainder, recursive to take care of min max overshoots
+     * @param {number} remain the remainder
+     * @param {string} skipDomId - this dom id
+     * @private
+     */
+    TipSliders.prototype._handleRemainder = function (remain, skipDomId) {
+        remain = Number(remain.toFixed(1));
+        if (remain == 0) {
+            return;
+        }
+        this._splitSliderArray();
+        var canChangeArray = [];
+        for (var i = 0; i < this._inRangeList.length; i++) {
+            var sld = this._inRangeList[i];
+            if (sld.domId == skipDomId) {
+                continue;
+            }
+            canChangeArray.push(sld);
+        }
+        if (remain > 0) {
+            for (var i = 0; i < this._atMaxList.length; i++) {
+                var sld = this._atMaxList[i];
+                if (sld.domId == skipDomId) {
+                    continue;
+                }
+                canChangeArray.push(sld);
+            }
+        }
+        else {
+            for (var i = 0; i < this._atMinList.length; i++) {
+                var sld = this._atMinList[i];
+                if (sld.domId == skipDomId) {
+                    continue;
+                }
+                canChangeArray.push(sld);
+            }
+        }
+        if (canChangeArray.length == 0) {
+            return;
+        }
+        var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
+        var newRemainder = 0;
+        for (var i = 0; i < canChangeArray.length; i++) {
+            newRemainder += canChangeArray[i].increment(inc);
+        }
+        this._handleRemainder(newRemainder, skipDomId);
+    };
+    /**
+     *
+     * @param {object} keyValList key and value list
+     */
+    TipSliders.prototype.setValues = function (keyValList) {
+        this.resetting = true;
+        for (var k in keyValList) {
+            if (keyValList.hasOwnProperty(k)) {
+                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
+            }
+        }
+        this.resetting = false;
+    };
+    /**
+     * get the weight sum
+     * @returns {number} the weight sum
+     */
+    TipSliders.prototype.getSum = function () {
+        var total = 0;
+        for (var i = 0; i < this._sliderList.length; i++) {
+            var sld = this._sliderList[i];
+            total += Number(sld.weight.toFixed(1));
+        }
+        return total;
+    };
+    /**
+     * get the parameter weights
+     * @returns {object} lookup with parameter weights
+     */
+    TipSliders.prototype.getParams = function () {
+        var paramWeights = {};
+        for (var i = 0; i < this._sliderList.length; i++) {
+            var sld = this._sliderList[i];
+            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
+        }
+        return paramWeights;
+    };
+    TipSliders.prototype._addEventListeners = function () {
+        var ___this = this;
+        //change function
+        this.$container.find('input[type="range"]').change(function () {
+            if (___this.resetting) {
+                return;
+            }
+            var $this = $(this);
+            var domId = this['id'];
+            var sldr = ___this._sliderLookup[domId];
+            var newValue = parseFloat($this.val());
+            var oldValue = sldr.weight;
+            var diff = newValue - oldValue;
+            diff = Number(diff.toFixed(1));
+            sldr.weight = Number(newValue.toFixed(1));
+            ___this._handleRemainder(diff, domId);
+            //cleanup, make sure the sum is still 100
+            var sum = Number(___this.getSum().toFixed(1));
+            if (sum > 100) {
+                loop1: while (true) {
+                    for (var i = 0; i < ___this._sliderList.length; i++) {
+                        var sld = ___this._sliderList[i];
+                        if (sld.domId == domId || sld.locked || sld.atMin) {
+                            continue;
+                        }
+                        sld.increment(-0.1);
+                        sum -= 0.1;
+                        if (sum.toFixed(1) == '100.0') {
+                            break loop1;
+                        }
+                    }
+                }
+            }
+            else if (sum < 100) {
+                loop1: while (true) {
+                    for (var i = 0; i < ___this._sliderList.length; i++) {
+                        var sld = ___this._sliderList[i];
+                        if (sld.domId == domId || sld.locked || sld.atMax) {
+                            continue;
+                        }
+                        sld.increment(0.1);
+                        sum += 0.1;
+                        if (sum.toFixed(1) == '100.0') {
+                            break loop1;
+                        }
+                    }
+                }
+            }
+            ___this._$presetSelector.val('0');
+            ___this._runChangedCallback();
+        });
+        //update the selected parameter when the selection is changed
+        $('.show-select').change(function () {
+            if (___this.resetting) {
+                return;
+            }
+            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
+            ___this._$presetSelector.val('0');
+            ___this._runChangedCallback();
+        });
+        //lock the slider and update the reserved percent
+        this.$container.find('input[type="checkbox"]').change(function () {
+            var domEl = this;
+            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
+            ___this.reservedPercent = 0.0;
+            ___this.notLockedCount = 0;
+            var notLockedSliders = [];
+            for (var i = 0; i < ___this._sliderList.length; i++) {
+                var sld = ___this._sliderList[i];
+                if (sld.locked) {
+                    ___this.reservedPercent += sld.weight;
+                    continue;
+                }
+                notLockedSliders.push(sld);
+                ___this.notLockedCount++;
+            }
+            for (var i = 0; i < ___this._sliderList.length; i++) {
+                var sld = ___this._sliderList[i];
+                if (sld.locked) {
+                    continue;
+                }
+                sld.max = 100 - ___this.reservedPercent;
+            }
+            if (notLockedSliders.length == 1) {
+                notLockedSliders[0].min = notLockedSliders[0].weight;
+            }
+            else {
+                for (var i = 0; i < notLockedSliders.length; i++) {
+                    notLockedSliders[i].min = 0;
+                }
+            }
+        });
+    };
+    Object.defineProperty(TipSliders.prototype, "paramWeightsRegionVersion", {
+        get: function () {
+            return { paramWeights: this.getParams(),
+                region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return TipSliders;
+}());
+exports.TipSliders = TipSliders;
+nm.Sliders = TipSliders;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = TipSliders;
+//# sourceMappingURL=Sliders.js.map
\ No newline at end of file
diff --git a/lib-ts/collections/Sliders.js.map b/lib-ts/collections/Sliders.js.map
new file mode 100644
index 0000000..96f2380
--- /dev/null
+++ b/lib-ts/collections/Sliders.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Sliders.js","sourceRoot":"","sources":["../../src-ts/collections/Sliders.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/domUtil/SelectBoxBase.d.ts b/lib-ts/domUtil/SelectBoxBase.d.ts
new file mode 100644
index 0000000..e8bf18f
--- /dev/null
+++ b/lib-ts/domUtil/SelectBoxBase.d.ts
@@ -0,0 +1,52 @@
+export interface selectChangeCallback {
+    /**
+     *
+     * @param theValue the current select value of the select box
+     */
+    (theValue: string): void;
+}
+/**
+ * must return in the contents <select id="${guid}"></select> among other things
+ */
+export interface contentGenerator {
+    /**
+     * @param aGuid
+     */
+    (aGuid: string): string;
+}
+export declare class SelectBoxBase {
+    _$container: JQuery;
+    $label: JQuery;
+    _box: JQuery;
+    _changeListeners: Array<selectChangeCallback>;
+    /**
+     *
+     * @param {jQuery} parent - parent container
+     * @param {string} labelContent
+     * @param {contentGenerator} [contentGen=undefined]
+     */
+    constructor(parent: any, labelContent: any, contentGen?: contentGenerator);
+    /**
+     *
+     * @returns {jQuery}
+     */
+    box: JQuery;
+    changed(): void;
+    /**
+     *
+     * @param {selectChangeCallback} func
+     */
+    addChangeListener(func: selectChangeCallback): void;
+    /**
+     *
+     * @returns {string|number}
+     */
+    /**
+     *
+     * @param {string|number} v
+     * @protected
+     */
+    selectedValue: any;
+    selectedText: string;
+}
+export default SelectBoxBase;
diff --git a/lib-ts/domUtil/SelectBoxBase.js b/lib-ts/domUtil/SelectBoxBase.js
new file mode 100644
index 0000000..8327a20
--- /dev/null
+++ b/lib-ts/domUtil/SelectBoxBase.js
@@ -0,0 +1,119 @@
+"use strict";
+/**
+ * Created by gavorhes on 5/13/2016.
+ */
+/**
+ * Created by gavorhes on 5/12/2016.
+ */
+var makeGuid_1 = require('../util/makeGuid');
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('domUtil');
+var SelectBoxBase = (function () {
+    /**
+     *
+     * @param {jQuery} parent - parent container
+     * @param {string} labelContent
+     * @param {contentGenerator} [contentGen=undefined]
+     */
+    function SelectBoxBase(parent, labelContent, contentGen) {
+        var _this = this;
+        var guidTop = makeGuid_1.default();
+        var guid = makeGuid_1.default();
+        var htmlString = "<div id=\"" + guidTop + "\">";
+        htmlString += "<label for=\"" + guid + "\">" + labelContent + "</label>";
+        if (contentGen) {
+            htmlString += contentGen(guid);
+        }
+        else {
+            htmlString += "<select id=\"" + guid + "\"></select>";
+        }
+        htmlString += '</div>';
+        parent.append(htmlString);
+        this._$container = parent.find('#' + guidTop);
+        this.$label = this._$container.find('label');
+        /**
+         *
+         * @type {Array<selectChangeCallback>}
+         * @private
+         */
+        this._changeListeners = [];
+        this._box = parent.find("#" + guid);
+        if (!this._box) {
+            throw 'the select box was not found';
+        }
+        this._box.change(function () {
+            _this.changed();
+        });
+    }
+    Object.defineProperty(SelectBoxBase.prototype, "box", {
+        /**
+         *
+         * @returns {jQuery}
+         */
+        get: function () {
+            return this._box;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    SelectBoxBase.prototype.changed = function () {
+        var v = this._box.val();
+        for (var _i = 0, _a = this._changeListeners; _i < _a.length; _i++) {
+            var f = _a[_i];
+            f(v);
+        }
+    };
+    /**
+     *
+     * @param {selectChangeCallback} func
+     */
+    SelectBoxBase.prototype.addChangeListener = function (func) {
+        this._changeListeners.push(func);
+    };
+    Object.defineProperty(SelectBoxBase.prototype, "selectedValue", {
+        /**
+         *
+         * @returns {string|number}
+         */
+        get: function () {
+            var theVal = this.box.val();
+            if (theVal == null || typeof theVal == 'undefined') {
+                return null;
+            }
+            else if (isNaN(theVal)) {
+                return theVal;
+            }
+            else {
+                if (theVal.indexOf('.') > -1) {
+                    return parseFloat(theVal);
+                }
+                else {
+                    return parseInt(theVal);
+                }
+            }
+        },
+        /**
+         *
+         * @param {string|number} v
+         * @protected
+         */
+        set: function (v) {
+            this.box.val(v);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(SelectBoxBase.prototype, "selectedText", {
+        get: function () {
+            return this.box.find('option:selected').text();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return SelectBoxBase;
+}());
+exports.SelectBoxBase = SelectBoxBase;
+nm.SelectBoxBase = SelectBoxBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = SelectBoxBase;
+//# sourceMappingURL=SelectBoxBase.js.map
\ No newline at end of file
diff --git a/lib-ts/domUtil/SelectBoxBase.js.map b/lib-ts/domUtil/SelectBoxBase.js.map
new file mode 100644
index 0000000..aa912ae
--- /dev/null
+++ b/lib-ts/domUtil/SelectBoxBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SelectBoxBase.js","sourceRoot":"","sources":["../../src-ts/domUtil/SelectBoxBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/domUtil/animate-buttons.d.ts b/lib-ts/domUtil/animate-buttons.d.ts
new file mode 100644
index 0000000..8761a4d
--- /dev/null
+++ b/lib-ts/domUtil/animate-buttons.d.ts
@@ -0,0 +1,38 @@
+import Timer = NodeJS.Timer;
+export declare class MediaControl {
+    _container: JQuery;
+    _min: number;
+    _max: number;
+    _playInterval: number;
+    _step: number;
+    _currentValue: number;
+    _playing: boolean;
+    _$btnStop: JQuery;
+    _$slider: JQuery;
+    _$valLabelVal: JQuery;
+    _$valLabelMin: JQuery;
+    _$valLabelMax: JQuery;
+    _interval: Timer;
+    _showAsDate: boolean;
+    _func: Function;
+    constructor(element: JQuery | HTMLElement | string, min?: number, max?: number, val?: number, step?: number, func?: Function, playInterval?: number, showAsDate?: boolean);
+    stopPlaying(): void;
+    playing: boolean;
+    min: number;
+    max: number;
+    step: number;
+    currentValue: number;
+    /**
+     * set min and max value with step
+     * @param {number} newMin the new min
+     * @param {number} newMax the new mas
+     * @param {number} [newValue=newMin] the value to set
+     * @param {number} [newStep=(newMax-newMin)/20] step value
+     */
+    setMinMaxValueStep(newMin: any, newMax: any, newValue: any, newStep: any): void;
+    /**
+     *
+     * @param {mediaCallback} newFunc the callback on change
+     */
+    changeFunction: any;
+}
diff --git a/lib-ts/domUtil/animate-buttons.js b/lib-ts/domUtil/animate-buttons.js
new file mode 100644
index 0000000..e5bf8cc
--- /dev/null
+++ b/lib-ts/domUtil/animate-buttons.js
@@ -0,0 +1,204 @@
+"use strict";
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+var $ = require('jquery');
+var provide_1 = require('../util/provide');
+var range_change_1 = require('./range-change');
+var nm = provide_1.default('jQueryPlugin');
+/**
+ * @callback mediaCallback
+ * @param {number} tm
+ */
+function timeToLocalDateString(tm) {
+    "use strict";
+    var d = new Date(tm);
+    var p1 = d.toLocaleTimeString().split(' ');
+    var p2 = p1[0].split(':');
+    p2 = p2.slice(0, 2);
+    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
+}
+var MediaControl = (function () {
+    function MediaControl(element, min, max, val, step, func, playInterval, showAsDate) {
+        var _this = this;
+        if (min === void 0) { min = 0; }
+        if (max === void 0) { max = 100; }
+        if (val === void 0) { val = 0; }
+        if (step === void 0) { step = 5; }
+        if (func === void 0) { func = function () { }; }
+        if (playInterval === void 0) { playInterval = 5; }
+        if (showAsDate === void 0) { showAsDate = false; }
+        if (typeof element == 'string') {
+            this._container = $('#' + element);
+        }
+        else if (typeof element['style'] !== 'undefined') {
+            this._container = $(element);
+        }
+        else {
+            this._container = element;
+        }
+        this._container.addClass('media-control-container');
+        this._playInterval = playInterval;
+        this._interval = undefined;
+        this._func = func;
+        this._showAsDate = showAsDate;
+        this._currentValue = undefined;
+        this._min = undefined;
+        this._max = undefined;
+        this._step = undefined;
+        this._playing = false;
+        var htmlStr = '<span class="media-player-button media-back"></span>' +
+            '<span class="media-player-button media-play"></span>' +
+            '<span class="media-player-button media-pause media-disabled"></span>' +
+            '<span class="media-player-button media-stop media-disabled" ></span>' +
+            '<span class="media-player-button media-ahead"></span>' +
+            "<input type=\"range\">" +
+            "<div class=\"media-control-value-label-container\">" +
+            "<span class=\"media-control-value-label-min\"></span>" +
+            "<span class=\"media-control-value-label-val\"></span>" +
+            "<span class=\"media-control-value-label-max\"></span>" +
+            "</div>";
+        this._container.append(htmlStr);
+        // let btnPause = this._container.find('.media-pause');
+        var btnPlay = this._container.find('.media-play');
+        this._$btnStop = this._container.find('.media-stop');
+        var btnAhead = this._container.find('.media-ahead');
+        var btnBack = this._container.find('.media-back');
+        this._$slider = this._container.find('input[type=range]');
+        this._$valLabelMin = this._container.find('.media-control-value-label-min');
+        this._$valLabelVal = this._container.find('.media-control-value-label-val');
+        this._$valLabelMax = this._container.find('.media-control-value-label-max');
+        this.setMinMaxValueStep(min, max, val, step);
+        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);
+        var ___this = this;
+        btnPlay.click(function () {
+            var $this = $(this);
+            $this.addClass('media-disabled');
+            ___this._$btnStop.removeClass('media-disabled');
+            btnAhead.addClass('media-locked');
+            btnBack.addClass('media-locked');
+            ___this._$slider.prop('disabled', true);
+            ___this._playing = true;
+            ___this._interval = setInterval(function () {
+                ___this.currentValue += ___this._step;
+            }, ___this._playInterval);
+        });
+        this._$btnStop.click(function () {
+            clearInterval(___this._interval);
+            var $this = $(this);
+            $this.addClass('media-disabled');
+            btnPlay.removeClass('media-disabled');
+            btnAhead.removeClass('media-locked');
+            btnBack.removeClass('media-locked');
+            ___this._$slider.prop('disabled', false);
+            ___this._playing = false;
+        });
+        btnAhead.click(function () {
+            ___this.currentValue = ___this.currentValue + ___this._step;
+        });
+        btnBack.click(function () {
+            ___this.currentValue = ___this.currentValue - ___this._step;
+        });
+    }
+    MediaControl.prototype.stopPlaying = function () {
+        if (this._playing) {
+            this._$btnStop.trigger('click');
+        }
+    };
+    Object.defineProperty(MediaControl.prototype, "playing", {
+        get: function () {
+            return this._playing;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "min", {
+        get: function () {
+            return this._min;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "max", {
+        get: function () {
+            return this._max;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "step", {
+        get: function () {
+            return this._step;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "currentValue", {
+        get: function () {
+            return this._currentValue;
+        },
+        set: function (newValue) {
+            if (newValue > this._max) {
+                newValue = this._min;
+            }
+            else if (newValue < this._min) {
+                newValue = this._max;
+            }
+            this._currentValue = newValue;
+            this._$slider.val(this._currentValue.toFixed(2));
+            if (this._showAsDate) {
+                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+            }
+            else {
+                this._$valLabelVal.html(this.currentValue.toString());
+            }
+            this._func(newValue);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * set min and max value with step
+     * @param {number} newMin the new min
+     * @param {number} newMax the new mas
+     * @param {number} [newValue=newMin] the value to set
+     * @param {number} [newStep=(newMax-newMin)/20] step value
+     */
+    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
+        this._min = newMin;
+        this._max = newMax;
+        newValue = typeof newValue == 'number' ? newValue : newMin;
+        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
+        this._currentValue = newValue;
+        this._step = newStep;
+        this._$slider.prop('min', this.min.toString());
+        this._$slider.prop('max', this.max.toString());
+        this._$slider.prop('step', this.step.toString());
+        this._$slider.val(this.currentValue.toString());
+        if (this._showAsDate) {
+            this._$valLabelMin.html(timeToLocalDateString(this._min));
+            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+            this._$valLabelMax.html(timeToLocalDateString(this._max));
+        }
+        else {
+            this._$valLabelMin.html(this._min.toString());
+            this._$valLabelVal.html(this.currentValue.toString());
+            this._$valLabelMax.html(this._max.toString());
+        }
+    };
+    Object.defineProperty(MediaControl.prototype, "changeFunction", {
+        /**
+         *
+         * @param {mediaCallback} newFunc the callback on change
+         */
+        set: function (newFunc) {
+            this._func = newFunc;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return MediaControl;
+}());
+exports.MediaControl = MediaControl;
+nm.MediaControl = MediaControl;
+//# sourceMappingURL=animate-buttons.js.map
\ No newline at end of file
diff --git a/lib-ts/domUtil/animate-buttons.js.map b/lib-ts/domUtil/animate-buttons.js.map
new file mode 100644
index 0000000..662c079
--- /dev/null
+++ b/lib-ts/domUtil/animate-buttons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"animate-buttons.js","sourceRoot":"","sources":["../../src-ts/domUtil/animate-buttons.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/domUtil/range-change.d.ts b/lib-ts/domUtil/range-change.d.ts
new file mode 100644
index 0000000..944ff5f
--- /dev/null
+++ b/lib-ts/domUtil/range-change.d.ts
@@ -0,0 +1,28 @@
+/**
+ * callback on range change interaction, context of this is the firing dom element
+ * @callback rangeChangeCallback
+ * @param {number} newValue
+ * @param {number} ratio value from 0 to 1 relative of the value to the min and max
+ * @param {object} evt
+ */
+/***
+ * callback funcion after the slider has been moved
+ */
+export interface rangeChangedCallback {
+    /**
+     *
+     * @param newValue new value of the slider
+     * @param ratio ratio from low to high, 0 to 1
+     * @param evt the original event
+     */
+    (newValue: number, ratio: number, evt: Event): any;
+}
+/**
+ * Add a variety of listeners for range inputs applied to a common callback
+ * @param  $slider - jquery reference to the slider
+ * @param {rangeChangeCallback} callback - the callback
+ * @param {number} [changeTimeout=75] before the callback is called
+ * @this {jQuery}
+ * @returns {jQuery} the jQuery object
+ */
+export declare function rangeChange($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number): any;
diff --git a/lib-ts/domUtil/range-change.js b/lib-ts/domUtil/range-change.js
new file mode 100644
index 0000000..95ae2ec
--- /dev/null
+++ b/lib-ts/domUtil/range-change.js
@@ -0,0 +1,94 @@
+"use strict";
+var mouseIn = false;
+var mouseDown = false;
+var timeout = null;
+var dragged = false;
+var lastVal;
+var $ = require('jquery');
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+function triggerCallback(callback, evt) {
+    "use strict";
+    var val = parseFloat(this.value);
+    var min = parseFloat(this.min);
+    var max = parseFloat(this.max);
+    var step = parseFloat(this.step);
+    if (max - val < step) {
+        val = max;
+    }
+    var percent = (val - min) / (max - min);
+    if (typeof lastVal == 'number' && val == lastVal) {
+        return;
+    }
+    lastVal = val;
+    callback(val, percent, evt);
+}
+/**
+ * Add a variety of listeners for range inputs applied to a common callback
+ * @param  $slider - jquery reference to the slider
+ * @param {rangeChangeCallback} callback - the callback
+ * @param {number} [changeTimeout=75] before the callback is called
+ * @this {jQuery}
+ * @returns {jQuery} the jQuery object
+ */
+function rangeChange($slider, callback, changeTimeout) {
+    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
+    $slider.mouseenter(function () {
+        mouseIn = true;
+    });
+    $slider.mouseleave(function () {
+        mouseIn = false;
+        mouseDown = false;
+    });
+    $slider.mousedown(function () {
+        mouseDown = true;
+    });
+    $slider.mouseup(function () {
+        mouseDown = false;
+    });
+    $slider.mousemove(
+    /**
+     *
+     * @param {object} evt - event properties
+     * @this {HTMLElement}
+     */
+    function (evt) {
+        if (!(mouseIn && mouseDown)) {
+            return;
+        }
+        dragged = true;
+        if (lastVal == this['value']) {
+            return;
+        }
+        lastVal = this['value'];
+        if (timeout != null) {
+            clearTimeout(timeout);
+        }
+        var _this = this;
+        timeout = setTimeout(function () {
+            triggerCallback.call(_this, callback, evt);
+            timeout = null;
+        }, changeTimeout);
+    });
+    $slider.keyup(
+    /**
+     *
+     * @param {object} evt - event properties
+     */
+    function (evt) {
+        if (evt.keyCode == 37 || evt.keyCode == 39) {
+            triggerCallback.call(this, callback, evt);
+        }
+    });
+    $slider.change(function (evt) {
+        if (dragged) {
+            dragged = false;
+            return;
+        }
+        triggerCallback.call(this, callback, evt);
+    });
+    return this;
+}
+exports.rangeChange = rangeChange;
+//# sourceMappingURL=range-change.js.map
\ No newline at end of file
diff --git a/lib-ts/domUtil/range-change.js.map b/lib-ts/domUtil/range-change.js.map
new file mode 100644
index 0000000..04f5798
--- /dev/null
+++ b/lib-ts/domUtil/range-change.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"range-change.js","sourceRoot":"","sources":["../../src-ts/domUtil/range-change.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/index.d.ts b/lib-ts/index.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/index.js b/lib-ts/index.js
new file mode 100644
index 0000000..fa69a5a
--- /dev/null
+++ b/lib-ts/index.js
@@ -0,0 +1,2 @@
+"use strict";
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib-ts/index.js.map b/lib-ts/index.js.map
new file mode 100644
index 0000000..f9117bd
--- /dev/null
+++ b/lib-ts/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src-ts/index.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/animate-buttons.d.ts b/lib-ts/jquery-plugin/animate-buttons.d.ts
new file mode 100644
index 0000000..f237ddf
--- /dev/null
+++ b/lib-ts/jquery-plugin/animate-buttons.d.ts
@@ -0,0 +1 @@
+export default undefined;
diff --git a/lib-ts/jquery-plugin/animate-buttons.js b/lib-ts/jquery-plugin/animate-buttons.js
new file mode 100644
index 0000000..05c8955
--- /dev/null
+++ b/lib-ts/jquery-plugin/animate-buttons.js
@@ -0,0 +1,214 @@
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+"use strict";
+var $ = require('jquery');
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('jQueryPlugin');
+/**
+ * @callback mediaCallback
+ * @param {number} tm
+ */
+function timeToLocalDateString(tm) {
+    "use strict";
+    var d = new Date(tm);
+    var p1 = d.toLocaleTimeString().split(' ');
+    var p2 = p1[0].split(':');
+    p2 = p2.slice(0, 2);
+    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
+}
+var MediaControl = (function () {
+    function MediaControl(jQueryElement, min, max, val, step, func, playInterval, dateFormat) {
+        this._container = jQueryElement;
+        this._playInterval = playInterval;
+        this._interval = undefined;
+        this._func = func;
+        this._dateFormat = dateFormat;
+        this._currentValue = undefined;
+        this._min = undefined;
+        this._max = undefined;
+        this._step = undefined;
+        this._playing = false;
+        var htmlStr = '<span class="media-player-button media-back"></span>' +
+            '<span class="media-player-button media-play"></span>' +
+            '<span class="media-player-button media-pause media-disabled"></span>' +
+            '<span class="media-player-button media-stop media-disabled" ></span>' +
+            '<span class="media-player-button media-ahead"></span>' +
+            "<input type=\"range\">" +
+            "<div class=\"media-control-value-label-container\">" +
+            "<span class=\"media-control-value-label-min\"></span>" +
+            "<span class=\"media-control-value-label-val\"></span>" +
+            "<span class=\"media-control-value-label-max\"></span>" +
+            "</div>";
+        this._container.append(htmlStr);
+        var btnPause = this._container.find('.media-pause');
+        var btnPlay = this._container.find('.media-play');
+        this._$btnStop = this._container.find('.media-stop');
+        var btnAhead = this._container.find('.media-ahead');
+        var btnBack = this._container.find('.media-back');
+        this._$slider = this._container.find('input[type=range]');
+        this._$valLabelMin = this._container.find('.media-control-value-label-min');
+        this._$valLabelVal = this._container.find('.media-control-value-label-val');
+        this._$valLabelMax = this._container.find('.media-control-value-label-max');
+        this.setMinMaxValueStep(min, max, val, step);
+        var _this = this;
+        this._$slider.rangeChange(function (newVal, ratio, evt) {
+            _this.currentValue = newVal;
+        }, 100);
+        btnPlay.click(function () {
+            var $this = $(this);
+            $this.addClass('media-disabled');
+            _this._$btnStop.removeClass('media-disabled');
+            btnAhead.addClass('media-locked');
+            btnBack.addClass('media-locked');
+            _this._$slider.prop('disabled', true);
+            _this._playing = true;
+            _this._interval = setInterval(function () {
+                _this.currentValue += _this._step;
+            }, _this._playInterval);
+        });
+        this._$btnStop.click(function () {
+            clearInterval(_this._interval);
+            var $this = $(this);
+            $this.addClass('media-disabled');
+            btnPlay.removeClass('media-disabled');
+            btnAhead.removeClass('media-locked');
+            btnBack.removeClass('media-locked');
+            _this._$slider.prop('disabled', false);
+            _this._playing = false;
+        });
+        btnAhead.click(function () {
+            _this.currentValue = _this.currentValue + _this._step;
+        });
+        btnBack.click(function () {
+            _this.currentValue = _this.currentValue - _this._step;
+        });
+    }
+    MediaControl.prototype.stopPlaying = function () {
+        if (this._playing) {
+            this._$btnStop.trigger('click');
+        }
+    };
+    Object.defineProperty(MediaControl.prototype, "playing", {
+        get: function () {
+            return this._playing;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "min", {
+        get: function () {
+            return this._min;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "max", {
+        get: function () {
+            return this._max;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "step", {
+        get: function () {
+            return this._step;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MediaControl.prototype, "currentValue", {
+        get: function () {
+            return this._currentValue;
+        },
+        set: function (newValue) {
+            if (newValue > this._max) {
+                newValue = this._min;
+            }
+            else if (newValue < this._min) {
+                newValue = this._max;
+            }
+            this._currentValue = newValue;
+            this._$slider.val(this._currentValue.toFixed(2));
+            if (this._dateFormat) {
+                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+            }
+            else {
+                this._$valLabelVal.html(this.currentValue.toString());
+            }
+            this._func(newValue);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * set min and max value with step
+     * @param {number} newMin the new min
+     * @param {number} newMax the new mas
+     * @param {number} [newValue=newMin] the value to set
+     * @param {number} [newStep=(newMax-newMin)/20] step value
+     */
+    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
+        this._min = newMin;
+        this._max = newMax;
+        newValue = typeof newValue == 'number' ? newValue : newMin;
+        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
+        this._currentValue = newValue;
+        this._step = newStep;
+        this._$slider.prop('min', this.min.toString());
+        this._$slider.prop('max', this.max.toString());
+        this._$slider.prop('step', this.step.toString());
+        this._$slider.val(this.currentValue.toString());
+        if (this._dateFormat) {
+            this._$valLabelMin.html(timeToLocalDateString(this._min));
+            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+            this._$valLabelMax.html(timeToLocalDateString(this._max));
+        }
+        else {
+            this._$valLabelMin.html(this._min.toString());
+            this._$valLabelVal.html(this.currentValue.toString());
+            this._$valLabelMax.html(this._max.toString());
+        }
+    };
+    Object.defineProperty(MediaControl.prototype, "changeFunction", {
+        /**
+         *
+         * @param {mediaCallback} newFunc the callback on change
+         */
+        set: function (newFunc) {
+            this._func = newFunc;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return MediaControl;
+}());
+nm.MediaControl = MediaControl;
+/**
+ * Adds a media control to a container
+ * @param {number} [min=0] the min
+ * @param {number} [max=100] the max
+ * @param {number} [val=0] the val
+ * @param {number} [step=1] the step
+ * @param {mediaCallback} [func=function (n) {console.log('default function', n);}] media change callback function
+ * @param {number} [playInterval=500] play interval
+ * @param {boolean} [dateFormat=false] date format
+ * @this {jQuery}
+ * @returns {MediaControl} the Media control object
+ */
+$.fn.mediaControl = function (min, max, val, step, func, playInterval, dateFormat) {
+    min = typeof min == 'number' ? min : 0;
+    max = typeof max == 'number' ? max : 100;
+    val = typeof val == 'number' ? val : 0;
+    step = typeof step == 'number' ? step : 1;
+    func = typeof func == 'function' ? func : function (n) {
+        console.log('default function', n);
+    };
+    playInterval = typeof playInterval == 'number' ? playInterval : 500;
+    dateFormat = typeof dateFormat == 'boolean' ? dateFormat : false;
+    this.addClass('media-control-container');
+    return new MediaControl(this, min, max, val, step, func, playInterval, dateFormat);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = undefined;
+//# sourceMappingURL=animate-buttons.js.map
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/animate-buttons.js.map b/lib-ts/jquery-plugin/animate-buttons.js.map
new file mode 100644
index 0000000..5ece3e3
--- /dev/null
+++ b/lib-ts/jquery-plugin/animate-buttons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"animate-buttons.js","sourceRoot":"","sources":["../../src-ts/jquery-plugin/animate-buttons.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/day-range.d.ts b/lib-ts/jquery-plugin/day-range.d.ts
new file mode 100644
index 0000000..68533b2
--- /dev/null
+++ b/lib-ts/jquery-plugin/day-range.d.ts
@@ -0,0 +1,21 @@
+export declare class DayRange {
+    _workingDayRange: number;
+    _$startDate: JQuery;
+    _$endDate: JQuery;
+    _maxDateRange: number;
+    _startDate: Date;
+    _endDate: Date;
+    /**
+     * constructor for the date range
+     * @param {number} dayRange number of days
+     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
+     */
+    constructor(dayRange: any, jQueryRef: any);
+    /**
+     *
+     * @param val
+     */
+    startDate: Date;
+    endDate: Date;
+}
+export default DayRange;
diff --git a/lib-ts/jquery-plugin/day-range.js b/lib-ts/jquery-plugin/day-range.js
new file mode 100644
index 0000000..aac449f
--- /dev/null
+++ b/lib-ts/jquery-plugin/day-range.js
@@ -0,0 +1,96 @@
+"use strict";
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('jQueryPlugin');
+var $ = require('jquery');
+require('jquery-ui');
+var DayRange = (function () {
+    /**
+     * constructor for the date range
+     * @param {number} dayRange number of days
+     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
+     */
+    function DayRange(dayRange, jQueryRef) {
+        this._workingDayRange = dayRange - 1;
+        var pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
+            '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
+            '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' +
+            '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
+        jQueryRef.append(pickerHtml);
+        this._$startDate = $('#start-date');
+        this._$endDate = $('#end-date');
+        this._$startDate['datepicker']();
+        this._$endDate['datepicker']();
+        this._startDate = null;
+        this._endDate = null;
+        var dte1 = new Date();
+        dte1.setHours(0, 0, 0, 0);
+        var dte2 = new Date(dte1.getTime());
+        dte2.setDate(dte2.getDate() + dayRange);
+        dte2.setHours(23, 59, 59, 0);
+        this._maxDateRange = dte2.getTime() - dte1.getTime();
+        var _this = this;
+        //add event listeners
+        this._$startDate.change(function () {
+            _this.startDate = this.value;
+        });
+        this._$endDate.change(function () {
+            _this.endDate = this.value;
+        });
+        // initialize
+        this.endDate = new Date();
+    }
+    Object.defineProperty(DayRange.prototype, "startDate", {
+        get: function () {
+            return this._startDate;
+        },
+        /**
+         *
+         * @param val
+         */
+        set: function (val) {
+            this._startDate = val;
+            this._startDate.setHours(0, 0, 0, 0);
+            this._$startDate.val(this._startDate.toLocaleDateString());
+            if (this.endDate == null ||
+                this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||
+                this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+                var tmpDate = new Date(this._startDate.getTime());
+                tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
+                this.endDate = new Date(tmpDate.getTime());
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(DayRange.prototype, "endDate", {
+        get: function () {
+            return this._endDate;
+        },
+        set: function (val) {
+            this._endDate = val;
+            this._endDate.setHours(23, 59, 59, 0);
+            this._$endDate.val(this._endDate.toLocaleDateString());
+            if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+                var tmpDate = new Date(this._endDate.getTime());
+                tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
+                this.startDate = new Date(tmpDate.getTime());
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return DayRange;
+}());
+exports.DayRange = DayRange;
+nm.DayRange = DayRange;
+/**
+ * Adds day range control
+ * @param {number} dayRange the number of days
+ * @returns {DayRange} the day range object
+ */
+jQuery.fn.dayRange = function (dayRange) {
+    return new DayRange(dayRange, this);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = DayRange;
+//# sourceMappingURL=day-range.js.map
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/day-range.js.map b/lib-ts/jquery-plugin/day-range.js.map
new file mode 100644
index 0000000..91e5b98
--- /dev/null
+++ b/lib-ts/jquery-plugin/day-range.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"day-range.js","sourceRoot":"","sources":["../../src-ts/jquery-plugin/day-range.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/range-change.d.ts b/lib-ts/jquery-plugin/range-change.d.ts
new file mode 100644
index 0000000..90c1de9
--- /dev/null
+++ b/lib-ts/jquery-plugin/range-change.d.ts
@@ -0,0 +1,20 @@
+/**
+ * callback on range change interaction, context of this is the firing dom element
+ * @callback rangeChangeCallback
+ * @param {number} newValue
+ * @param {number} ratio value from 0 to 1 relative of the value to the min and max
+ * @param {object} evt
+ */
+/***
+ * callback funcion after the slider has been moved
+ */
+export interface rangeChangedCallback {
+    /**
+     *
+     * @param newValue new value of the slider
+     * @param ratio ratio from low to high, 0 to 1
+     * @param evt the original event
+     */
+    (newValue: number, ratio: number, evt: Event): any;
+}
+export default undefined;
diff --git a/lib-ts/jquery-plugin/range-change.js b/lib-ts/jquery-plugin/range-change.js
new file mode 100644
index 0000000..4015762
--- /dev/null
+++ b/lib-ts/jquery-plugin/range-change.js
@@ -0,0 +1,95 @@
+"use strict";
+var mouseIn = false;
+var mouseDown = false;
+var timeout = null;
+var dragged = false;
+var lastVal;
+var $ = require('jquery');
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+function triggerCallback(callback, evt) {
+    "use strict";
+    var val = parseFloat(this.value);
+    var min = parseFloat(this.min);
+    var max = parseFloat(this.max);
+    var step = parseFloat(this.step);
+    if (max - val < step) {
+        val = max;
+    }
+    var percent = (val - min) / (max - min);
+    if (typeof lastVal == 'number' && val == lastVal) {
+        return;
+    }
+    lastVal = val;
+    callback(val, percent, evt);
+}
+/**
+ * Add a variety of listeners for range inputs applied to a common callback
+ * @param {rangeChangeCallback} callback - the callback
+ * @param {number} [changeTimeout=75] before the callback is called
+ * @this {jQuery}
+ * @returns {jQuery} the jQuery object
+ */
+$.fn.rangeChange = function (callback, changeTimeout) {
+    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
+    var _this = this;
+    _this.mouseenter(function () {
+        mouseIn = true;
+    });
+    _this.mouseleave(function () {
+        mouseIn = false;
+        mouseDown = false;
+    });
+    _this.mousedown(function () {
+        mouseDown = true;
+    });
+    _this.mouseup(function () {
+        mouseDown = false;
+    });
+    _this.mousemove(
+    /**
+     *
+     * @param {object} evt - event properties
+     * @this {HTMLElement}
+     */
+    function (evt) {
+        if (!(mouseIn && mouseDown)) {
+            return;
+        }
+        dragged = true;
+        if (lastVal == this['value']) {
+            return;
+        }
+        lastVal = this['value'];
+        if (timeout != null) {
+            clearTimeout(timeout);
+        }
+        var _this = this;
+        timeout = setTimeout(function () {
+            triggerCallback.call(_this, callback, evt);
+            timeout = null;
+        }, changeTimeout);
+    });
+    _this.keyup(
+    /**
+     *
+     * @param {object} evt - event properties
+     */
+    function (evt) {
+        if (evt.keyCode == 37 || evt.keyCode == 39) {
+            triggerCallback.call(this, callback, evt);
+        }
+    });
+    _this.change(function (evt) {
+        if (dragged) {
+            dragged = false;
+            return;
+        }
+        triggerCallback.call(this, callback, evt);
+    });
+    return this;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = undefined;
+//# sourceMappingURL=range-change.js.map
\ No newline at end of file
diff --git a/lib-ts/jquery-plugin/range-change.js.map b/lib-ts/jquery-plugin/range-change.js.map
new file mode 100644
index 0000000..843c80c
--- /dev/null
+++ b/lib-ts/jquery-plugin/range-change.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"range-change.js","sourceRoot":"","sources":["../../src-ts/jquery-plugin/range-change.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/jquery/floatthead.d.ts b/lib-ts/jquery/floatthead.d.ts
new file mode 100644
index 0000000..b9d7f5e
--- /dev/null
+++ b/lib-ts/jquery/floatthead.d.ts
@@ -0,0 +1,20 @@
+/**
+ * implement the default window scroll
+ * @param {jQuery} $table - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export declare function windowScroll($table: any, options: any): void;
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $tableContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export declare function overflowScroll($table: JQuery, $tableContainer: JQuery, options?: any): void;
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $responsiveContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export declare function responsiveScroll($table: JQuery, $responsiveContainer: JQuery, options?: any): void;
diff --git a/lib-ts/jquery/floatthead.js b/lib-ts/jquery/floatthead.js
new file mode 100644
index 0000000..7d13dce
--- /dev/null
+++ b/lib-ts/jquery/floatthead.js
@@ -0,0 +1,49 @@
+"use strict";
+/**
+ * Created by gavorhes on 6/22/2016.
+ */
+var $ = require('jquery');
+global['jQuery'] = $;
+require('floatthead');
+/**
+ * implement the default window scroll
+ * @param {jQuery} $table - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+function windowScroll($table, options) {
+    "use strict";
+    options = options || {};
+    $table['floatThead'](options);
+}
+exports.windowScroll = windowScroll;
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $tableContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+function overflowScroll($table, $tableContainer, options) {
+    "use strict";
+    options = options || {};
+    options.scrollContainer = function (t) {
+        return $tableContainer;
+    };
+    $table['floatThead'](options);
+}
+exports.overflowScroll = overflowScroll;
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $responsiveContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+function responsiveScroll($table, $responsiveContainer, options) {
+    "use strict";
+    options = options || {};
+    options.responsiveContainer = function (t) {
+        return $responsiveContainer;
+    };
+    $table['floatThead'](options);
+}
+exports.responsiveScroll = responsiveScroll;
+//# sourceMappingURL=floatthead.js.map
\ No newline at end of file
diff --git a/lib-ts/jquery/floatthead.js.map b/lib-ts/jquery/floatthead.js.map
new file mode 100644
index 0000000..34d7cd3
--- /dev/null
+++ b/lib-ts/jquery/floatthead.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"floatthead.js","sourceRoot":"","sources":["../../src-ts/jquery/floatthead.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAErB,OAAO,CAAC,YAAY,CAAC,CAAC;AAItB;;;;GAIG;AACH,sBAA6B,MAAM,EAAE,OAAO;IACxC,YAAY,CAAC;IACb,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AALe,oBAAY,eAK3B,CAAA;AAED;;;;;GAKG;AACH,wBAA+B,MAAc,EAAE,eAAuB,EAAE,OAAQ;IAC5E,YAAY,CAAC;IACb,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,OAAO,CAAC,eAAe,GAAG,UAAC,CAAC;QACxB,MAAM,CAAC,eAAe,CAAC;IAC3B,CAAC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AATe,sBAAc,iBAS7B,CAAA;AAED;;;;;GAKG;AACH,0BAAiC,MAAc,EAAE,oBAA4B,EAAE,OAAQ;IACnF,YAAY,CAAC;IACb,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,OAAO,CAAC,mBAAmB,GAAG,UAAC,CAAC;QAC5B,MAAM,CAAC,oBAAoB,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AATe,wBAAgB,mBAS/B,CAAA"}
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBase.d.ts b/lib-ts/layers/LayerBase.d.ts
new file mode 100644
index 0000000..6bfe770
--- /dev/null
+++ b/lib-ts/layers/LayerBase.d.ts
@@ -0,0 +1,187 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+import { ol } from 'custom-ol';
+export interface LayerBaseOptions {
+    id?: string;
+    name?: string;
+    opacity?: number;
+    visible?: boolean;
+    minZoom?: number;
+    maxZoom?: number;
+    params?: any;
+    zIndex?: number;
+    loadCallback?: Function;
+    legendCollapse?: boolean;
+    legendCheckbox?: boolean;
+    legendContent?: string;
+}
+/**
+ * The base layer class
+ * @abstract
+ */
+export declare abstract class LayerBase {
+    _legendCheckbox: boolean;
+    _url: string;
+    _opacity: number;
+    _minZoom: number;
+    _maxZoom: number;
+    _visible: boolean;
+    _loaded: boolean;
+    _zIndex: number;
+    _legendContent: string;
+    _params: any;
+    id: string;
+    _name: string;
+    _source: ol.source.Source;
+    animate: boolean;
+    _legendCollapse: boolean;
+    _maxResolution: number;
+    _minResolution: number;
+    _$legendDiv: JQuery;
+    loadCallback: Function;
+    _olLayer: ol.layer.Layer;
+    _applyCollapseCalled: boolean;
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+    constructor(url: string, options?: LayerBaseOptions);
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    _load(): boolean;
+    /**
+     * Get the legend html, be sure to only add to the DOM once
+     * @returns {string} html for layer wrapped in a div
+     */
+    getLegendDiv(): string;
+    /**
+     *
+     * @param {string|undefined} additionalContent - additional content to add to legend
+     * @private
+     */
+    _addLegendContent(additionalContent: any): void;
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=] - additonal content to add
+     */
+    addLegendContent(additionalContent: any): void;
+    applyCollapse(): any;
+    /**
+     * trick to refresh the layer
+     */
+    refresh(): void;
+    /**
+     * get the legend content
+     * @type {string}
+     */
+    /**
+     * set the legend content directly
+     * @param {string} newVal - new content
+     * @protected
+     */
+    legendContent: string;
+    /**
+     * get the map get params
+     * @type {object}
+     */
+    /**
+     * set the map get params
+     * @param {object} newParams - new get params
+     * @protected
+     */
+    params: any;
+    /**
+     * get the minimum resolution
+     * @type {number|*}
+     */
+    minResolution: number;
+    /**
+     * get the maximum resolution
+     * @type {number|*}
+     */
+    maxResolution: number;
+    /**
+     * get min zoom
+     * @type {number|*}
+     */
+    minZoom: number;
+    /**
+     * get max zoom
+     * @type {number|*}
+     */
+    maxZoom: number;
+    /**
+     * get the url
+     * @type {string}
+     */
+    url: string;
+    /**
+     * Get the layer visibility
+     * @type {boolean}
+     */
+    /**
+     * set the visibility
+     * @param visibility
+     */
+    visible: boolean;
+    protected setVisible(visibility: boolean): void;
+    /**
+     * Get the layer opacity
+     * @type {number}
+     */
+    /**
+     * Set the layer opacity
+     * @param {number} opacity - layer opacity
+     */
+    opacity: number;
+    /**
+     * Get the layer name
+     * @type {string}
+     */
+    /**
+     * set the layer name
+     * @param {string} newName - the new name
+     */
+    name: string;
+    /**
+     * Check if the layer is loaded
+     * @type {boolean}
+     */
+    loaded: boolean;
+    /**
+     * get the layer source
+     * @type {*}
+     */
+    source: ol.source.Source;
+    protected getSource(): ol.source.Source;
+    /**
+     * get the z index
+     */
+    /**
+     * set the z index
+     */
+    zIndex: number;
+    protected setZIndex(newZ: number): void;
+    /**
+     * the the ol layer
+     */
+    olLayer: ol.layer.Layer;
+    protected getOlLayer(): ol.layer.Layer;
+}
+export default LayerBase;
diff --git a/lib-ts/layers/LayerBase.js b/lib-ts/layers/LayerBase.js
new file mode 100644
index 0000000..6665289
--- /dev/null
+++ b/lib-ts/layers/LayerBase.js
@@ -0,0 +1,384 @@
+"use strict";
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+var $ = require('jquery');
+var makeGuid_1 = require('../util/makeGuid');
+var zoomResolutionConvert = require('../olHelpers/zoomResolutionConvert');
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('layers');
+/**
+ * The base layer class
+ * @abstract
+ */
+var LayerBase = (function () {
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+    function LayerBase(url, options) {
+        options = options || {};
+        if (typeof url !== 'string') {
+            throw 'Invalid URL';
+        }
+        this._url = url;
+        this._params = typeof options.params == 'object' ? options.params : {};
+        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
+        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
+        this.id = options.id || makeGuid_1.default();
+        this._name = options.name || 'Unnamed Layer';
+        this.animate = false;
+        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
+        if (this._opacity > 1) {
+            this._opacity = 1;
+        }
+        else if (this._opacity < 0) {
+            this._opacity = 0;
+        }
+        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
+        this._source = undefined;
+        /**
+         *
+         * @protected
+         */
+        this._olLayer = undefined;
+        this._loaded = false;
+        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
+        if (typeof this._maxResolution !== 'undefined') {
+            this._maxResolution += 0.00001;
+        }
+        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
+        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
+        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
+        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
+        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
+        };
+        this._legendContent = '';
+        if (this._legendCheckbox) {
+            this._legendContent += ("<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " ") +
+                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
+            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
+        }
+        else {
+            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
+        }
+        this._$legendDiv = null;
+        this._applyCollapseCalled = false;
+        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
+    }
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    LayerBase.prototype._load = function () {
+        if (this.loaded == true) {
+            return true;
+        }
+        else {
+            this._loaded = true;
+            return false;
+        }
+    };
+    /**
+     * Get the legend html, be sure to only add to the DOM once
+     * @returns {string} html for layer wrapped in a div
+     */
+    LayerBase.prototype.getLegendDiv = function () {
+        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
+    };
+    /**
+     *
+     * @param {string|undefined} additionalContent - additional content to add to legend
+     * @private
+     */
+    LayerBase.prototype._addLegendContent = function (additionalContent) {
+        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
+        var addCollapse = additionalContent.indexOf('<ul>') > -1;
+        if (addCollapse) {
+            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
+        }
+        this._legendContent += additionalContent;
+        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        if (this._$legendDiv.length > 0) {
+            this._$legendDiv.append(additionalContent);
+            this.applyCollapse();
+        }
+    };
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=] - additonal content to add
+     */
+    LayerBase.prototype.addLegendContent = function (additionalContent) {
+        this._addLegendContent(additionalContent);
+    };
+    LayerBase.prototype.applyCollapse = function () {
+        if (this._applyCollapseCalled) {
+            console.log('collapse already applied');
+            return undefined;
+        }
+        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        if (this._$legendDiv.length > 0) {
+            var $expander = this._$legendDiv.find('.legend-items-expander');
+            if ($expander.length > 0) {
+                this._applyCollapseCalled = true;
+                $expander.click(function () {
+                    var $this = $(this);
+                    $this.siblings('ul').slideToggle();
+                    if ($this.hasClass('legend-layer-group-collapsed')) {
+                        $this.removeClass('legend-layer-group-collapsed');
+                        $this.html('&#9660;');
+                    }
+                    else {
+                        $this.addClass('legend-layer-group-collapsed');
+                        $this.html('&#9654;');
+                    }
+                });
+                if (this._legendCollapse) {
+                    $expander.trigger('click');
+                }
+            }
+        }
+    };
+    /**
+     * trick to refresh the layer
+     */
+    LayerBase.prototype.refresh = function () {
+        if (this.source) {
+            this.source.refresh();
+        }
+    };
+    Object.defineProperty(LayerBase.prototype, "legendContent", {
+        /**
+         * get the legend content
+         * @type {string}
+         */
+        get: function () {
+            return this._legendContent;
+        },
+        /**
+         * set the legend content directly
+         * @param {string} newVal - new content
+         * @protected
+         */
+        set: function (newVal) {
+            this._legendContent = newVal;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "params", {
+        /**
+         * get the map get params
+         * @type {object}
+         */
+        get: function () {
+            return this._params;
+        },
+        /**
+         * set the map get params
+         * @param {object} newParams - new get params
+         * @protected
+         */
+        set: function (newParams) {
+            this._params = newParams;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "minResolution", {
+        /**
+         * get the minimum resolution
+         * @type {number|*}
+         */
+        get: function () {
+            return this._minResolution;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "maxResolution", {
+        /**
+         * get the maximum resolution
+         * @type {number|*}
+         */
+        get: function () {
+            return this._maxResolution;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "minZoom", {
+        /**
+         * get min zoom
+         * @type {number|*}
+         */
+        get: function () {
+            return this._minZoom;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "maxZoom", {
+        /**
+         * get max zoom
+         * @type {number|*}
+         */
+        get: function () {
+            return this._maxZoom;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "url", {
+        /**
+         * get the url
+         * @type {string}
+         */
+        get: function () {
+            return this._url;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "visible", {
+        /**
+         * Get the layer visibility
+         * @type {boolean}
+         */
+        get: function () {
+            return this._visible;
+        },
+        /**
+         * set the visibility
+         * @param visibility
+         */
+        set: function (visibility) {
+            this.setVisible(visibility);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.setVisible = function (visibility) {
+        this._visible = visibility;
+        if (this.olLayer) {
+            this.olLayer.setVisible(this._visible);
+            if (visibility && !this._loaded) {
+                this._load();
+            }
+        }
+    };
+    Object.defineProperty(LayerBase.prototype, "opacity", {
+        /**
+         * Get the layer opacity
+         * @type {number}
+         */
+        get: function () {
+            return this._opacity;
+        },
+        /**
+         * Set the layer opacity
+         * @param {number} opacity - layer opacity
+         */
+        set: function (opacity) {
+            this._opacity = opacity;
+            if (this.olLayer) {
+                this.olLayer.setOpacity(this._opacity);
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "name", {
+        /**
+         * Get the layer name
+         * @type {string}
+         */
+        get: function () {
+            return this._name;
+        },
+        /**
+         * set the layer name
+         * @param {string} newName - the new name
+         */
+        set: function (newName) {
+            this._name = newName;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "loaded", {
+        /**
+         * Check if the layer is loaded
+         * @type {boolean}
+         */
+        get: function () {
+            return this._loaded;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "source", {
+        /**
+         * get the layer source
+         * @type {*}
+         */
+        get: function () {
+            return this.getSource();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.getSource = function () {
+        return this._source;
+    };
+    Object.defineProperty(LayerBase.prototype, "zIndex", {
+        /**
+         * get the z index
+         */
+        get: function () {
+            return this._zIndex;
+        },
+        /**
+         * set the z index
+         */
+        set: function (newZ) {
+            this._zIndex = newZ;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.setZIndex = function (newZ) {
+    };
+    Object.defineProperty(LayerBase.prototype, "olLayer", {
+        /**
+         * the the ol layer
+         */
+        get: function () {
+            return this.getOlLayer();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.getOlLayer = function () {
+        return this._olLayer;
+    };
+    return LayerBase;
+}());
+exports.LayerBase = LayerBase;
+nm.LayerBase = LayerBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerBase;
+//# sourceMappingURL=LayerBase.js.map
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBase.js.map b/lib-ts/layers/LayerBase.js.map
new file mode 100644
index 0000000..350912d
--- /dev/null
+++ b/lib-ts/layers/LayerBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerBase.js","sourceRoot":"","sources":["../../src-ts/layers/LayerBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBaseVector.d.ts b/lib-ts/layers/LayerBaseVector.d.ts
new file mode 100644
index 0000000..a5095e2
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVector.d.ts
@@ -0,0 +1,149 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+import { LayerBase, LayerBaseOptions } from './LayerBase';
+import MapMoveCls from '../olHelpers/mapMoveCls';
+import { ol } from 'custom-ol';
+export interface makeMapMoveParams {
+    /**
+     *
+     * @param lyr
+     * @param extent
+     * @param zoomLevel
+     */
+    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any;
+}
+export interface LayerBaseVectorOptions extends LayerBaseOptions {
+    autoLoad?: boolean;
+    style?: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction;
+    onDemand?: boolean;
+    onDemandDelay?: number;
+    mapMoveMakeGetParams?: makeMapMoveParams;
+    mapMoveObj?: MapMoveCls;
+}
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+export declare class LayerBaseVector extends LayerBase {
+    _olLayer: ol.layer.Vector;
+    _source: ol.source.Vector;
+    _style: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction;
+    _autoLoad: boolean;
+    _onDemand: boolean;
+    _onDemandDelay: number;
+    _mapMoveMakeGetParams: makeMapMoveParams;
+    _mapMoveParams: any;
+    _mapMove: MapMoveCls;
+    _projectionMap: ol.proj.Projection;
+    _projection4326: ol.proj.Projection;
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+    constructor(url: string, options: LayerBaseVectorOptions);
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+    addFeatures(featureCollection: any): void;
+    /**
+     * Before call to map move callback, can prevent call by returning false
+     * @param {number} zoom - zoom level
+     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+     * @returns {boolean} if the call should proceed
+     */
+    mapMoveBefore(zoom: any, evtType: any): boolean;
+    /**
+     * callback to generate the parameters passed in the get request
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    mapMoveMakeGetParams(extent: any, zoomLevel: any): void;
+    /**
+     * callback function on map move
+     * @param {object} d - the json response
+     */
+    mapMoveCallback(d: any): void;
+    /**
+     * clear features in the layer
+     */
+    clear(): void;
+    /**
+     * get on demand delay in miliseconds
+     */
+    onDemandDelay: number;
+    /**
+     * get if the layer is autoloaded
+     */
+    autoLoad: boolean;
+    /**
+     * get the style definition
+     */
+    /**
+     * set the style
+     * @param style - the style or function
+     */
+    style: ol.style.StyleFunction | Array<ol.style.Style> | ol.style.Style;
+    /**
+     * get the map CRS if it is defined by the map move object
+     */
+    mapCrs: string;
+    mapProj: ol.proj.Projection;
+    /**
+     * get the map move object
+     * @type {MapMoveCls|*}
+     */
+    mapMove: MapMoveCls;
+    /**
+     * map move params
+     * @type {object}
+     */
+    mapMoveParams: any;
+    /**
+     * Set the layer visibility
+     * @type {boolean}
+     * @override
+     */
+    visible: boolean;
+    /**
+     * get the layer vector source
+     * @override
+     */
+    source: ol.source.Vector;
+    /**
+     * array of ol features
+     */
+    features: Array<ol.Feature>;
+    /**
+     *
+     */
+    olLayer: ol.layer.Vector;
+    protected setZIndex(newZ: number): void;
+}
+export default LayerBaseVector;
diff --git a/lib-ts/layers/LayerBaseVector.js b/lib-ts/layers/LayerBaseVector.js
new file mode 100644
index 0000000..aa2b1ec
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVector.js
@@ -0,0 +1,291 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var LayerBase_1 = require('./LayerBase');
+var mapMove_1 = require('../olHelpers/mapMove');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var $ = require('jquery');
+var g = new custom_ol_1.ol.Map({});
+var nm = provide_1.default('layers');
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+var LayerBaseVector = (function (_super) {
+    __extends(LayerBaseVector, _super);
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+    function LayerBaseVector(url, options) {
+        _super.call(this, url, options);
+        options = options;
+        //prevent regular load if no url has been provided
+        if (this.url.trim() == '') {
+            this._loaded = true;
+        }
+        this._style = typeof options.style == 'undefined' ? undefined : options.style;
+        if (this.visible) {
+            this._autoLoad = true;
+        }
+        else {
+            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
+        }
+        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+        if (options.mapMoveObj) {
+            this._mapMove = options.mapMoveObj;
+        }
+        else {
+            this._mapMove = this._onDemand ? mapMove_1.default : undefined;
+        }
+        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
+            function () { return {}; };
+        if (this._onDemand) {
+            this._loaded = true;
+            this._mapMoveParams = {};
+            this._mapMove.checkInit();
+            this._mapMove.addVectorLayer(this);
+        }
+        this._source = new custom_ol_1.ol.source.Vector();
+        this._olLayer = new custom_ol_1.ol.layer.Vector({
+            source: this._source,
+            visible: this.visible,
+            style: this.style,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+        this._projectionMap = null;
+        this._projection4326 = new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+    }
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+    LayerBaseVector.prototype.addFeatures = function (featureCollection) {
+        console.log('Layer vector base addFeatures is a placeholder and does nothing');
+    };
+    /**
+     * Before call to map move callback, can prevent call by returning false
+     * @param {number} zoom - zoom level
+     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+     * @returns {boolean} if the call should proceed
+     */
+    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {
+        if (this.minZoom !== undefined) {
+            if (zoom < this.minZoom) {
+                return false;
+            }
+        }
+        if (this.maxZoom !== undefined) {
+            if (zoom > this.maxZoom) {
+                return false;
+            }
+        }
+        return this.visible;
+    };
+    /**
+     * callback to generate the parameters passed in the get request
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+        this._mapMoveParams = {};
+        $.extend(this._mapMoveParams, this.params);
+        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+    };
+    /**
+     * callback function on map move
+     * @param {object} d - the json response
+     */
+    LayerBaseVector.prototype.mapMoveCallback = function (d) {
+        if (this.source) {
+            this._source.clear();
+        }
+    };
+    /**
+     * clear features in the layer
+     */
+    LayerBaseVector.prototype.clear = function () {
+        if (this._source) {
+            this._source.clear();
+        }
+    };
+    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
+        /**
+         * get on demand delay in miliseconds
+         */
+        get: function () {
+            return this._onDemandDelay;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
+        /**
+         * get if the layer is autoloaded
+         */
+        get: function () {
+            return this._autoLoad;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "style", {
+        /**
+         * get the style definition
+         */
+        get: function () {
+            return this._style;
+        },
+        /**
+         * set the style
+         * @param style - the style or function
+         */
+        set: function (style) {
+            this._style = style;
+            this.olLayer.setStyle(this._style);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
+        /**
+         * get the map CRS if it is defined by the map move object
+         */
+        get: function () {
+            return this.mapProj == null ? null : this.mapProj.getCode();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapProj", {
+        get: function () {
+            if (this._projectionMap != null) {
+                return this._projectionMap;
+            }
+            if (this._mapMove) {
+                this._projectionMap = this._mapMove.map.getView().getProjection();
+                return this._projectionMap;
+            }
+            else {
+                return null;
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
+        /**
+         * get the map move object
+         * @type {MapMoveCls|*}
+         */
+        get: function () {
+            return this._mapMove;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
+        /**
+         * map move params
+         * @type {object}
+         */
+        get: function () {
+            return this._mapMoveParams;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "visible", {
+        get: function () {
+            return this._visible;
+        },
+        /**
+         * Set the layer visibility
+         * @type {boolean}
+         * @override
+         */
+        set: function (visibility) {
+            _super.prototype.setVisible.call(this, visibility);
+            if (this._onDemand) {
+                this.mapMove.triggerLyrLoad(this);
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "source", {
+        /**
+         * get the layer vector source
+         * @override
+         */
+        get: function () {
+            return this.getSource();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "features", {
+        /**
+         * array of ol features
+         */
+        get: function () {
+            return this.source.getFeatures();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
+        /**
+         *
+         */
+        get: function () {
+            return _super.prototype.getOlLayer.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBaseVector.prototype.setZIndex = function (newZ) {
+        this.olLayer.setZIndex(newZ);
+    };
+    return LayerBaseVector;
+}(LayerBase_1.LayerBase));
+exports.LayerBaseVector = LayerBaseVector;
+nm.LayerBaseVector = LayerBaseVector;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerBaseVector;
+//# sourceMappingURL=LayerBaseVector.js.map
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBaseVector.js.map b/lib-ts/layers/LayerBaseVector.js.map
new file mode 100644
index 0000000..e61a77e
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVector.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerBaseVector.js","sourceRoot":"","sources":["../../src-ts/layers/LayerBaseVector.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBaseVectorGeoJson.d.ts b/lib-ts/layers/LayerBaseVectorGeoJson.d.ts
new file mode 100644
index 0000000..f825259
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVectorGeoJson.d.ts
@@ -0,0 +1,68 @@
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+import { LayerBaseVector, LayerBaseVectorOptions } from './LayerBaseVector';
+import { ol } from 'custom-ol';
+import { MapMoveCls } from "../olHelpers/mapMoveCls";
+export interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions {
+    transform?: CrsTransform;
+    mapMoveObj?: MapMoveCls;
+}
+export interface CrsTransform {
+    dataProjection: ol.proj.Projection | string;
+    featureProjection: ol.proj.Projection | string;
+}
+/**
+ * The Vector GeoJson Layer
+ * @augments LayerBaseVector
+ */
+declare class LayerBaseVectorGeoJson extends LayerBaseVector {
+    _geoJsonFormat: ol.format.GeoJSON;
+    _transform: CrsTransform;
+    /**
+     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     */
+    constructor(url: any, options?: LayerBaseVectorGeoJsonOptions);
+    /**
+     * add feature collection
+     * @param {object} featureCollection - as geojson object
+     */
+    addFeatures(featureCollection: JSON): void;
+    /**
+     * trigger load features
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    _load(): boolean;
+    /**
+     * callback function on map move
+     * @param {object} d the json response
+     * @override
+     */
+    mapMoveCallback(d: any): void;
+}
+export default LayerBaseVectorGeoJson;
diff --git a/lib-ts/layers/LayerBaseVectorGeoJson.js b/lib-ts/layers/LayerBaseVectorGeoJson.js
new file mode 100644
index 0000000..539a743
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVectorGeoJson.js
@@ -0,0 +1,101 @@
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var LayerBaseVector_1 = require('./LayerBaseVector');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('layers');
+var $ = require('jquery');
+/**
+ * The Vector GeoJson Layer
+ * @augments LayerBaseVector
+ */
+var LayerBaseVectorGeoJson = (function (_super) {
+    __extends(LayerBaseVectorGeoJson, _super);
+    /**
+     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     */
+    function LayerBaseVectorGeoJson(url, options) {
+        url = typeof url == 'string' ? url : '';
+        _super.call(this, url, options);
+        this._geoJsonFormat = new custom_ol_1.ol.format.GeoJSON();
+        this._transform = options.transform || { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857" };
+        if (this.autoLoad || this.visible) {
+            this._load();
+        }
+    }
+    /**
+     * add feature collection
+     * @param {object} featureCollection - as geojson object
+     */
+    LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) {
+        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
+        }
+        else {
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
+        }
+    };
+    /**
+     * trigger load features
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    LayerBaseVectorGeoJson.prototype._load = function () {
+        var _this = this;
+        if (_super.prototype._load.call(this)) {
+            return true;
+        }
+        $.get(this._url, this._params, function (d) {
+            _this.addFeatures(d);
+            _this.loadCallback(_this);
+        }, 'json').fail(function () {
+            this._loaded = false;
+        });
+        return false;
+    };
+    /**
+     * callback function on map move
+     * @param {object} d the json response
+     * @override
+     */
+    LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) {
+        _super.prototype.mapMoveCallback.call(this, d);
+        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
+    };
+    return LayerBaseVectorGeoJson;
+}(LayerBaseVector_1.LayerBaseVector));
+nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerBaseVectorGeoJson;
+//# sourceMappingURL=LayerBaseVectorGeoJson.js.map
\ No newline at end of file
diff --git a/lib-ts/layers/LayerBaseVectorGeoJson.js.map b/lib-ts/layers/LayerBaseVectorGeoJson.js.map
new file mode 100644
index 0000000..cf60309
--- /dev/null
+++ b/lib-ts/layers/LayerBaseVectorGeoJson.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerBaseVectorGeoJson.js","sourceRoot":"","sources":["../../src-ts/layers/LayerBaseVectorGeoJson.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;AAEH,gCAAsD,mBAAmB,CAAC,CAAA;AAC1E,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,0BAAiB,WAAW,CAAC,CAAA;AAE7B,IAAI,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAY5B;;;GAGG;AACH;IAAqC,0CAAe;IAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,gCAAY,GAAG,EAAE,OAAuC;QACpD,GAAG,GAAG,OAAO,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;QACxC,kBAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAC,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAC,CAAC;QAErG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,4CAAW,GAAX,UAAY,iBAAuB;QAC/B,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAoB,CAAC,CAAC,CAAC;QAC7G,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,sCAAK,GAAL;QAAA,iBAkBC;QAhBG,EAAE,CAAC,CAAC,gBAAK,CAAC,KAAK,WAAE,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,OAAO,EACZ,UAAC,CAAC;YACE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CACf;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,gDAAe,GAAf,UAAgB,CAAC;QACb,gBAAK,CAAC,eAAe,YAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAoB,CAAC,CAAC,CAAC;IAC7F,CAAC;IACL,6BAAC;AAAD,CAAC,AA1FD,CAAqC,iCAAe,GA0FnD;AAED,EAAE,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACnD;kBAAe,sBAAsB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/layers/LayerEsriMapServer.d.ts b/lib-ts/layers/LayerEsriMapServer.d.ts
new file mode 100644
index 0000000..3bfec65
--- /dev/null
+++ b/lib-ts/layers/LayerEsriMapServer.d.ts
@@ -0,0 +1,55 @@
+/**
+ * Created by gavorhes on 12/7/2015.
+ */
+import { LayerBase, LayerBaseOptions } from './LayerBase';
+import { ol } from 'custom-ol';
+export interface LayerEsriMapServerOptions extends LayerBaseOptions {
+    addPopup?: boolean;
+    showLayers?: Array<number>;
+    useEsriStyle?: boolean;
+}
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+export declare class LayerEsriMapServer extends LayerBase {
+    _esriFormat: ol.format.EsriJSON;
+    _popupRequest: JQueryXHR;
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} [options] - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+     */
+    constructor(url: any, options?: LayerEsriMapServerOptions);
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    addLegendContent(additionalContent?: string): void;
+    getPopupInfo(queryParams: any): void;
+    /**
+     *
+     * @returns {ol.source.TileArcGISRest} the vector source
+     */
+    source: ol.source.TileArcGISRest;
+    /**
+     *
+     * @returns the ol layer
+     */
+    olLayer: ol.layer.Tile;
+}
+export default LayerEsriMapServer;
diff --git a/lib-ts/layers/LayerEsriMapServer.js b/lib-ts/layers/LayerEsriMapServer.js
new file mode 100644
index 0000000..bc5fec5
--- /dev/null
+++ b/lib-ts/layers/LayerEsriMapServer.js
@@ -0,0 +1,146 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 12/7/2015.
+ */
+var LayerBase_1 = require('./LayerBase');
+var esriToOl = require('../olHelpers/esriToOlStyle');
+var mapPopup_1 = require('../olHelpers/mapPopup');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('layers');
+var $ = require('jquery');
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+var LayerEsriMapServer = (function (_super) {
+    __extends(LayerEsriMapServer, _super);
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} [options] - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+     */
+    function LayerEsriMapServer(url, options) {
+        _super.call(this, url, options);
+        this._source = new custom_ol_1.ol.source.TileArcGISRest({
+            url: this.url == '' ? undefined : this.url,
+            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
+        });
+        this._olLayer = new custom_ol_1.ol.layer.Tile({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+        this._esriFormat = new custom_ol_1.ol.format.EsriJSON();
+        this._popupRequest = null;
+        this.addLegendContent();
+        if (options.addPopup) {
+            mapPopup_1.default.addMapServicePopup(this);
+        }
+    }
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
+        var urlCopy = this.url;
+        if (urlCopy[urlCopy.length - 1] !== '/') {
+            urlCopy += '/';
+        }
+        urlCopy += 'legend?f=pjson&callback=?';
+        var _this = this;
+        var superAddLegend = _super.prototype.addLegendContent;
+        $.get(urlCopy, {}, function (d) {
+            var newHtml = esriToOl.makeMapServiceLegend(d);
+            superAddLegend.call(_this, newHtml);
+        }, 'json');
+    };
+    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
+        if (!this.visible) {
+            return;
+        }
+        var urlCopy = this.url;
+        if (urlCopy[urlCopy.length - 1] != '/') {
+            urlCopy += '/';
+        }
+        urlCopy += 'identify?callback=?';
+        var _this = this;
+        if (this._popupRequest != null) {
+            this._popupRequest.abort();
+        }
+        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
+            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
+                var r = _a[_i];
+                var popupHtml = '<table class="esri-popup-table">';
+                for (var a in r['attributes']) {
+                    if (r['attributes'].hasOwnProperty(a)) {
+                        var attrVal = r['attributes'][a];
+                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
+                            continue;
+                        }
+                        var attr = a;
+                        if (attr.length > 14) {
+                            attr = attr.slice(0, 11) + '...';
+                        }
+                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
+                    }
+                }
+                popupHtml += '</table>';
+                mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+            }
+        }, 'json').always(function () {
+            _this._popupRequest = null;
+        });
+    };
+    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
+        /**
+         *
+         * @returns {ol.source.TileArcGISRest} the vector source
+         */
+        get: function () {
+            return _super.prototype.getSource.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
+        /**
+         *
+         * @returns the ol layer
+         */
+        get: function () {
+            return _super.prototype.getOlLayer.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return LayerEsriMapServer;
+}(LayerBase_1.LayerBase));
+exports.LayerEsriMapServer = LayerEsriMapServer;
+nm.LayerEsriMapServer = LayerEsriMapServer;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerEsriMapServer;
+//# sourceMappingURL=LayerEsriMapServer.js.map
\ No newline at end of file
diff --git a/lib-ts/layers/LayerEsriMapServer.js.map b/lib-ts/layers/LayerEsriMapServer.js.map
new file mode 100644
index 0000000..f6a38a2
--- /dev/null
+++ b/lib-ts/layers/LayerEsriMapServer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../src-ts/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/layers/LayerItsInventory.d.ts b/lib-ts/layers/LayerItsInventory.d.ts
new file mode 100644
index 0000000..571051f
--- /dev/null
+++ b/lib-ts/layers/LayerItsInventory.d.ts
@@ -0,0 +1,67 @@
+/**
+ * Created by gavorhes on 12/8/2015.
+ */
+import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
+/**
+ * Its Layer class
+ * @augments LayerBaseVectorGeoJson
+ */
+declare class LayerItsInventory extends LayerBaseVectorGeoJson {
+    /**
+     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
+     *
+     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+     *
+     * @param {object} [options.itsLineStyle=undefined] A single line style
+     * @param {string} options.itsLineStyle.color the line color as rgb or hex
+     * @param {number} [options.itsLineStyle.width=5] the line width
+     *
+     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
+     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
+     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
+     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
+     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+     *
+     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
+     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
+     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
+     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
+     */
+    constructor(options: any);
+    /**
+     * callback to generate the parameters passed in the get request
+     * @callback makeGetParams
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    mapMoveMakeGetParams(extent: any, zoomLevel: any): void;
+}
+export default LayerItsInventory;
diff --git a/lib-ts/layers/LayerItsInventory.js b/lib-ts/layers/LayerItsInventory.js
new file mode 100644
index 0000000..c274856
--- /dev/null
+++ b/lib-ts/layers/LayerItsInventory.js
@@ -0,0 +1,305 @@
+/**
+ * Created by gavorhes on 12/8/2015.
+ */
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var LayerBaseVectorGeoJson_1 = require('./LayerBaseVectorGeoJson');
+var mapPopup_1 = require('../olHelpers/mapPopup');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('layers');
+var $ = require('jquery');
+function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+    //make sure one and only one configuration is defined;
+    var configCount = 0;
+    if (typeof itsIcon == 'string') {
+        configCount++;
+    }
+    if (typeof itsLineStyle == 'object') {
+        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
+        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
+        configCount++;
+    }
+    if (typeof itsIconConfig == 'object') {
+        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
+        if (typeof itsIconConfig.iconArray == 'undefined') {
+            itsIconConfig.iconArray = [];
+        }
+        configCount++;
+    }
+    if (typeof itsLineConfig == 'object') {
+        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
+        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
+        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
+        if (typeof itsLineConfig.lineArray == 'undefined') {
+            itsLineConfig.lineArray = [];
+        }
+        // set the width if not defined
+        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+            if (itsLineConfig.lineArray[i].length == 3) {
+                itsLineConfig.lineArray[i].push(5);
+            }
+        }
+        configCount++;
+    }
+    if (configCount > 1) {
+        throw 'Only one style config can be defined';
+    }
+}
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {*} undefined, style, or style function
+ */
+function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+    if (itsIcon) {
+        return new custom_ol_1.ol.style.Style({
+            image: new custom_ol_1.ol.style.Icon({
+                src: _iconUrlRoot + itsIcon,
+                crossOrigin: 'anonymous'
+            })
+        });
+    }
+    else if (itsLineStyle) {
+        return new custom_ol_1.ol.style.Style({
+            stroke: new custom_ol_1.ol.style.Stroke({
+                color: itsLineStyle.color,
+                width: itsLineStyle.width
+            })
+        });
+    }
+    else if (itsIconConfig) {
+        return function (feature, resolution) {
+            var symbolProp = feature.getProperties()[itsIconConfig.prop];
+            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
+            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
+                var thisProp = itsIconConfig.iconArray[i];
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    iconUrl = _iconUrlRoot + thisProp[2];
+                    break;
+                }
+            }
+            return [new custom_ol_1.ol.style.Style({
+                    image: new custom_ol_1.ol.style.Icon({
+                        src: iconUrl,
+                        crossOrigin: 'anonymous'
+                    })
+                })];
+        };
+    }
+    else if (itsLineConfig) {
+        return function (feature) {
+            var symbolProp = feature.getProperties()[itsLineConfig.prop];
+            var colr = itsLineConfig.defaultColor || 'red';
+            var width = itsLineConfig.defaultWidth || 5;
+            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+                var thisProp = itsLineConfig.lineArray[i];
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    colr = thisProp[2];
+                    width = thisProp[3];
+                    break;
+                }
+            }
+            return [new custom_ol_1.ol.style.Style({
+                    stroke: new custom_ol_1.ol.style.Stroke({
+                        color: colr,
+                        width: width
+                    })
+                })];
+        };
+    }
+    else {
+        return undefined;
+    }
+}
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {string} html to be added to the legend
+ */
+function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+    var iconHeight = 17;
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+    if (itsIcon) {
+        return "<img src=\"" + (_iconUrlRoot + itsIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
+    }
+    else if (itsLineStyle) {
+        return "<hr style=\"height: " + itsLineStyle.width + "px; background-color: " + itsLineStyle.color + "\">";
+    }
+    else if (itsIconConfig) {
+        var outHtml = '';
+        outHtml += '<ul>';
+        for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) {
+            var a = _a[_i];
+            outHtml += "<li><span class=\"legend-layer-subitem\">" + a[1] + "</span><img src=\"" + (_iconUrlRoot + a[2]) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
+        }
+        outHtml += ("<li><span class=\"legend-layer-subitem\">" + itsIconConfig.defaultName + "</span>") +
+            ("<img src=\"" + (_iconUrlRoot + itsIconConfig.defaultIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\"></li>");
+        outHtml += '</ul>';
+        return outHtml;
+    }
+    else if (itsLineConfig) {
+        var outHtml = '';
+        outHtml += '<ul>';
+        for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) {
+            var ls = _c[_b];
+            outHtml += ("<li><span class=\"legend-layer-subitem\">" + ls[1] + "</span>") +
+                ("<hr style=\"height: " + ls[3] + "px; background-color: " + ls[2] + "\">");
+        }
+        outHtml += ("<li><span class=\"legend-layer-subitem\">" + itsLineConfig.defaultName + "</span>") +
+            ("<hr style=\"height: " + itsLineConfig.defaultWidth + "px; background-color: " + itsLineConfig.defaultColor + "\"></li>");
+        outHtml += '</ul>';
+        return outHtml;
+    }
+    else {
+        return '';
+    }
+}
+/**
+ * Its Layer class
+ * @augments LayerBaseVectorGeoJson
+ */
+var LayerItsInventory = (function (_super) {
+    __extends(LayerItsInventory, _super);
+    /**
+     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
+     *
+     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+     *
+     * @param {object} [options.itsLineStyle=undefined] A single line style
+     * @param {string} options.itsLineStyle.color the line color as rgb or hex
+     * @param {number} [options.itsLineStyle.width=5] the line width
+     *
+     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
+     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
+     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
+     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
+     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+     *
+     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
+     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
+     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
+     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
+     */
+    function LayerItsInventory(options) {
+        if (typeof options.itsType !== 'string') {
+            throw 'its type must be defined';
+        }
+        var addToLegend = '';
+        // define a style with the helper function if it is not explicitly defined
+        if (typeof options.style == 'undefined') {
+            options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+        }
+        options.params = typeof options.params == 'object' ? options.params : {};
+        $.extend(options.params, { format: 'JSON', resource: options.itsType });
+        _super.call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options);
+        //add any additional content to the legend
+        this.addLegendContent(addToLegend);
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
+        if (options.addPopup) {
+            mapPopup_1.default.addVectorPopup(this, function (props) {
+                return ("<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=" + props['featureGuid'] + "\" ") +
+                    "height=\"250\" width=\"350\"></iframe>";
+            });
+        }
+    }
+    /**
+     * callback to generate the parameters passed in the get request
+     * @callback makeGetParams
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
+        var lowerLeft = new custom_ol_1.ol.geom.Point([extent.minX, extent.minY]);
+        lowerLeft.transform(this.mapProj, this._projection4326);
+        var lowerLeftCoordinates = lowerLeft.getCoordinates();
+        var upperRight = new custom_ol_1.ol.geom.Point([extent.maxX, extent.maxY]);
+        upperRight.transform(this.mapProj, this._projection4326);
+        var upperRightCoordinates = upperRight.getCoordinates();
+        $.extend(this.mapMoveParams, {
+            L: lowerLeftCoordinates[0],
+            R: upperRightCoordinates[0],
+            B: lowerLeftCoordinates[1],
+            T: upperRightCoordinates[1]
+        });
+    };
+    return LayerItsInventory;
+}(LayerBaseVectorGeoJson_1.default));
+nm.LayerItsInventory = LayerItsInventory;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerItsInventory;
+//# sourceMappingURL=LayerItsInventory.js.map
\ No newline at end of file
diff --git a/lib-ts/layers/LayerItsInventory.js.map b/lib-ts/layers/LayerItsInventory.js.map
new file mode 100644
index 0000000..546df1e
--- /dev/null
+++ b/lib-ts/layers/LayerItsInventory.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerItsInventory.js","sourceRoot":"","sources":["../../src-ts/layers/LayerItsInventory.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/esriToOlStyle.d.ts b/lib-ts/olHelpers/esriToOlStyle.d.ts
new file mode 100644
index 0000000..5de40e1
--- /dev/null
+++ b/lib-ts/olHelpers/esriToOlStyle.d.ts
@@ -0,0 +1,47 @@
+import { ol } from 'custom-ol';
+export interface EsriResponse {
+    drawingInfo: {
+        renderer: EsriRenderer;
+    };
+    geometryType: string;
+}
+export interface EsriRenderer {
+    type: string;
+    symbol: EsriSymbol;
+    uniqueValueInfos: Array<{
+        label: string;
+        value: any;
+        symbol: EsriSymbol;
+    }>;
+}
+export interface EsriSymbol {
+    size: number;
+    type: string;
+    outline: {
+        color: string;
+        width: number;
+    };
+    color: string;
+    width: number;
+}
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+export declare function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse): {
+    style: ol.style.Style | ol.style.Style[] | ol.style.StyleFunction;
+    legend: string;
+};
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+export declare function makeMapServiceLegend(esriResponse: any): string;
diff --git a/lib-ts/olHelpers/esriToOlStyle.js b/lib-ts/olHelpers/esriToOlStyle.js
new file mode 100644
index 0000000..46ab613
--- /dev/null
+++ b/lib-ts/olHelpers/esriToOlStyle.js
@@ -0,0 +1,357 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 1/4/2016.
+ */
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('olHelpers.esriToOlStyle');
+/**
+ * This callback is displayed as part of the Requester class.
+ * @callback styleFunc
+ * @param {ol.Feature} feat - openlayers feature
+ * @param {number} resolution - map resolution
+ */
+/**
+ *
+ * @param {Array<number>} colorArray - input color array
+ * @param {number} opacity - the opacity 0 to 1
+ * @returns {string} rgba string
+ * @private
+ */
+function _colorArrayToRgba(colorArray, opacity) {
+    "use strict";
+    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
+}
+/**
+ * escape html charcters
+ * @param {string} str - input string
+ * @returns {string} escaped string
+ */
+function htmlEscape(str) {
+    return String(str)
+        .replace(/&/g, '&amp;')
+        .replace(/"/g, '&quot;')
+        .replace(/'/g, '&#39;')
+        .replace(/</g, '&lt;')
+        .replace(/>/g, '&gt;');
+}
+nm.htmlEscape = htmlEscape;
+var CommonSymbol = (function () {
+    /**
+     *
+     * @param symbolObj
+     * @param {number} opacity
+     */
+    function CommonSymbol(symbolObj, opacity) {
+        this.symbolObj = symbolObj;
+        this.opacity = opacity;
+        this.olStyle = undefined;
+        this.legendHtml = '';
+    }
+    return CommonSymbol;
+}());
+var PointSymbol = (function (_super) {
+    __extends(PointSymbol, _super);
+    function PointSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj.type) {
+            case 'esriSMS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                var outlineWidth = this.symbolObj.outline.width;
+                var radius = this.symbolObj.size;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    image: new custom_ol_1.ol.style.Circle({
+                        radius: radius,
+                        fill: new custom_ol_1.ol.style.Fill({
+                            color: innerColor
+                        }),
+                        stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth })
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
+                break;
+            case 'esriPMS':
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] })
+                });
+                this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return PointSymbol;
+}(CommonSymbol));
+var LineSymbol = (function (_super) {
+    __extends(LineSymbol, _super);
+    function LineSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj.type) {
+            case 'esriSLS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var lineWidth = this.symbolObj.width;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    stroke: new custom_ol_1.ol.style.Stroke({
+                        color: innerColor,
+                        //lineDash: [4],
+                        width: lineWidth
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+                this.legendHtml += "style=\"";
+                this.legendHtml += "background-color: " + innerColor + ";";
+                this.legendHtml += "width: 40px;";
+                this.legendHtml += "height: 4px;";
+                this.legendHtml += "position: relative;";
+                this.legendHtml += "display: inline-block;";
+                this.legendHtml += "top: -1px;";
+                this.legendHtml += "\"></span>";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return LineSymbol;
+}(CommonSymbol));
+var PolygonSymbol = (function (_super) {
+    __extends(PolygonSymbol, _super);
+    function PolygonSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj['type']) {
+            case 'esriSFS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                var outlineWidth = this.symbolObj.outline.width;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    stroke: new custom_ol_1.ol.style.Stroke({
+                        color: outerColor,
+                        //lineDash: [4],
+                        width: outlineWidth
+                    }),
+                    fill: new custom_ol_1.ol.style.Fill({
+                        color: innerColor
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+                this.legendHtml += "style=\"";
+                this.legendHtml += "background-color: " + innerColor + ";";
+                this.legendHtml += "border: solid " + outerColor + " 1px;";
+                this.legendHtml += "width: 40px;";
+                this.legendHtml += "height: 9px;";
+                this.legendHtml += "position: relative;";
+                this.legendHtml += "display: inline-block;";
+                this.legendHtml += "top: 2px;";
+                this.legendHtml += "\"></span>";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return PolygonSymbol;
+}(CommonSymbol));
+var SymbolGenerator = (function () {
+    function SymbolGenerator(esriResponse) {
+        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+        this.renderer = esriResponse.drawingInfo.renderer;
+        this.olStyle = undefined;
+        this.legendHtml = '';
+    }
+    return SymbolGenerator;
+}());
+var SingleSymbol = (function (_super) {
+    __extends(SingleSymbol, _super);
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the symbol class to use
+     */
+    function SingleSymbol(esriResponse, SymbolClass) {
+        _super.call(this, esriResponse);
+        this.symbol = this.renderer.symbol;
+        var symbolObj = new SymbolClass(this.symbol, this.opacity);
+        this.olStyle = symbolObj.olStyle;
+        this.legendHtml = symbolObj.legendHtml;
+    }
+    return SingleSymbol;
+}(SymbolGenerator));
+var UniqueValueSymbol = (function (_super) {
+    __extends(UniqueValueSymbol, _super);
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the Symbol class definition
+     */
+    function UniqueValueSymbol(esriResponse, SymbolClass) {
+        var _this = this;
+        _super.call(this, esriResponse);
+        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
+        this.propertyName = this.renderer['field1'];
+        this.defaultSymbol = this.renderer['defaultSymbol'];
+        if (this.defaultSymbol) {
+            var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
+            this.defaultStyle = symbolObj.olStyle;
+            this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml;
+        }
+        else {
+            this.defaultStyle = undefined;
+            this.defaultLabelHtml = 'other';
+        }
+        this.valueArray = [];
+        this.labelArray = [];
+        this.legendArray = [];
+        this.propertyStyleLookup = {};
+        for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) {
+            var uniqueVal = _a[_i];
+            this.labelArray.push(uniqueVal['label']);
+            this.valueArray.push(uniqueVal['value']);
+            var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
+            this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml);
+            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+        }
+        this.olStyle = function (feature) {
+            var checkProperties = feature.getProperties();
+            var checkProperty = checkProperties[_this.propertyName];
+            var returnValue;
+            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+                returnValue = [_this.propertyStyleLookup[checkProperty]];
+            }
+            else {
+                returnValue = [_this.defaultStyle];
+            }
+            return returnValue;
+        };
+        if (this.defaultLabelHtml !== null) {
+            this.legendArray.push(this.defaultLabelHtml);
+        }
+        this.legendHtml = '<ul>';
+        for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) {
+            var h = _c[_b];
+            this.legendHtml += "<li>" + h + "</li>";
+        }
+        this.legendHtml += '</ul>';
+    }
+    return UniqueValueSymbol;
+}(SymbolGenerator));
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+function makeFeatureServiceLegendAndSymbol(esriResponse) {
+    "use strict";
+    var renderer = esriResponse.drawingInfo.renderer;
+    var symbolLegendOut = null;
+    switch (renderer.type) {
+        case 'simple':
+            switch (esriResponse.geometryType) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse.geometryType + ' not handled');
+            }
+            break;
+        case 'uniqueValue':
+            switch (esriResponse.geometryType) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        default:
+            alert('not handled renderer type: ' + renderer['type']);
+    }
+    if (symbolLegendOut == null) {
+        return { style: undefined, legend: '' };
+    }
+    else {
+        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
+    }
+}
+exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+/**
+ *
+ * @param {object} lyrObject - the layer as defined in the response
+ * @param {boolean} [iconsOnly=false] use only icons
+ * @returns {string} legend html
+ */
+function mapServiceLegendItem(lyrObject, iconsOnly) {
+    if (iconsOnly === void 0) { iconsOnly = false; }
+    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
+    var layerName = lyrObject['layerName'];
+    var legendItems = lyrObject['legend'];
+    var legendHtml = '';
+    if (legendItems.length == 1) {
+        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
+    }
+    else {
+        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
+        for (var i = 0; i < legendItems.length; i++) {
+            legendHtml += "<li>";
+            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
+            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
+            legendHtml += "</li>";
+        }
+        legendHtml += '</ul>';
+    }
+    if (!iconsOnly) {
+        legendHtml = ("<span class=\"legend-layer-subitem\">" + layerName + "</span>") + legendHtml;
+    }
+    return legendHtml;
+}
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+function makeMapServiceLegend(esriResponse) {
+    "use strict";
+    var newLegendHtml = '';
+    var layers = esriResponse['layers'];
+    if (layers.length == 1) {
+        newLegendHtml += mapServiceLegendItem(layers[0], true);
+    }
+    else {
+        newLegendHtml += '<ul>';
+        for (var i = 0; i < layers.length; i++) {
+            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
+        }
+        newLegendHtml += '</ul>';
+    }
+    return newLegendHtml;
+}
+exports.makeMapServiceLegend = makeMapServiceLegend;
+nm.makeMapServiceLegend = makeMapServiceLegend;
+//# sourceMappingURL=esriToOlStyle.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/esriToOlStyle.js.map b/lib-ts/olHelpers/esriToOlStyle.js.map
new file mode 100644
index 0000000..0e4207c
--- /dev/null
+++ b/lib-ts/olHelpers/esriToOlStyle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esriToOlStyle.js","sourceRoot":"","sources":["../../src-ts/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/extentUtil.d.ts b/lib-ts/olHelpers/extentUtil.d.ts
new file mode 100644
index 0000000..34f326b
--- /dev/null
+++ b/lib-ts/olHelpers/extentUtil.d.ts
@@ -0,0 +1,14 @@
+import { ol } from 'custom-ol';
+/**
+ *
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
+ * @returns {ol.Extent|Array<number>|*} - collective extent
+ */
+export declare function calculateExtent(layers: any): ol.Extent | Array<number>;
+/**
+ * given one or an array of layers, fit to the map
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector} layers - array of layers or single
+ * @param {ol.Map} mp - the map to fit
+ * @param {number|undefined} [zoomOut=undefined] - levels to zoom out after fit
+ */
+export declare function fitToMap(layers: any, mp: ol.Map, zoomOut?: number): void;
diff --git a/lib-ts/olHelpers/extentUtil.js b/lib-ts/olHelpers/extentUtil.js
new file mode 100644
index 0000000..319d756
--- /dev/null
+++ b/lib-ts/olHelpers/extentUtil.js
@@ -0,0 +1,70 @@
+"use strict";
+/**
+ * Created by gavorhes on 7/18/2016.
+ */
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('util');
+/**
+ *
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
+ * @returns {ol.Extent|Array<number>|*} - collective extent
+ */
+function calculateExtent(layers) {
+    "use strict";
+    if (layers.constructor.name != 'Array') {
+        layers = [layers];
+    }
+    var hasExtent = false;
+    var minX = 10E100;
+    var minY = 10E100;
+    var maxX = -10E100;
+    var maxY = -10E100;
+    for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+        var lyr = layers_1[_i];
+        /**
+         *
+         * @type {ol.layer.Vector}
+         */
+        var olLayer = lyr['olLayer'] || lyr;
+        if (olLayer.getSource().getFeatures().length > 0) {
+            hasExtent = true;
+            var ext = olLayer.getSource().getExtent();
+            minX = ext[0] < minX ? ext[0] : minX;
+            minY = ext[1] < minY ? ext[1] : minY;
+            maxX = ext[2] > maxX ? ext[2] : maxX;
+            maxY = ext[3] > maxY ? ext[3] : maxY;
+        }
+    }
+    if (hasExtent) {
+        return [minX, minY, maxX, maxY];
+    }
+    else {
+        return undefined;
+    }
+}
+exports.calculateExtent = calculateExtent;
+nm.calculateExtent = calculateExtent;
+/**
+ * given one or an array of layers, fit to the map
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector} layers - array of layers or single
+ * @param {ol.Map} mp - the map to fit
+ * @param {number|undefined} [zoomOut=undefined] - levels to zoom out after fit
+ */
+function fitToMap(layers, mp, zoomOut) {
+    "use strict";
+    /**
+     *
+     * @type {ol.Extent|undefined}
+     */
+    var ext = calculateExtent(layers);
+    if (typeof ext == 'undefined') {
+        return;
+    }
+    mp.getView().fit(ext, mp.getSize());
+    if (typeof zoomOut == 'number') {
+        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);
+    }
+}
+exports.fitToMap = fitToMap;
+nm.calculateExtent = calculateExtent;
+//# sourceMappingURL=extentUtil.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/extentUtil.js.map b/lib-ts/olHelpers/extentUtil.js.map
new file mode 100644
index 0000000..7cd0531
--- /dev/null
+++ b/lib-ts/olHelpers/extentUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"extentUtil.js","sourceRoot":"","sources":["../../src-ts/olHelpers/extentUtil.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,wBAAoB,iBAAiB,CAAC,CAAA;AAItC,IAAM,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAE3B;;;;GAIG;AACH,yBAAgC,MAAM;IAClC,YAAY,CAAC;IAEb,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,CAAA,CAAC;QACpC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IACnB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IAEnB,GAAG,CAAC,CAAY,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,CAAC;QAAlB,IAAI,GAAG,eAAA;QAER;;;WAGG;QACH,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;QAGpC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,CAAC;KACJ;IAED,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACZ,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAtCe,uBAAe,kBAsC9B,CAAA;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;;GAKG;AACH,kBAAyB,MAAM,EAAE,EAAU,EAAE,OAAgB;IACzD,YAAY,CAAC;IAEb;;;OAGG;IACH,IAAI,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAElC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,CAAA,CAAC;QAC3B,MAAM,CAAC;IACX,CAAC;IAED,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,CAAC,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAA,CAAC;QAC5B,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAC3D,CAAC;AAEL,CAAC;AAnBe,gBAAQ,WAmBvB,CAAA;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/layerSwipe.d.ts b/lib-ts/olHelpers/layerSwipe.d.ts
new file mode 100644
index 0000000..793b815
--- /dev/null
+++ b/lib-ts/olHelpers/layerSwipe.d.ts
@@ -0,0 +1,30 @@
+import { LayerBase } from "../layers/LayerBase";
+import { ol } from 'custom-ol';
+declare class LayerSwipe {
+    leftLayers: Array<LayerBase>;
+    rightLayers: Array<LayerBase>;
+    _percentRight: number;
+    _map: ol.Map;
+    $mapElement: JQuery;
+    $swiper: JQuery;
+    dragging: boolean;
+    offset: number;
+    /**
+     *
+     * @param {ol.Map} map - the map
+     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
+     */
+    constructor(map: ol.Map, sliderContent?: string);
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to left side
+     */
+    addLeftLayer(lyr: any): void;
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to right side
+     */
+    addRightLayer(lyr: any): void;
+    percentRight: number;
+}
+export default LayerSwipe;
diff --git a/lib-ts/olHelpers/layerSwipe.js b/lib-ts/olHelpers/layerSwipe.js
new file mode 100644
index 0000000..5dcee48
--- /dev/null
+++ b/lib-ts/olHelpers/layerSwipe.js
@@ -0,0 +1,127 @@
+/**
+ * Created by gavorhes on 6/1/2016.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var $ = require('jquery');
+var nm = provide_1.default('collections.layerSwipe');
+var LayerSwipe = (function () {
+    /**
+     *
+     * @param {ol.Map} map - the map
+     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
+     */
+    function LayerSwipe(map, sliderContent) {
+        var _this = this;
+        if (sliderContent === void 0) { sliderContent = ''; }
+        sliderContent = sliderContent || '';
+        /**
+         *
+         * @type {Array<LayerBase>}
+         */
+        this.leftLayers = [];
+        /**
+         *
+         * @type {Array<LayerBase>}
+         */
+        this.rightLayers = [];
+        this._percentRight = 50;
+        this.offset = null;
+        this._map = map;
+        this.$mapElement = $(map.getTargetElement());
+        this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>");
+        this.$swiper = this.$mapElement.find('.layer-swiper');
+        this.percentRight = this.percentRight;
+        this.dragging = false;
+        this.$mapElement.mouseleave(function () {
+            _this.dragging = false;
+        });
+        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
+            evt.preventDefault();
+        });
+        this.$swiper.mousedown(function (evt) {
+            _this.dragging = true;
+            _this.offset = evt.offsetX;
+        });
+        $(window).mouseup(function () {
+            _this.dragging = false;
+        });
+        this.$mapElement.mousemove(function (evt) {
+            if (_this.dragging) {
+                var mapLeft = _this.$mapElement.position().left;
+                var mapWidth = _this.$mapElement.width();
+                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
+            }
+        });
+    }
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to left side
+     */
+    LayerSwipe.prototype.addLeftLayer = function (lyr) {
+        var _this = this;
+        if (this.leftLayers.indexOf(lyr) != -1) {
+            return;
+        }
+        lyr.olLayer.on('precompose', function (event) {
+            var ctx = event['context'];
+            var width = ctx.canvas.width * (_this.percentRight / 100);
+            ctx.save();
+            ctx.beginPath();
+            ctx.rect(0, 0, width, ctx.canvas.height);
+            ctx.clip();
+        });
+        lyr.olLayer.on('postcompose', function (event) {
+            var ctx = event['context'];
+            ctx.restore();
+        });
+        this.leftLayers.push(lyr);
+    };
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to right side
+     */
+    LayerSwipe.prototype.addRightLayer = function (lyr) {
+        var _this = this;
+        if (this.rightLayers.indexOf(lyr) != -1) {
+            return;
+        }
+        lyr.olLayer.on('precompose', function (event) {
+            var ctx = event['context'];
+            var width = ctx.canvas.width * (_this.percentRight / 100);
+            ctx.save();
+            ctx.beginPath();
+            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
+            ctx.clip();
+        });
+        lyr.olLayer.on('postcompose', function (event) {
+            var ctx = event['context'];
+            ctx.restore();
+        });
+        this.rightLayers.push(lyr);
+    };
+    Object.defineProperty(LayerSwipe.prototype, "percentRight", {
+        get: function () {
+            return this._percentRight;
+        },
+        set: function (percent) {
+            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
+            if (percent < 0) {
+                return;
+            }
+            else if (maxed && percent > this.percentRight) {
+                return;
+            }
+            this._percentRight = percent;
+            this.$swiper.css('left', this._percentRight.toFixed(2) + "%");
+            this._map.render();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return LayerSwipe;
+}());
+nm.LayerSwipe = LayerSwipe;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerSwipe;
+//# sourceMappingURL=layerSwipe.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/layerSwipe.js.map b/lib-ts/olHelpers/layerSwipe.js.map
new file mode 100644
index 0000000..62de2c5
--- /dev/null
+++ b/lib-ts/olHelpers/layerSwipe.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"layerSwipe.js","sourceRoot":"","sources":["../../src-ts/olHelpers/layerSwipe.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAGH,wBAAoB,iBAAiB,CAAC,CAAA;AAEtC,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAG5B,IAAI,EAAE,GAAG,iBAAO,CAAC,wBAAwB,CAAC,CAAC;AAG3C;IASI;;;;OAIG;IACH,oBAAY,GAAW,EAAE,aAA0B;QAdvD,iBA+IC;QAjI4B,6BAA0B,GAA1B,kBAA0B;QAE/C,aAAa,GAAG,aAAa,IAAI,EAAE,CAAC;QACpC;;;WAGG;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB;;;WAGG;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,iCAA6B,aAAa,WAAQ,CAAC,CAAC;QAG5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YACxB,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,UAAS,GAAG;YACvD,GAAG,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAC,GAAG;YACvB,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACd,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,UAAC,GAAG;YAC3B,EAAE,CAAC,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChB,IAAI,OAAO,GAAG,KAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAC/C,IAAI,QAAQ,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAExC,KAAI,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,QAAQ,CAAC;YAC7E,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,iCAAY,GAAZ,UAAa,GAAG;QAAhB,iBAuBC;QArBG,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC;YACpC,MAAM,CAAC;QACX,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,UAAC,KAAK;YAC/B,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;YAEzD,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK;YACzC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3B,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,kCAAa,GAAb,UAAc,GAAG;QAAjB,iBAsBC;QApBG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC;YACrC,MAAM,CAAC;QACX,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,UAAC,KAAK;YAC/B,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;YAEzD,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK;YACzC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3B,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,sBAAI,oCAAY;aAAhB;YACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;aAED,UAAiB,OAAe;YAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YAE3F,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC;YACX,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC;YACX,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;;;OAdA;IAeL,iBAAC;AAAD,CAAC,AA/ID,IA+IC;AAED,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;AAC3B;kBAAe,UAAU,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapInteractionBase.d.ts b/lib-ts/olHelpers/mapInteractionBase.d.ts
new file mode 100644
index 0000000..2d7cd40
--- /dev/null
+++ b/lib-ts/olHelpers/mapInteractionBase.d.ts
@@ -0,0 +1,40 @@
+import { ol } from 'custom-ol';
+/**
+ * base interaction
+ */
+export declare class MapInteractionBase {
+    _map: ol.Map;
+    _initialized: boolean;
+    _subtype: string;
+    /**
+     * map interaction base
+     * @param subtype - the interaction subtype
+     */
+    constructor(subtype: string);
+    /**
+     * base initializer, returns true for already initialized
+     * @param theMap - the ol Map
+     * @returns true for already initialized
+     */
+    init(theMap: ol.Map): void;
+    /**
+     * get reference to the ol map object
+     * @returns {ol.Map} the map object
+     */
+    map: ol.Map;
+    /**
+     * get if is initialized
+     * @returns {boolean} is initialized
+     */
+    initialized: boolean;
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     * @protected
+     */
+    _checkInit(): void;
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     */
+    checkInit(): void;
+}
+export default MapInteractionBase;
diff --git a/lib-ts/olHelpers/mapInteractionBase.js b/lib-ts/olHelpers/mapInteractionBase.js
new file mode 100644
index 0000000..b8bc2b5
--- /dev/null
+++ b/lib-ts/olHelpers/mapInteractionBase.js
@@ -0,0 +1,77 @@
+"use strict";
+/**
+ * Created by gavorhes on 12/8/2015.
+ */
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('olHelpers');
+/**
+ * base interaction
+ */
+var MapInteractionBase = (function () {
+    /**
+     * map interaction base
+     * @param subtype - the interaction subtype
+     */
+    function MapInteractionBase(subtype) {
+        this._map = null;
+        this._initialized = false;
+        this._subtype = subtype;
+    }
+    /**
+     * base initializer, returns true for already initialized
+     * @param theMap - the ol Map
+     * @returns true for already initialized
+     */
+    MapInteractionBase.prototype.init = function (theMap) {
+        if (!this._initialized) {
+            this._map = theMap;
+            this._initialized = true;
+        }
+    };
+    Object.defineProperty(MapInteractionBase.prototype, "map", {
+        /**
+         * get reference to the ol map object
+         * @returns {ol.Map} the map object
+         */
+        get: function () {
+            return this._map;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
+        /**
+         * get if is initialized
+         * @returns {boolean} is initialized
+         */
+        get: function () {
+            return this._initialized;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     * @protected
+     */
+    MapInteractionBase.prototype._checkInit = function () {
+        if (!this.initialized) {
+            var msg = this._subtype + " object not initialized";
+            alert(msg);
+            console.log(msg);
+            throw msg;
+        }
+    };
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     */
+    MapInteractionBase.prototype.checkInit = function () {
+        this._checkInit();
+    };
+    return MapInteractionBase;
+}());
+exports.MapInteractionBase = MapInteractionBase;
+nm.MapInteractionBase = MapInteractionBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapInteractionBase;
+//# sourceMappingURL=mapInteractionBase.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapInteractionBase.js.map b/lib-ts/olHelpers/mapInteractionBase.js.map
new file mode 100644
index 0000000..6d1cb76
--- /dev/null
+++ b/lib-ts/olHelpers/mapInteractionBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapInteractionBase.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapInteractionBase.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,wBAAoB,iBAAiB,CAAC,CAAA;AAEtC,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAIhC;;GAEG;AACH;IAKI;;;OAGG;IACH,4BAAY,OAAe;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,iCAAI,GAAJ,UAAK,MAAc;QACf,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;IACL,CAAC;IAMD,sBAAI,mCAAG;QAJP;;;WAGG;aACH;YACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;;;OAAA;IAMD,sBAAI,2CAAW;QAJf;;;WAGG;aACH;YACI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAED;;;OAGG;IACH,uCAAU,GAAV;QACI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,GAAM,IAAI,CAAC,QAAQ,4BAAyB,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,sCAAS,GAAT;QACI,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IACL,yBAAC;AAAD,CAAC,AA9DD,IA8DC;AA9DY,0BAAkB,qBA8D9B,CAAA;AAED,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C;kBAAe,kBAAkB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapMove.d.ts b/lib-ts/olHelpers/mapMove.d.ts
new file mode 100644
index 0000000..963afae
--- /dev/null
+++ b/lib-ts/olHelpers/mapMove.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapMoveCls from './mapMoveCls';
+declare var _default: MapMoveCls;
+export default _default;
diff --git a/lib-ts/olHelpers/mapMove.js b/lib-ts/olHelpers/mapMove.js
new file mode 100644
index 0000000..17e2509
--- /dev/null
+++ b/lib-ts/olHelpers/mapMove.js
@@ -0,0 +1,8 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var mapMoveCls_1 = require('./mapMoveCls');
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = new mapMoveCls_1.default();
+//# sourceMappingURL=mapMove.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapMove.js.map b/lib-ts/olHelpers/mapMove.js.map
new file mode 100644
index 0000000..a6d8839
--- /dev/null
+++ b/lib-ts/olHelpers/mapMove.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapMove.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapMove.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,2BAAuB,cAAc,CAAC,CAAA;AAMtC;kBAAe,IAAI,oBAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapMoveCls.d.ts b/lib-ts/olHelpers/mapMoveCls.d.ts
new file mode 100644
index 0000000..1d60a79
--- /dev/null
+++ b/lib-ts/olHelpers/mapMoveCls.d.ts
@@ -0,0 +1,75 @@
+import LayerBaseVector from "../layers/LayerBaseVector";
+import MapInteractionBase from './mapInteractionBase';
+import { ol } from 'custom-ol';
+import { extentObject } from '../_internalnterfaces';
+import Timer = NodeJS.Timer;
+export interface mapMoveCallbackFunction {
+    /**
+     *
+     * @param extent extent as predefined object minX, minX, maxX, maxY
+     * @param zoomLevel current zoom level
+     * @param evtType the event type 'change:center', 'change:resolution'
+     */
+    (extent: extentObject, zoomLevel: number, evtType?: string): any;
+}
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+export declare class MapMoveCls extends MapInteractionBase {
+    _mapExtent: extentObject;
+    _zoomLevel: number;
+    _lookupLayer: Object;
+    _arrLayer: Array<LayerBaseVector>;
+    _arrLyrTimeout: Array<Timer>;
+    _mapMoveCallbackTimeout: Array<Timer>;
+    _mapMoveCallbackDelays: Array<number>;
+    _mapMoveCallbacksLookup: Object;
+    _mapMoveCallbackContext: Array<Object>;
+    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;
+    _arrLyrRequest: Array<any>;
+    /**
+     * constructor called implicitly
+     */
+    constructor();
+    /**
+     * initialize the map move object
+     * @param theMap - the ol map
+     */
+    init(theMap: ol.Map): void;
+    _updateMapExtent(): void;
+    /**
+     * return the map extent
+     */
+    mapExtent: extentObject;
+    /**
+     * Trigger the layer load
+     * @param lyr the layer being acted on
+     * @param index index of the layer
+     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+     */
+    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string): void;
+    /**
+     * trigger the map move call back at the given index
+     * @param ind - the index of the layer
+     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+     * @param functionId=undefined the function id used to reference the added callback function
+     */
+    triggerMoveCallback(ind: number, eventType?: string, functionId?: string): void;
+    /**
+     * Add a layer to the interaction
+     * @param  lyr - layer to add
+     * @param triggerOnAdd - if the layer should be loaded on add
+     */
+    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd?: boolean): void;
+    /**
+     * add a callback to the map move event
+     * @param func - callback function
+     * @param context - the context to use for this function
+     * @param delay=50 the delay before call load
+     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+     * @param functionId optional id to reference the function later for outside triggering
+     */
+    addCallback(func: mapMoveCallbackFunction, context: any, delay?: number, triggerOnAdd?: boolean, functionId?: string): void;
+}
+export default MapMoveCls;
diff --git a/lib-ts/olHelpers/mapMoveCls.js b/lib-ts/olHelpers/mapMoveCls.js
new file mode 100644
index 0000000..4b45059
--- /dev/null
+++ b/lib-ts/olHelpers/mapMoveCls.js
@@ -0,0 +1,233 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var mapInteractionBase_1 = require('./mapInteractionBase');
+var checkDefined = require('../util/checkDefined');
+var provide_1 = require('../util/provide');
+var makeGuid_1 = require('../util/makeGuid');
+var $ = require('jquery');
+var nm = provide_1.default('olHelpers');
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+var MapMoveCls = (function (_super) {
+    __extends(MapMoveCls, _super);
+    /**
+     * constructor called implicitly
+     */
+    function MapMoveCls() {
+        _super.call(this, 'map move');
+        this._arrLyrRequest = [];
+        this._arrLyrTimeout = [];
+        this._arrLayer = [];
+        this._lookupLayer = {};
+        this._mapMoveCallbacks = [];
+        this._mapMoveCallbacksLookup = {};
+        this._mapMoveCallbackDelays = [];
+        this._mapMoveCallbackContext = [];
+        this._mapMoveCallbackTimeout = [];
+        this._mapExtent = undefined;
+        this._zoomLevel = undefined;
+    }
+    /**
+     * initialize the map move object
+     * @param theMap - the ol map
+     */
+    MapMoveCls.prototype.init = function (theMap) {
+        var _this = this;
+        _super.prototype.init.call(this, theMap);
+        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
+            _this._updateMapExtent();
+            // trigger the layer updates
+            for (var i = 0; i < _this._arrLayer.length; i++) {
+                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
+            }
+            // trigger the map callbacks
+            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
+                _this.triggerMoveCallback(i, e.type);
+            }
+        });
+    };
+    MapMoveCls.prototype._updateMapExtent = function () {
+        var theView = this.map.getView();
+        this._zoomLevel = theView.getZoom();
+        var extentArray = theView.calculateExtent(this.map.getSize());
+        this._mapExtent = {
+            minX: extentArray[0],
+            minY: extentArray[1],
+            maxX: extentArray[2],
+            maxY: extentArray[3]
+        };
+    };
+    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
+        /**
+         * return the map extent
+         */
+        get: function () {
+            if (!this._mapExtent) {
+                this._updateMapExtent();
+            }
+            return this._mapExtent;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * Trigger the layer load
+     * @param lyr the layer being acted on
+     * @param index index of the layer
+     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+     */
+    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            throw 'need to define lyr or index';
+        }
+        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            index = this._arrLayer.indexOf(lyr);
+        }
+        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
+            lyr = this._arrLayer[index];
+        }
+        // clear the timeout
+        if (this._arrLyrTimeout[index] != null) {
+            clearTimeout(this._arrLyrTimeout[index]);
+            this._arrLyrTimeout[index] = null;
+        }
+        // abort if necessary and clear the request
+        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
+            this._arrLyrRequest[index].abort();
+            this._arrLyrRequest[index] = null;
+        }
+        // dummy callback used if before load returns false
+        var callbackFunc = function () { };
+        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+            var _this_1 = this;
+            callbackFunc = function () {
+                function innerFunction(theLayer, theIndex) {
+                    var _innerThis = this;
+                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
+                        /**
+                         * @type {LayerBaseVector}
+                         */
+                        theLayer.mapMoveCallback(d);
+                        theLayer.loadCallback();
+                    }, 'json').fail(function (jqXHR) {
+                        if (jqXHR.statusText != 'abort') {
+                            console.log('failed');
+                            console.log(theLayer.url);
+                            console.log(theLayer.mapMoveParams);
+                        }
+                    }).always(function () {
+                        _innerThis._arrLyrTimeout[theIndex] = null;
+                        _innerThis._arrLyrRequest[theIndex] = null;
+                    });
+                }
+                innerFunction.call(_this_1, lyr, index);
+            };
+        }
+        else {
+            lyr.clear();
+        }
+        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+    };
+    /**
+     * trigger the map move call back at the given index
+     * @param ind - the index of the layer
+     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+     * @param functionId=undefined the function id used to reference the added callback function
+     */
+    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
+        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
+            throw 'either the function index or the id must be defined';
+        }
+        if (typeof ind !== 'number') {
+            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
+        }
+        if (ind < 0) {
+            console.log('function not found');
+            return;
+        }
+        // clear the timeout
+        if (this._mapMoveCallbackTimeout[ind] != null) {
+            clearTimeout(this._mapMoveCallbackTimeout[ind]);
+            this._mapMoveCallbackTimeout[ind] = null;
+        }
+        var ctx = this._mapMoveCallbackContext[ind];
+        var theFunc = this._mapMoveCallbacks[ind];
+        var _this = this;
+        var f = function () {
+            if (ctx !== null) {
+                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
+            }
+            else {
+                theFunc(_this._mapExtent, _this._zoomLevel, eventType);
+            }
+        };
+        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
+    };
+    /**
+     * Add a layer to the interaction
+     * @param  lyr - layer to add
+     * @param triggerOnAdd - if the layer should be loaded on add
+     */
+    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
+        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+        if (this._arrLayer.indexOf(lyr) > -1) {
+            console.log('already added ' + lyr.name + ' to map move');
+            return;
+        }
+        this._checkInit();
+        this._arrLyrRequest.push(null);
+        this._arrLyrTimeout.push(null);
+        this._arrLayer.push(lyr);
+        this._lookupLayer[lyr.id] = lyr;
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
+        }
+    };
+    /**
+     * add a callback to the map move event
+     * @param func - callback function
+     * @param context - the context to use for this function
+     * @param delay=50 the delay before call load
+     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+     * @param functionId optional id to reference the function later for outside triggering
+     */
+    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
+        if (this._mapMoveCallbacks.indexOf(func) > -1) {
+            console.log('this function already added to map move');
+            return;
+        }
+        this._checkInit();
+        if (!functionId) {
+            functionId = makeGuid_1.default();
+        }
+        this._mapMoveCallbacks.push(func);
+        this._mapMoveCallbacksLookup[functionId] = functionId;
+        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
+        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
+        this._mapMoveCallbackTimeout.push(null);
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
+        }
+    };
+    return MapMoveCls;
+}(mapInteractionBase_1.default));
+exports.MapMoveCls = MapMoveCls;
+nm.MapMoveCls = MapMoveCls;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapMoveCls;
+//# sourceMappingURL=mapMoveCls.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapMoveCls.js.map b/lib-ts/olHelpers/mapMoveCls.js.map
new file mode 100644
index 0000000..7a36fb0
--- /dev/null
+++ b/lib-ts/olHelpers/mapMoveCls.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapMoveCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapMoveCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapPopup.d.ts b/lib-ts/olHelpers/mapPopup.d.ts
new file mode 100644
index 0000000..f404d23
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopup.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapPopupCls from './mapPopupCls';
+declare var _default: MapPopupCls;
+export default _default;
diff --git a/lib-ts/olHelpers/mapPopup.js b/lib-ts/olHelpers/mapPopup.js
new file mode 100644
index 0000000..59df5a5
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopup.js
@@ -0,0 +1,8 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var mapPopupCls_1 = require('./mapPopupCls');
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = new mapPopupCls_1.default();
+//# sourceMappingURL=mapPopup.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapPopup.js.map b/lib-ts/olHelpers/mapPopup.js.map
new file mode 100644
index 0000000..e4f9ae6
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopup.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopup.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,4BAAwB,eAAe,CAAC,CAAA;AAMxC;kBAAe,IAAI,qBAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapPopupCls.d.ts b/lib-ts/olHelpers/mapPopupCls.d.ts
new file mode 100644
index 0000000..ec773bf
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopupCls.d.ts
@@ -0,0 +1,150 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapInteractionBase from './mapInteractionBase';
+import { ol } from 'custom-ol';
+import { LayerBaseVector } from "../layers/LayerBaseVector";
+import LayerEsriMapServer from "../layers/LayerEsriMapServer";
+export interface popupChangedFunction {
+    ($popContent: JQuery): any;
+}
+/**
+ *
+ */
+export interface popupCallback {
+    /**
+     * Callback function for the popup
+     * @param featureProperties
+     * @param jqRef
+     */
+    (featureProperties: Object, jqRef: JQuery): string | boolean;
+}
+export declare class FeatureLayerProperties {
+    feature: ol.Feature;
+    layer: LayerEsriMapServer;
+    layerIndex: number;
+    selectionLayer: ol.layer.Vector;
+    popupContent: string;
+    esriLayerName: string;
+    /**
+     *
+     * @param feature the feature
+     * @param layer - the layer in the popup
+     * @param layerIndex - index of the layer
+     * @param selectionLayer - the ol selection layer
+     * @param [esriLayerName=undefined] - esri layer name
+     */
+    constructor(feature: ol.Feature, layer: LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string);
+    layerName: string;
+}
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+declare class MapPopupCls extends MapInteractionBase {
+    _popupOpen: boolean;
+    _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;
+    _currentPopupIndex: number;
+    _popupContentLength: number;
+    _esriMapServiceLayers: Array<LayerEsriMapServer>;
+    _$popupCloser: JQuery;
+    _$popupContent: JQuery;
+    _$popupContainer: JQuery;
+    _popupOverlay: ol.Overlay;
+    _arrPopupLayers: Array<LayerBaseVector>;
+    _popupCoordinate: ol.Coordinate;
+    _popupChangedFunctions: Array<popupChangedFunction>;
+    _mapClickFunctions: Array<Function>;
+    _selectionLayerLookup: Object;
+    _arrPopupLayerIds: Array<string>;
+    _arrPopupLayerNames: Array<string>;
+    _arrPopupOlLayers: Array<ol.layer.Vector>;
+    _arrPopupContentFunction: Array<popupCallback>;
+    _selectionLayers: Array<ol.layer.Vector>;
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+    /**
+     * map popup constructor
+     */
+    constructor();
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+    init(theMap: ol.Map): boolean;
+    /**
+     * helper to select features
+     * @private
+     */
+    _triggerFeatSelect(): void;
+    /**
+     *
+     * @param feature - the ol feature
+     * @param {LayerEsriMapServer} lyr - the map server layer
+     * @param {string} popupContent - popup content
+     * @param {string} esriName - esri layer name
+     */
+    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string): void;
+    /**
+     *
+     * @param  pixel - the ol pixel
+     * @returns  feature layer properties
+     * @private
+     */
+    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties>;
+    closePopup(): boolean;
+    /**
+     *
+     * @param chgFunction - popup change function
+     */
+    addPopupChangedFunction(chgFunction: popupChangedFunction): void;
+    /**
+     *
+     * @param {LayerBase|*} lyr - the layer being acted on
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns  the new selection layer
+     * @private
+     */
+    _addPopupLayer(lyr: any, selectionStyle: any): ol.layer.Vector;
+    /**
+     * Add popup to the map
+     * @param {LayerBase|*} lyr The layer that the popup with act on
+     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback, selectionStyle?: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction): ol.layer.Vector;
+    /**
+     *
+     * @param {LayerBase} lyr - layer
+     */
+    removeVectorPopup(lyr: any): void;
+    /**
+     *
+     * @param {LayerEsriMapServer} lyr - map server layer
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    addMapServicePopup(lyr: any, selectionStyle?: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction): ol.layer.Vector;
+    clearSelection(): void;
+    /**
+     * Add a function to be called when the map is clicked but before any popups are implemented
+     * @param {function} func - the map click function
+     */
+    addMapClickFunction(func: Function): void;
+}
+export default MapPopupCls;
diff --git a/lib-ts/olHelpers/mapPopupCls.js b/lib-ts/olHelpers/mapPopupCls.js
new file mode 100644
index 0000000..24417a3
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopupCls.js
@@ -0,0 +1,415 @@
+/// <reference path="../../definitions/jquery.d.ts"/>
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+var mapInteractionBase_1 = require('./mapInteractionBase');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var $ = require('jquery');
+var nm = provide_1.default('olHelpers');
+var FeatureLayerProperties = (function () {
+    /**
+     *
+     * @param feature the feature
+     * @param layer - the layer in the popup
+     * @param layerIndex - index of the layer
+     * @param selectionLayer - the ol selection layer
+     * @param [esriLayerName=undefined] - esri layer name
+     */
+    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+        this.feature = feature;
+        this.layer = layer;
+        this.layerIndex = layerIndex;
+        this.selectionLayer = selectionLayer;
+        this.popupContent = '';
+        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+    }
+    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
+        get: function () {
+            if (typeof this.esriLayerName == 'string') {
+                return this.esriLayerName;
+            }
+            else {
+                return this.layer.name;
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return FeatureLayerProperties;
+}());
+exports.FeatureLayerProperties = FeatureLayerProperties;
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+var MapPopupCls = (function (_super) {
+    __extends(MapPopupCls, _super);
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+    /**
+     * map popup constructor
+     */
+    function MapPopupCls() {
+        _super.call(this, 'map popup');
+        this._arrPopupLayerIds = [];
+        this._arrPopupLayerNames = [];
+        this._arrPopupLayers = [];
+        this._arrPopupOlLayers = [];
+        this._arrPopupContentFunction = [];
+        this._$popupContainer = undefined;
+        this._$popupContent = undefined;
+        this._$popupCloser = undefined;
+        this._popupOverlay = undefined;
+        this._selectionLayers = [];
+        this._selectionLayerLookup = {};
+        this._mapClickFunctions = [];
+        //let a = function($jqueryContent){console.log($jqueryContent)};
+        //this._popupChangedLookup = {'a': a};
+        this._popupChangedFunctions = [];
+        this._esriMapServiceLayers = [];
+        this._popupOpen = false;
+        this._popupCoordinate = null;
+        this._passThroughLayerFeatureArray = [];
+        this._currentPopupIndex = -1;
+        this._popupContentLength = 0;
+    }
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+    MapPopupCls.prototype.init = function (theMap) {
+        var _this = this;
+        _super.prototype.init.call(this, theMap);
+        var $map;
+        var target = this.map.getTarget();
+        if (typeof target == 'string') {
+            $map = $('#' + target);
+        }
+        else {
+            $map = $(target);
+        }
+        $map.append('<div class="ol-popup">' +
+            '<span class="ol-popup-closer">X</span>' +
+            '<div class="popup-content"></div>' +
+            '</div>');
+        this._$popupContainer = $map.find('.ol-popup');
+        this._$popupContent = $map.find('.popup-content');
+        this._$popupCloser = $map.find('.ol-popup-closer');
+        this._popupOverlay = new custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true,
+            autoPanAnimation: {
+                duration: 250,
+                source: theMap.getView().getCenter()
+            } });
+        this._map.addOverlay(this._popupOverlay);
+        this._$popupCloser.click(function (evt) {
+            _this.closePopup();
+        });
+        // display popup on click
+        this._map.on('singleclick', function (evt) {
+            _this.closePopup();
+            _this._popupCoordinate = evt['coordinate'];
+            if (_this._esriMapServiceLayers.length > 0) {
+                var queryParams = {
+                    geometry: evt['coordinate'].join(','),
+                    geometryType: 'esriGeometryPoint',
+                    layers: 'all',
+                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
+                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
+                    imageDisplay: _this._map.getSize().join(',') + ',96',
+                    returnGeometry: true,
+                    tolerance: 15,
+                    f: 'pjson'
+                };
+                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
+                    var l = _a[_i];
+                    l.getPopupInfo(queryParams);
+                }
+            }
+            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
+            _this._passThroughLayerFeatureArray = [];
+            _this._currentPopupIndex = -1;
+            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+                var featObj = layerFeatureObjectArray[i];
+                var props = featObj.feature.getProperties();
+                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+                //skip if return was false
+                if (popupContentResponse === false) {
+                }
+                else if (typeof popupContentResponse == 'string') {
+                    featObj.popupContent = popupContentResponse;
+                    _this._passThroughLayerFeatureArray.push(featObj);
+                }
+                else {
+                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
+                }
+            }
+            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
+            _this._currentPopupIndex = -1;
+            var popupHtml = '<div class="ol-popup-nav">';
+            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
+            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
+            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
+            popupHtml += "<span>&nbsp;of&nbsp;</span>";
+            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
+            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
+            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
+            popupHtml += '</div>';
+            popupHtml += '<div class="ol-popup-inner">';
+            popupHtml += '</div>';
+            _this._$popupContent.html(popupHtml);
+            _this._$popupContent.find('.previous-popup').click(function () {
+                if (_this._popupContentLength == 1) {
+                    return;
+                }
+                if (_this._currentPopupIndex == 0) {
+                    _this._currentPopupIndex = _this._popupContentLength - 1;
+                }
+                else {
+                    _this._currentPopupIndex--;
+                }
+                _this._triggerFeatSelect();
+            });
+            var nextPopup = _this._$popupContent.find('.next-popup');
+            nextPopup.click(function () {
+                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+                    return;
+                }
+                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
+                    _this._currentPopupIndex = 0;
+                }
+                else {
+                    _this._currentPopupIndex++;
+                }
+                _this._triggerFeatSelect();
+            });
+            if (_this._popupContentLength > 0) {
+                nextPopup.trigger('click');
+                _this._popupOverlay.setPosition(_this._popupCoordinate);
+                _this._$popupContent.scrollTop(0);
+                _this._popupOpen = true;
+            }
+        });
+        //change mouse cursor when over marker
+        this._map.on('pointermove', function (evt) {
+            if (evt['dragging']) {
+                return;
+            }
+            var pixel = _this.map.getEventPixel(evt['originalEvent']);
+            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
+                    var olLayer = _a[_i];
+                    if (lyrCandidate == olLayer) {
+                        return true;
+                    }
+                }
+                return false;
+            });
+            _this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+        });
+        return true;
+    };
+    /**
+     * helper to select features
+     * @private
+     */
+    MapPopupCls.prototype._triggerFeatSelect = function () {
+        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
+        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
+        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
+        this.clearSelection();
+        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
+        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
+        $layerNameSpan.html(lyrFeatObj.layerName);
+        $innerPopup.html(lyrFeatObj.popupContent);
+        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
+        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
+            var f = _a[_i];
+            f(this._$popupContent);
+        }
+    };
+    /**
+     *
+     * @param feature - the ol feature
+     * @param {LayerEsriMapServer} lyr - the map server layer
+     * @param {string} popupContent - popup content
+     * @param {string} esriName - esri layer name
+     */
+    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
+        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
+        featLayerObject.popupContent = popupContent;
+        this._passThroughLayerFeatureArray.push(featLayerObject);
+        this._popupContentLength++;
+        $('.popup-content-length').html(this._popupContentLength.toFixed());
+        if (!this._popupOpen) {
+            this._$popupContent.find('.next-popup').trigger('click');
+            this._popupOverlay.setPosition(this._popupCoordinate);
+            this._$popupContent.scrollTop(0);
+            this._popupOpen = true;
+        }
+    };
+    /**
+     *
+     * @param  pixel - the ol pixel
+     * @returns  feature layer properties
+     * @private
+     */
+    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
+        var _this = this;
+        var layerFeatureObjectArray = [];
+        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
+            //TODO fix this
+            // if (lyrIndex > -1) {
+            //     layerFeatureObjectArray.push(new FeatureLayerProperties(
+            //         feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));
+            // }
+        });
+        return layerFeatureObjectArray;
+    };
+    MapPopupCls.prototype.closePopup = function () {
+        this._checkInit();
+        this._popupOpen = false;
+        this._popupOverlay.setPosition(undefined);
+        this._$popupCloser[0].blur();
+        this.clearSelection();
+        this._$popupContent.html('');
+        return false;
+    };
+    ;
+    /**
+     *
+     * @param chgFunction - popup change function
+     */
+    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
+        this._popupChangedFunctions.push(chgFunction);
+    };
+    /**
+     *
+     * @param {LayerBase|*} lyr - the layer being acted on
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns  the new selection layer
+     * @private
+     */
+    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+        this._checkInit();
+        selectionStyle = selectionStyle || {};
+        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+        selectionStyle.width = selectionStyle.width || 10;
+        var theStyle;
+        if (selectionStyle.olStyle) {
+            theStyle = selectionStyle.olStyle;
+        }
+        else {
+            theStyle = new custom_ol_1.ol.style.Style({
+                stroke: new custom_ol_1.ol.style.Stroke({
+                    color: selectionStyle.color,
+                    width: selectionStyle.width
+                }),
+                image: new custom_ol_1.ol.style.Circle({
+                    radius: 7,
+                    fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }),
+                    stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 })
+                }),
+                fill: new custom_ol_1.ol.style.Fill({
+                    color: selectionStyle.color
+                })
+            });
+        }
+        var selectionLayer = new custom_ol_1.ol.layer.Vector({
+            source: new custom_ol_1.ol.source.Vector(),
+            style: theStyle,
+            zIndex: 100
+        });
+        this._selectionLayers.push(selectionLayer);
+        this._selectionLayerLookup[lyr.id] = selectionLayer;
+        this.map.addLayer(selectionLayer);
+        return selectionLayer;
+    };
+    /**
+     * Add popup to the map
+     * @param {LayerBase|*} lyr The layer that the popup with act on
+     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
+        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+        this._arrPopupLayerIds.push(lyr.id);
+        this._arrPopupLayerNames.push(lyr.name);
+        this._arrPopupLayers.push(lyr);
+        this._arrPopupOlLayers.push(lyr.olLayer);
+        this._arrPopupContentFunction.push(popupContentFunction);
+        return selectionLayer;
+    };
+    ;
+    /**
+     *
+     * @param {LayerBase} lyr - layer
+     */
+    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
+        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
+        if (idx > -1) {
+            this._arrPopupLayerIds.splice(idx, 1);
+            this._arrPopupLayerNames.splice(idx, 1);
+            this._arrPopupLayers.splice(idx, 1);
+            this._arrPopupOlLayers.splice(idx, 1);
+            this._arrPopupContentFunction.splice(idx, 1);
+            this._selectionLayers.splice(idx, 1);
+            delete this._selectionLayerLookup[lyr.id];
+        }
+    };
+    /**
+     *
+     * @param {LayerEsriMapServer} lyr - map server layer
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
+        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+        this._esriMapServiceLayers.push(lyr);
+        return selectionLayer;
+    };
+    MapPopupCls.prototype.clearSelection = function () {
+        this._checkInit();
+        for (var i = 0; i < this._selectionLayers.length; i++) {
+            this._selectionLayers[i].getSource().clear();
+        }
+        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
+            var f = _a[_i];
+            f();
+        }
+    };
+    ;
+    /**
+     * Add a function to be called when the map is clicked but before any popups are implemented
+     * @param {function} func - the map click function
+     */
+    MapPopupCls.prototype.addMapClickFunction = function (func) {
+        this._mapClickFunctions.push(func);
+    };
+    return MapPopupCls;
+}(mapInteractionBase_1.default));
+nm.MapPopupCls = MapPopupCls;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapPopupCls;
+//# sourceMappingURL=mapPopupCls.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/mapPopupCls.js.map b/lib-ts/olHelpers/mapPopupCls.js.map
new file mode 100644
index 0000000..91532bd
--- /dev/null
+++ b/lib-ts/olHelpers/mapPopupCls.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/propertiesZoomStyle.d.ts b/lib-ts/olHelpers/propertiesZoomStyle.d.ts
new file mode 100644
index 0000000..3fdc694
--- /dev/null
+++ b/lib-ts/olHelpers/propertiesZoomStyle.d.ts
@@ -0,0 +1,15 @@
+import { ol } from 'custom-ol';
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+declare function propertiesZoomStyle(styleFunc: any): (feature: ol.Feature, resolution: any) => void;
+export default propertiesZoomStyle;
diff --git a/lib-ts/olHelpers/propertiesZoomStyle.js b/lib-ts/olHelpers/propertiesZoomStyle.js
new file mode 100644
index 0000000..8862ccc
--- /dev/null
+++ b/lib-ts/olHelpers/propertiesZoomStyle.js
@@ -0,0 +1,31 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var zoomResolutionConvert = require('./zoomResolutionConvert');
+var nm = provide_1.default('olHelpers');
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+function propertiesZoomStyle(styleFunc) {
+    if (styleFunc == undefined) {
+        return undefined;
+    }
+    return function (feature, resolution) {
+        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
+    };
+}
+nm.propertiesZoomStyle = propertiesZoomStyle;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = propertiesZoomStyle;
+//# sourceMappingURL=propertiesZoomStyle.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/propertiesZoomStyle.js.map b/lib-ts/olHelpers/propertiesZoomStyle.js.map
new file mode 100644
index 0000000..3c06577
--- /dev/null
+++ b/lib-ts/olHelpers/propertiesZoomStyle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"propertiesZoomStyle.js","sourceRoot":"","sources":["../../src-ts/olHelpers/propertiesZoomStyle.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,IAAY,qBAAqB,WAAM,yBAAyB,CAAC,CAAA;AAEjE,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAGhC;;;;;;GAMG;AAEH;;;;GAIG;AACH,6BAA6B,SAAS;IAClC,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,CAAA,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,UAAU,OAAmB,EAAE,UAAU;QAC5C,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC;AACN,CAAC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC7C;kBAAe,mBAAmB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/quickMap.d.ts b/lib-ts/olHelpers/quickMap.d.ts
new file mode 100644
index 0000000..5268c24
--- /dev/null
+++ b/lib-ts/olHelpers/quickMap.d.ts
@@ -0,0 +1,23 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+import { quickMapOptions } from './quickMapBase';
+import { ol } from 'custom-ol';
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+export declare function quickMap(options?: quickMapOptions): ol.Map;
+export default quickMap;
diff --git a/lib-ts/olHelpers/quickMap.js b/lib-ts/olHelpers/quickMap.js
new file mode 100644
index 0000000..7343103
--- /dev/null
+++ b/lib-ts/olHelpers/quickMap.js
@@ -0,0 +1,36 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+"use strict";
+var quickMapBase_1 = require('./quickMapBase');
+var provide_1 = require('../util/provide');
+var mapMove_1 = require('./mapMove');
+var mapPopup_1 = require('./mapPopup');
+var nm = provide_1.default('olHelpers');
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+function quickMap(options) {
+    var m = quickMapBase_1.quickMapBase(options);
+    mapMove_1.default.init(m);
+    mapPopup_1.default.init(m);
+    return m;
+}
+exports.quickMap = quickMap;
+nm.quickMap = quickMap;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = quickMap;
+//# sourceMappingURL=quickMap.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/quickMap.js.map b/lib-ts/olHelpers/quickMap.js.map
new file mode 100644
index 0000000..dcbd583
--- /dev/null
+++ b/lib-ts/olHelpers/quickMap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"quickMap.js","sourceRoot":"","sources":["../../src-ts/olHelpers/quickMap.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,6BAA4C,gBAAgB,CAAC,CAAA;AAC7D,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,wBAAoB,WAAW,CAAC,CAAA;AAChC,yBAAqB,YAAY,CAAC,CAAA;AAClC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;;;;;;;;;;;GAeG;AACH,kBAAyB,OAA0B;IAC/C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjB,MAAM,CAAC,CAAC,CAAC;AACb,CAAC;AANe,gBAAQ,WAMvB,CAAA;AAGD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;kBAAe,QAAQ,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/quickMapBase.d.ts b/lib-ts/olHelpers/quickMapBase.d.ts
new file mode 100644
index 0000000..e72054b
--- /dev/null
+++ b/lib-ts/olHelpers/quickMapBase.d.ts
@@ -0,0 +1,31 @@
+import { ol } from 'custom-ol';
+export interface quickMapOptions {
+    divId?: string;
+    center?: {
+        x: number;
+        y: number;
+    };
+    zoom?: number;
+    minZoom?: number;
+    maxZoom?: number;
+    baseSwitcher?: boolean;
+    fullScreen?: boolean;
+}
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param [options={}] config options
+ * @param [options.divId=map] map div id
+ * @param [options.center={}] center config object
+ * @param [options.center.x=-10018378] center x, web mercator x or lon
+ * @param [options.center.y=5574910] center y, web mercator y or lat
+ * @param [options.zoom=7] zoom level
+ * @param [options.minZoom=undefined] min zoom
+ * @param [options.maxZoom=undefined] max zoom
+ * @param [options.baseSwitcher=true] if add base map switcher
+ * @param [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+export declare function quickMapBase(options?: quickMapOptions): ol.Map;
+export default quickMapBase;
diff --git a/lib-ts/olHelpers/quickMapBase.js b/lib-ts/olHelpers/quickMapBase.js
new file mode 100644
index 0000000..9bfea03
--- /dev/null
+++ b/lib-ts/olHelpers/quickMapBase.js
@@ -0,0 +1,74 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+"use strict";
+var $ = require('jquery');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('olHelpers');
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param [options={}] config options
+ * @param [options.divId=map] map div id
+ * @param [options.center={}] center config object
+ * @param [options.center.x=-10018378] center x, web mercator x or lon
+ * @param [options.center.y=5574910] center y, web mercator y or lat
+ * @param [options.zoom=7] zoom level
+ * @param [options.minZoom=undefined] min zoom
+ * @param [options.maxZoom=undefined] max zoom
+ * @param [options.baseSwitcher=true] if add base map switcher
+ * @param [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+function quickMapBase(options) {
+    options = options || {};
+    options.divId = options.divId || 'map';
+    options.center = options.center || { x: -10018378, y: 5574910 };
+    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
+    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
+    var $mapDiv = $('#' + options.divId);
+    $mapDiv.css('position', 'relative');
+    var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() });
+    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
+    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
+    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
+    if (options.baseSwitcher) {
+    }
+    if (options.zoom < 0 || options.zoom > 28) {
+        throw 'zoom out of range';
+    }
+    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
+        var p = new custom_ol_1.ol.geom.Point([options.center.x, options.center.y]);
+        new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+        p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" }));
+        var coordinates = p.getCoordinates();
+        options.center.x = coordinates[0];
+        options.center.y = coordinates[1];
+    }
+    var map = new custom_ol_1.ol.Map({
+        layers: [osmLayer],
+        target: options.divId,
+        controls: custom_ol_1.ol.control.defaults({
+            attributionOptions: { collapsible: false }
+        }),
+        view: new custom_ol_1.ol.View({
+            center: [options.center.x, options.center.y],
+            zoom: options.zoom,
+            minZoom: options.minZoom,
+            maxZoom: options.maxZoom
+        })
+    });
+    if (options.fullScreen) {
+        //TODO add full screen options to ts
+        map.addControl(new custom_ol_1.ol.control.FullScreen({}));
+    }
+    return map;
+}
+exports.quickMapBase = quickMapBase;
+nm.quickMapBase = quickMapBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = quickMapBase;
+//# sourceMappingURL=quickMapBase.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/quickMapBase.js.map b/lib-ts/olHelpers/quickMapBase.js.map
new file mode 100644
index 0000000..db811da
--- /dev/null
+++ b/lib-ts/olHelpers/quickMapBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../src-ts/olHelpers/quickMapBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/olHelpers/zoomResolutionConvert.d.ts b/lib-ts/olHelpers/zoomResolutionConvert.d.ts
new file mode 100644
index 0000000..a0814c9
--- /dev/null
+++ b/lib-ts/olHelpers/zoomResolutionConvert.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+export declare function zoomToResolution(zoomLevel: any): number;
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+export declare function resolutionToZoom(resolution: any): number;
diff --git a/lib-ts/olHelpers/zoomResolutionConvert.js b/lib-ts/olHelpers/zoomResolutionConvert.js
new file mode 100644
index 0000000..d4786ca
--- /dev/null
+++ b/lib-ts/olHelpers/zoomResolutionConvert.js
@@ -0,0 +1,75 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('olHelpers.zoomResolutionConvert');
+var _zoomResLookup = [
+    156543.03392804097,
+    78271.51696402048,
+    39135.75848201024,
+    19567.87924100512,
+    9783.93962050256,
+    4891.96981025128,
+    2445.98490512564,
+    1222.99245256282,
+    611.49622628141,
+    305.748113140705,
+    152.8740565703525,
+    76.43702828517625,
+    38.21851414258813,
+    19.109257071294063,
+    9.554628535647032,
+    4.777314267823516,
+    2.388657133911758,
+    1.194328566955879,
+    0.5971642834779395,
+    0.29858214173896974,
+    0.14929107086948487,
+    0.07464553543474244,
+    0.03732276771737122,
+    0.01866138385868561,
+    0.009330691929342804,
+    0.004665345964671402,
+    0.002332672982335701,
+    0.0011663364911678506,
+    0.0005831682455839253 //28
+];
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+function zoomToResolution(zoomLevel) {
+    "use strict";
+    if (typeof zoomLevel == 'number') {
+        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
+            return _zoomResLookup[zoomLevel];
+        }
+        else {
+            console.log("invalid zoom level provided: " + zoomLevel);
+            return undefined;
+        }
+    }
+    else {
+        return undefined;
+    }
+}
+exports.zoomToResolution = zoomToResolution;
+nm.zoomToResolution = zoomToResolution;
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+function resolutionToZoom(resolution) {
+    for (var i = 0; i < _zoomResLookup.length; i++) {
+        if (resolution >= _zoomResLookup[i]) {
+            return i;
+        }
+    }
+    return 0;
+}
+exports.resolutionToZoom = resolutionToZoom;
+nm.resolutionToZoom = resolutionToZoom;
+//# sourceMappingURL=zoomResolutionConvert.js.map
\ No newline at end of file
diff --git a/lib-ts/olHelpers/zoomResolutionConvert.js.map b/lib-ts/olHelpers/zoomResolutionConvert.js.map
new file mode 100644
index 0000000..fabd084
--- /dev/null
+++ b/lib-ts/olHelpers/zoomResolutionConvert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"zoomResolutionConvert.js","sourceRoot":"","sources":["../../src-ts/olHelpers/zoomResolutionConvert.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,IAAM,EAAE,GAAG,iBAAO,CAAC,iCAAiC,CAAC,CAAC;AAEtD,IAAI,cAAc,GAAG;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB,CAAC,IAAI;CAC7B,CAAC;AAEF;;;;GAIG;AACH,0BAAiC,SAAS;IACtC,YAAY,CAAC;IAEb,EAAE,CAAC,CAAC,OAAO,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC;QAC/B,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,kCAAgC,SAAW,CAAC,CAAC;YAEzD,MAAM,CAAC,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAde,wBAAgB,mBAc/B,CAAA;AACD,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,0BAAiC,UAAU;IACvC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;QAC5C,EAAE,CAAC,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAE,CAAC,CAAA,CAAC;YAClC,MAAM,CAAC,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IAED,MAAM,CAAC,CAAC,CAAC;AACb,CAAC;AARe,wBAAgB,mBAQ/B,CAAA;AAED,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/_internalnterfaces.d.ts b/lib-ts/src-ts/_internalnterfaces.d.ts
new file mode 100644
index 0000000..c98298e
--- /dev/null
+++ b/lib-ts/src-ts/_internalnterfaces.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Created by gavorhes on 9/21/2016.
+ */
+export interface extentObject {
+    minX: number;
+    minY: number;
+    maxX: number;
+    maxY: number;
+}
diff --git a/lib-ts/src-ts/_internalnterfaces.js b/lib-ts/src-ts/_internalnterfaces.js
new file mode 100644
index 0000000..8c92720
--- /dev/null
+++ b/lib-ts/src-ts/_internalnterfaces.js
@@ -0,0 +1,5 @@
+/**
+ * Created by gavorhes on 9/21/2016.
+ */
+"use strict";
+//# sourceMappingURL=_internalnterfaces.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/_internalnterfaces.js.map b/lib-ts/src-ts/_internalnterfaces.js.map
new file mode 100644
index 0000000..157277f
--- /dev/null
+++ b/lib-ts/src-ts/_internalnterfaces.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"_internalnterfaces.js","sourceRoot":"","sources":["../../src-ts/_internalnterfaces.ts"],"names":[],"mappings":"AAAA;;GAEG"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/_test/my_little_test.d.ts b/lib-ts/src-ts/_test/my_little_test.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/src-ts/_test/my_little_test.js b/lib-ts/src-ts/_test/my_little_test.js
new file mode 100644
index 0000000..1b0031f
--- /dev/null
+++ b/lib-ts/src-ts/_test/my_little_test.js
@@ -0,0 +1,31 @@
+"use strict";
+//
+var quickMap_1 = require('../olHelpers/quickMap');
+console.log('eat this fish');
+console.log('eat this fish');
+console.log('eat this fish');
+//
+// let g = new ol3.source.Vector();
+//
+// console.log(olx);
+//
+function fish(ext) {
+    console.log(ext[0]);
+}
+console.log('i am here5');
+console.log(quickMap_1.quickMap);
+var map = quickMap_1.quickMap();
+//
+//
+// console.log(ol3);
+//
+//
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log('here');
+//
+fish([1, 2, 3, 4]);
+//# sourceMappingURL=my_little_test.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/_test/my_little_test.js.map b/lib-ts/src-ts/_test/my_little_test.js.map
new file mode 100644
index 0000000..fb4a76c
--- /dev/null
+++ b/lib-ts/src-ts/_test/my_little_test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"my_little_test.js","sourceRoot":"","sources":["../../../src-ts/_test/my_little_test.ts"],"names":[],"mappings":";AAGA,EAAE;AACF,yBAAuB,uBAAuB,CAAC,CAAA;AAK/C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AACpB,EAAE;AACF,cAAc,GAAc;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAE1B,OAAO,CAAC,GAAG,CAAC,mBAAQ,CAAC,CAAC;AAEtB,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAErB,EAAE;AACF,EAAE;AACF,oBAAoB;AACpB,EAAE;AACF,EAAE;AACF,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,uBAAuB;AACvB,EAAE;AACF,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/index.d.ts b/lib-ts/src-ts/index.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/src-ts/index.js b/lib-ts/src-ts/index.js
new file mode 100644
index 0000000..49ff980
--- /dev/null
+++ b/lib-ts/src-ts/index.js
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 9/20/2016.
+ */
+console.log('here');
+console.log('here');
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/index.js.map b/lib-ts/src-ts/index.js.map
new file mode 100644
index 0000000..e657c49
--- /dev/null
+++ b/lib-ts/src-ts/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src-ts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerBase.d.ts b/lib-ts/src-ts/layers/LayerBase.d.ts
new file mode 100644
index 0000000..706eec9
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBase.d.ts
@@ -0,0 +1,187 @@
+/// <reference path="../../../definitions/jquery.d.ts" />
+/// <reference path="../../../definitions/node.d.ts" />
+import { ol } from 'custom-ol';
+export interface LayerBaseOptions {
+    id?: string;
+    name?: string;
+    opacity?: number;
+    visible?: boolean;
+    minZoom?: number;
+    maxZoom?: number;
+    params?: any;
+    zIndex?: number;
+    loadCallback?: Function;
+    legendCollapse?: boolean;
+    legendCheckbox?: boolean;
+    legendContent?: string;
+}
+/**
+ * The base layer class
+ * @abstract
+ */
+export declare abstract class LayerBase {
+    _legendCheckbox: boolean;
+    _url: string;
+    _opacity: number;
+    _minZoom: number;
+    _maxZoom: number;
+    _visible: boolean;
+    _loaded: boolean;
+    _zIndex: number;
+    _legendContent: string;
+    _params: any;
+    id: string;
+    _name: string;
+    _source: ol.source.Source;
+    animate: boolean;
+    _legendCollapse: boolean;
+    _maxResolution: number;
+    _minResolution: number;
+    _$legendDiv: JQuery;
+    loadCallback: Function;
+    _olLayer: ol.layer.Layer;
+    _applyCollapseCalled: boolean;
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+    constructor(url: string, options?: LayerBaseOptions);
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    _load(): boolean;
+    /**
+     * Get the legend html, be sure to only add to the DOM once
+     * @returns {string} html for layer wrapped in a div
+     */
+    getLegendDiv(): string;
+    /**
+     *
+     * @param {string|undefined} additionalContent - additional content to add to legend
+     * @private
+     */
+    _addLegendContent(additionalContent: any): void;
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=] - additonal content to add
+     */
+    addLegendContent(additionalContent: any): void;
+    applyCollapse(): any;
+    /**
+     * trick to refresh the layer
+     */
+    refresh(): void;
+    /**
+     * get the legend content
+     * @type {string}
+     */
+    /**
+     * set the legend content directly
+     * @param {string} newVal - new content
+     * @protected
+     */
+    legendContent: string;
+    /**
+     * get the map get params
+     * @type {object}
+     */
+    /**
+     * set the map get params
+     * @param {object} newParams - new get params
+     * @protected
+     */
+    params: any;
+    /**
+     * get the minimum resolution
+     * @type {number|*}
+     */
+    minResolution: number;
+    /**
+     * get the maximum resolution
+     * @type {number|*}
+     */
+    maxResolution: number;
+    /**
+     * get min zoom
+     * @type {number|*}
+     */
+    minZoom: number;
+    /**
+     * get max zoom
+     * @type {number|*}
+     */
+    maxZoom: number;
+    /**
+     * get the url
+     * @type {string}
+     */
+    url: string;
+    /**
+     * Get the layer visibility
+     * @type {boolean}
+     */
+    /**
+     * set the visibility
+     * @param visibility
+     */
+    visible: boolean;
+    protected setVisible(visibility: boolean): void;
+    /**
+     * Get the layer opacity
+     * @type {number}
+     */
+    /**
+     * Set the layer opacity
+     * @param {number} opacity - layer opacity
+     */
+    opacity: number;
+    /**
+     * Get the layer name
+     * @type {string}
+     */
+    /**
+     * set the layer name
+     * @param {string} newName - the new name
+     */
+    name: string;
+    /**
+     * Check if the layer is loaded
+     * @type {boolean}
+     */
+    loaded: boolean;
+    /**
+     * get the layer source
+     * @type {*}
+     */
+    source: ol.source.Source;
+    protected getSource(): ol.source.Source;
+    /**
+     * get the z index
+     */
+    /**
+     * set the z index
+     */
+    zIndex: number;
+    protected setZIndex(newZ: number): void;
+    /**
+     * the the ol layer
+     */
+    olLayer: ol.layer.Layer;
+    protected getOlLayer(): ol.layer.Layer;
+}
+export default LayerBase;
diff --git a/lib-ts/src-ts/layers/LayerBase.js b/lib-ts/src-ts/layers/LayerBase.js
new file mode 100644
index 0000000..6665289
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBase.js
@@ -0,0 +1,384 @@
+"use strict";
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+var $ = require('jquery');
+var makeGuid_1 = require('../util/makeGuid');
+var zoomResolutionConvert = require('../olHelpers/zoomResolutionConvert');
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('layers');
+/**
+ * The base layer class
+ * @abstract
+ */
+var LayerBase = (function () {
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+    function LayerBase(url, options) {
+        options = options || {};
+        if (typeof url !== 'string') {
+            throw 'Invalid URL';
+        }
+        this._url = url;
+        this._params = typeof options.params == 'object' ? options.params : {};
+        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
+        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
+        this.id = options.id || makeGuid_1.default();
+        this._name = options.name || 'Unnamed Layer';
+        this.animate = false;
+        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
+        if (this._opacity > 1) {
+            this._opacity = 1;
+        }
+        else if (this._opacity < 0) {
+            this._opacity = 0;
+        }
+        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
+        this._source = undefined;
+        /**
+         *
+         * @protected
+         */
+        this._olLayer = undefined;
+        this._loaded = false;
+        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
+        if (typeof this._maxResolution !== 'undefined') {
+            this._maxResolution += 0.00001;
+        }
+        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
+        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
+        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
+        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
+        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
+        };
+        this._legendContent = '';
+        if (this._legendCheckbox) {
+            this._legendContent += ("<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " ") +
+                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
+            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
+        }
+        else {
+            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
+        }
+        this._$legendDiv = null;
+        this._applyCollapseCalled = false;
+        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
+    }
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    LayerBase.prototype._load = function () {
+        if (this.loaded == true) {
+            return true;
+        }
+        else {
+            this._loaded = true;
+            return false;
+        }
+    };
+    /**
+     * Get the legend html, be sure to only add to the DOM once
+     * @returns {string} html for layer wrapped in a div
+     */
+    LayerBase.prototype.getLegendDiv = function () {
+        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
+    };
+    /**
+     *
+     * @param {string|undefined} additionalContent - additional content to add to legend
+     * @private
+     */
+    LayerBase.prototype._addLegendContent = function (additionalContent) {
+        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
+        var addCollapse = additionalContent.indexOf('<ul>') > -1;
+        if (addCollapse) {
+            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
+        }
+        this._legendContent += additionalContent;
+        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        if (this._$legendDiv.length > 0) {
+            this._$legendDiv.append(additionalContent);
+            this.applyCollapse();
+        }
+    };
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=] - additonal content to add
+     */
+    LayerBase.prototype.addLegendContent = function (additionalContent) {
+        this._addLegendContent(additionalContent);
+    };
+    LayerBase.prototype.applyCollapse = function () {
+        if (this._applyCollapseCalled) {
+            console.log('collapse already applied');
+            return undefined;
+        }
+        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        if (this._$legendDiv.length > 0) {
+            var $expander = this._$legendDiv.find('.legend-items-expander');
+            if ($expander.length > 0) {
+                this._applyCollapseCalled = true;
+                $expander.click(function () {
+                    var $this = $(this);
+                    $this.siblings('ul').slideToggle();
+                    if ($this.hasClass('legend-layer-group-collapsed')) {
+                        $this.removeClass('legend-layer-group-collapsed');
+                        $this.html('&#9660;');
+                    }
+                    else {
+                        $this.addClass('legend-layer-group-collapsed');
+                        $this.html('&#9654;');
+                    }
+                });
+                if (this._legendCollapse) {
+                    $expander.trigger('click');
+                }
+            }
+        }
+    };
+    /**
+     * trick to refresh the layer
+     */
+    LayerBase.prototype.refresh = function () {
+        if (this.source) {
+            this.source.refresh();
+        }
+    };
+    Object.defineProperty(LayerBase.prototype, "legendContent", {
+        /**
+         * get the legend content
+         * @type {string}
+         */
+        get: function () {
+            return this._legendContent;
+        },
+        /**
+         * set the legend content directly
+         * @param {string} newVal - new content
+         * @protected
+         */
+        set: function (newVal) {
+            this._legendContent = newVal;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "params", {
+        /**
+         * get the map get params
+         * @type {object}
+         */
+        get: function () {
+            return this._params;
+        },
+        /**
+         * set the map get params
+         * @param {object} newParams - new get params
+         * @protected
+         */
+        set: function (newParams) {
+            this._params = newParams;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "minResolution", {
+        /**
+         * get the minimum resolution
+         * @type {number|*}
+         */
+        get: function () {
+            return this._minResolution;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "maxResolution", {
+        /**
+         * get the maximum resolution
+         * @type {number|*}
+         */
+        get: function () {
+            return this._maxResolution;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "minZoom", {
+        /**
+         * get min zoom
+         * @type {number|*}
+         */
+        get: function () {
+            return this._minZoom;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "maxZoom", {
+        /**
+         * get max zoom
+         * @type {number|*}
+         */
+        get: function () {
+            return this._maxZoom;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "url", {
+        /**
+         * get the url
+         * @type {string}
+         */
+        get: function () {
+            return this._url;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "visible", {
+        /**
+         * Get the layer visibility
+         * @type {boolean}
+         */
+        get: function () {
+            return this._visible;
+        },
+        /**
+         * set the visibility
+         * @param visibility
+         */
+        set: function (visibility) {
+            this.setVisible(visibility);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.setVisible = function (visibility) {
+        this._visible = visibility;
+        if (this.olLayer) {
+            this.olLayer.setVisible(this._visible);
+            if (visibility && !this._loaded) {
+                this._load();
+            }
+        }
+    };
+    Object.defineProperty(LayerBase.prototype, "opacity", {
+        /**
+         * Get the layer opacity
+         * @type {number}
+         */
+        get: function () {
+            return this._opacity;
+        },
+        /**
+         * Set the layer opacity
+         * @param {number} opacity - layer opacity
+         */
+        set: function (opacity) {
+            this._opacity = opacity;
+            if (this.olLayer) {
+                this.olLayer.setOpacity(this._opacity);
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "name", {
+        /**
+         * Get the layer name
+         * @type {string}
+         */
+        get: function () {
+            return this._name;
+        },
+        /**
+         * set the layer name
+         * @param {string} newName - the new name
+         */
+        set: function (newName) {
+            this._name = newName;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "loaded", {
+        /**
+         * Check if the layer is loaded
+         * @type {boolean}
+         */
+        get: function () {
+            return this._loaded;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBase.prototype, "source", {
+        /**
+         * get the layer source
+         * @type {*}
+         */
+        get: function () {
+            return this.getSource();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.getSource = function () {
+        return this._source;
+    };
+    Object.defineProperty(LayerBase.prototype, "zIndex", {
+        /**
+         * get the z index
+         */
+        get: function () {
+            return this._zIndex;
+        },
+        /**
+         * set the z index
+         */
+        set: function (newZ) {
+            this._zIndex = newZ;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.setZIndex = function (newZ) {
+    };
+    Object.defineProperty(LayerBase.prototype, "olLayer", {
+        /**
+         * the the ol layer
+         */
+        get: function () {
+            return this.getOlLayer();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBase.prototype.getOlLayer = function () {
+        return this._olLayer;
+    };
+    return LayerBase;
+}());
+exports.LayerBase = LayerBase;
+nm.LayerBase = LayerBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerBase;
+//# sourceMappingURL=LayerBase.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerBase.js.map b/lib-ts/src-ts/layers/LayerBase.js.map
new file mode 100644
index 0000000..4c04ad7
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerBase.js","sourceRoot":"","sources":["../../../src-ts/layers/LayerBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerBaseVector.d.ts b/lib-ts/src-ts/layers/LayerBaseVector.d.ts
new file mode 100644
index 0000000..e6461af
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBaseVector.d.ts
@@ -0,0 +1,146 @@
+/// <reference path="../../../definitions/jquery.d.ts" />
+/// <reference path="../../../definitions/node.d.ts" />
+import { LayerBase, LayerBaseOptions } from './LayerBase';
+import MapMoveCls from '../olHelpers/mapMoveCls';
+import { ol } from 'custom-ol';
+export interface makeMapMoveParams {
+    /**
+     *
+     * @param lyr
+     * @param extent
+     * @param zoomLevel
+     */
+    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any;
+}
+export interface LayerBaseVectorOptions extends LayerBaseOptions {
+    autoLoad?: boolean;
+    style?: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction;
+    onDemand?: boolean;
+    onDemandDelay?: number;
+    mapMoveMakeGetParams?: makeMapMoveParams;
+    mapMoveObj?: MapMoveCls;
+}
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+export declare class LayerBaseVector extends LayerBase {
+    _olLayer: ol.layer.Vector;
+    _source: ol.source.Vector;
+    _style: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction;
+    _autoLoad: boolean;
+    _onDemand: boolean;
+    _onDemandDelay: number;
+    _mapMoveMakeGetParams: makeMapMoveParams;
+    _mapMoveParams: any;
+    _mapMove: MapMoveCls;
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+    constructor(url: string, options: LayerBaseVectorOptions);
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+    addFeatures(featureCollection: any): void;
+    /**
+     * Before call to map move callback, can prevent call by returning false
+     * @param {number} zoom - zoom level
+     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+     * @returns {boolean} if the call should proceed
+     */
+    mapMoveBefore(zoom: any, evtType: any): any;
+    /**
+     * callback to generate the parameters passed in the get request
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    mapMoveMakeGetParams(extent: any, zoomLevel: any): void;
+    /**
+     * callback function on map move
+     * @param {object} d - the json response
+     */
+    mapMoveCallback(d: any): void;
+    /**
+     * clear features in the layer
+     */
+    clear(): void;
+    /**
+     * get on demand delay in miliseconds
+     */
+    onDemandDelay: number;
+    /**
+     * get if the layer is autoloaded
+     */
+    autoLoad: boolean;
+    /**
+     * get the style definition
+     */
+    /**
+     * set the style
+     * @param style - the style or function
+     */
+    style: ol.style.StyleFunction | Array<ol.style.Style> | ol.style.Style;
+    /**
+     * get the map CRS if it is defined by the map move object
+     */
+    mapCrs: string;
+    /**
+     * get the map move object
+     * @type {MapMoveCls|*}
+     */
+    mapMove: MapMoveCls;
+    /**
+     * map move params
+     * @type {object}
+     */
+    mapMoveParams: any;
+    /**
+     * Set the layer visibility
+     * @type {boolean}
+     * @override
+     */
+    visible: any;
+    /**
+     * get the layer vector source
+     * @override
+     */
+    source: ol.source.Vector;
+    /**
+     * array of ol features
+     */
+    features: Array<ol.Feature>;
+    /**
+     *
+     */
+    olLayer: ol.layer.Vector;
+    protected setZIndex(newZ: number): void;
+}
+export default LayerBaseVector;
diff --git a/lib-ts/src-ts/layers/LayerBaseVector.js b/lib-ts/src-ts/layers/LayerBaseVector.js
new file mode 100644
index 0000000..b467f9d
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBaseVector.js
@@ -0,0 +1,275 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var LayerBase_1 = require('./LayerBase');
+var mapMove_1 = require('../olHelpers/mapMove');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var $ = require('jquery');
+var g = new custom_ol_1.ol.Map({});
+var nm = provide_1.default('layers');
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+var LayerBaseVector = (function (_super) {
+    __extends(LayerBaseVector, _super);
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+    function LayerBaseVector(url, options) {
+        _super.call(this, url, options);
+        options = options;
+        //prevent regular load if no url has been provided
+        if (this.url.trim() == '') {
+            this._loaded = true;
+        }
+        this._style = typeof options.style == 'undefined' ? undefined : options.style;
+        if (this.visible) {
+            this._autoLoad = true;
+        }
+        else {
+            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
+        }
+        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+        if (options.mapMoveObj) {
+            this._mapMove = options.mapMoveObj;
+        }
+        else {
+            this._mapMove = this._onDemand ? mapMove_1.default : undefined;
+        }
+        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
+            function () { return {}; };
+        if (this._onDemand) {
+            this._loaded = true;
+            this._mapMoveParams = {};
+            this._mapMove.checkInit();
+            this._mapMove.addVectorLayer(this);
+        }
+        this._source = new custom_ol_1.ol.source.Vector();
+        this._olLayer = new custom_ol_1.ol.layer.Vector({
+            source: this._source,
+            visible: this.visible,
+            style: this.style,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+    }
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+    LayerBaseVector.prototype.addFeatures = function (featureCollection) {
+        console.log('Layer vector base addFeatures is a placeholder and does nothing');
+    };
+    /**
+     * Before call to map move callback, can prevent call by returning false
+     * @param {number} zoom - zoom level
+     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+     * @returns {boolean} if the call should proceed
+     */
+    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {
+        if (this.minZoom !== undefined) {
+            if (zoom < this.minZoom) {
+                return false;
+            }
+        }
+        if (this.maxZoom !== undefined) {
+            if (zoom > this.maxZoom) {
+                return false;
+            }
+        }
+        return this.visible;
+    };
+    /**
+     * callback to generate the parameters passed in the get request
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+        this._mapMoveParams = {};
+        $.extend(this._mapMoveParams, this.params);
+        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+    };
+    /**
+     * callback function on map move
+     * @param {object} d - the json response
+     */
+    LayerBaseVector.prototype.mapMoveCallback = function (d) {
+        if (this.source) {
+            this._source.clear();
+        }
+    };
+    /**
+     * clear features in the layer
+     */
+    LayerBaseVector.prototype.clear = function () {
+        if (this._source) {
+            this._source.clear();
+        }
+    };
+    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
+        /**
+         * get on demand delay in miliseconds
+         */
+        get: function () {
+            return this._onDemandDelay;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
+        /**
+         * get if the layer is autoloaded
+         */
+        get: function () {
+            return this._autoLoad;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "style", {
+        /**
+         * get the style definition
+         */
+        get: function () {
+            return this._style;
+        },
+        /**
+         * set the style
+         * @param style - the style or function
+         */
+        set: function (style) {
+            this._style = style;
+            this.olLayer.setStyle(this._style);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
+        /**
+         * get the map CRS if it is defined by the map move object
+         */
+        get: function () {
+            if (this._mapMove) {
+                return this._mapMove.map.getView().getProjection().getCode();
+            }
+            else {
+                return undefined;
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
+        /**
+         * get the map move object
+         * @type {MapMoveCls|*}
+         */
+        get: function () {
+            return this._mapMove;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
+        /**
+         * map move params
+         * @type {object}
+         */
+        get: function () {
+            return this._mapMoveParams;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "visible", {
+        /**
+         * Set the layer visibility
+         * @type {boolean}
+         * @override
+         */
+        set: function (visibility) {
+            _super.prototype.setVisible.call(this, visibility);
+            if (this._onDemand) {
+                this.mapMove.triggerLyrLoad(this);
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "source", {
+        /**
+         * get the layer vector source
+         * @override
+         */
+        get: function () {
+            return this.getSource();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "features", {
+        /**
+         * array of ol features
+         */
+        get: function () {
+            return this.source.getFeatures();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
+        /**
+         *
+         */
+        get: function () {
+            return _super.prototype.getOlLayer.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    LayerBaseVector.prototype.setZIndex = function (newZ) {
+        this.olLayer.setZIndex(newZ);
+    };
+    return LayerBaseVector;
+}(LayerBase_1.LayerBase));
+exports.LayerBaseVector = LayerBaseVector;
+nm.LayerBaseVector = LayerBaseVector;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerBaseVector;
+//# sourceMappingURL=LayerBaseVector.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerBaseVector.js.map b/lib-ts/src-ts/layers/LayerBaseVector.js.map
new file mode 100644
index 0000000..cb429c7
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerBaseVector.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerBaseVector.js","sourceRoot":"","sources":["../../../src-ts/layers/LayerBaseVector.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerEsriMapServer.d.ts b/lib-ts/src-ts/layers/LayerEsriMapServer.d.ts
new file mode 100644
index 0000000..1cad1c2
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerEsriMapServer.d.ts
@@ -0,0 +1,50 @@
+/**
+ * Created by gavorhes on 12/7/2015.
+ */
+import LayerBase from './LayerBase';
+import { ol } from 'custom-ol';
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+declare class LayerEsriMapServer extends LayerBase {
+    _esriFormat: ol.format.EsriJSON;
+    _popupRequest: JQueryXHR;
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+     */
+    constructor(url: any, options: any);
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    addLegendContent(additionalContent?: string): void;
+    getPopupInfo(queryParams: any): void;
+    /**
+     *
+     * @returns {ol.source.TileArcGISRest} the vector source
+     */
+    source: ol.source.TileArcGISRest;
+    /**
+     *
+     * @returns the ol layer
+     */
+    olLayer: ol.layer.Tile;
+}
+export default LayerEsriMapServer;
diff --git a/lib-ts/src-ts/layers/LayerEsriMapServer.js b/lib-ts/src-ts/layers/LayerEsriMapServer.js
new file mode 100644
index 0000000..0b4537b
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerEsriMapServer.js
@@ -0,0 +1,145 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 12/7/2015.
+ */
+var LayerBase_1 = require('./LayerBase');
+var esriToOl = require('../olHelpers/esriToOlStyle');
+var mapPopup_1 = require('../olHelpers/mapPopup');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('layers');
+var $ = require('jquery');
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+var LayerEsriMapServer = (function (_super) {
+    __extends(LayerEsriMapServer, _super);
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+     */
+    function LayerEsriMapServer(url, options) {
+        _super.call(this, url, options);
+        this._source = new custom_ol_1.ol.source.TileArcGISRest({
+            url: this.url == '' ? undefined : this.url,
+            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
+        });
+        this._olLayer = new custom_ol_1.ol.layer.Tile({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+        this._esriFormat = new custom_ol_1.ol.format.EsriJSON();
+        this._popupRequest = null;
+        this.addLegendContent();
+        if (options.addPopup) {
+            mapPopup_1.default.addMapServicePopup(this);
+        }
+    }
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
+        var urlCopy = this.url;
+        if (urlCopy[urlCopy.length - 1] !== '/') {
+            urlCopy += '/';
+        }
+        urlCopy += 'legend?f=pjson&callback=?';
+        var _this = this;
+        var superAddLegend = _super.prototype.addLegendContent;
+        $.get(urlCopy, {}, function (d) {
+            var newHtml = esriToOl.makeMapServiceLegend(d);
+            superAddLegend.call(_this, newHtml);
+        }, 'json');
+    };
+    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
+        if (!this.visible) {
+            return;
+        }
+        var urlCopy = this.url;
+        if (urlCopy[urlCopy.length - 1] != '/') {
+            urlCopy += '/';
+        }
+        urlCopy += 'identify?callback=?';
+        var _this = this;
+        if (this._popupRequest != null) {
+            this._popupRequest.abort();
+        }
+        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
+            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
+                var r = _a[_i];
+                var popupHtml = '<table class="esri-popup-table">';
+                for (var a in r['attributes']) {
+                    if (r['attributes'].hasOwnProperty(a)) {
+                        var attrVal = r['attributes'][a];
+                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
+                            continue;
+                        }
+                        var attr = a;
+                        if (attr.length > 14) {
+                            attr = attr.slice(0, 11) + '...';
+                        }
+                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
+                    }
+                }
+                popupHtml += '</table>';
+                mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+            }
+        }, 'json').always(function () {
+            _this._popupRequest = null;
+        });
+    };
+    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
+        /**
+         *
+         * @returns {ol.source.TileArcGISRest} the vector source
+         */
+        get: function () {
+            return _super.prototype.getSource.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
+        /**
+         *
+         * @returns the ol layer
+         */
+        get: function () {
+            return _super.prototype.getOlLayer.call(this);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return LayerEsriMapServer;
+}(LayerBase_1.default));
+nm.LayerEsriMapServer = LayerEsriMapServer;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = LayerEsriMapServer;
+//# sourceMappingURL=LayerEsriMapServer.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/layers/LayerEsriMapServer.js.map b/lib-ts/src-ts/layers/LayerEsriMapServer.js.map
new file mode 100644
index 0000000..2a64577
--- /dev/null
+++ b/lib-ts/src-ts/layers/LayerEsriMapServer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../../src-ts/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/esriToOlStyle.d.ts b/lib-ts/src-ts/olHelpers/esriToOlStyle.d.ts
new file mode 100644
index 0000000..d1f4c2b
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/esriToOlStyle.d.ts
@@ -0,0 +1,30 @@
+export interface EsriRenderer {
+    type: string;
+}
+export interface EsriResponse {
+    drawingInfo: {
+        renderer: EsriRenderer;
+    };
+    geometryType: string;
+}
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+export declare function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse): {
+    style: any;
+    legend: any;
+};
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+export declare function makeMapServiceLegend(esriResponse: any): string;
diff --git a/lib-ts/src-ts/olHelpers/esriToOlStyle.js b/lib-ts/src-ts/olHelpers/esriToOlStyle.js
new file mode 100644
index 0000000..f8d520c
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/esriToOlStyle.js
@@ -0,0 +1,357 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 1/4/2016.
+ */
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('olHelpers.esriToOlStyle');
+/**
+ * This callback is displayed as part of the Requester class.
+ * @callback styleFunc
+ * @param {ol.Feature} feat - openlayers feature
+ * @param {number} resolution - map resolution
+ */
+/**
+ *
+ * @param {Array<number>} colorArray - input color array
+ * @param {number} opacity - the opacity 0 to 1
+ * @returns {string} rgba string
+ * @private
+ */
+function _colorArrayToRgba(colorArray, opacity) {
+    "use strict";
+    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
+}
+/**
+ * escape html charcters
+ * @param {string} str - input string
+ * @returns {string} escaped string
+ */
+function htmlEscape(str) {
+    return String(str)
+        .replace(/&/g, '&amp;')
+        .replace(/"/g, '&quot;')
+        .replace(/'/g, '&#39;')
+        .replace(/</g, '&lt;')
+        .replace(/>/g, '&gt;');
+}
+nm.htmlEscape = htmlEscape;
+var CommonSymbol = (function () {
+    /**
+     *
+     * @param symbolObj
+     * @param {number} opacity
+     */
+    function CommonSymbol(symbolObj, opacity) {
+        this.symbolObj = symbolObj;
+        this.opacity = opacity;
+        this.olStyle = undefined;
+        this.legendHtml = '';
+    }
+    return CommonSymbol;
+}());
+var PointSymbol = (function (_super) {
+    __extends(PointSymbol, _super);
+    function PointSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj['type']) {
+            case 'esriSMS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                var outlineWidth = this.symbolObj.outline.width;
+                var radius = this.symbolObj.size;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    image: new custom_ol_1.ol.style.Circle({
+                        radius: radius,
+                        fill: new custom_ol_1.ol.style.Fill({
+                            color: innerColor
+                        }),
+                        stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth })
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
+                break;
+            case 'esriPMS':
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] })
+                });
+                this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return PointSymbol;
+}(CommonSymbol));
+var LineSymbol = (function (_super) {
+    __extends(LineSymbol, _super);
+    function LineSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj['type']) {
+            case 'esriSLS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var lineWidth = this.symbolObj.width;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    stroke: new custom_ol_1.ol.style.Stroke({
+                        color: innerColor,
+                        //lineDash: [4],
+                        width: lineWidth
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+                this.legendHtml += "style=\"";
+                this.legendHtml += "background-color: " + innerColor + ";";
+                this.legendHtml += "width: 40px;";
+                this.legendHtml += "height: 4px;";
+                this.legendHtml += "position: relative;";
+                this.legendHtml += "display: inline-block;";
+                this.legendHtml += "top: -1px;";
+                this.legendHtml += "\"></span>";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return LineSymbol;
+}(CommonSymbol));
+var PolygonSymbol = (function (_super) {
+    __extends(PolygonSymbol, _super);
+    function PolygonSymbol(symbolObj, opacity) {
+        _super.call(this, symbolObj, opacity);
+        switch (this.symbolObj['type']) {
+            case 'esriSFS':
+                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                var outlineWidth = this.symbolObj.outline.width;
+                this.olStyle = new custom_ol_1.ol.style.Style({
+                    stroke: new custom_ol_1.ol.style.Stroke({
+                        color: outerColor,
+                        //lineDash: [4],
+                        width: outlineWidth
+                    }),
+                    fill: new custom_ol_1.ol.style.Fill({
+                        color: innerColor
+                    })
+                });
+                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+                this.legendHtml += "style=\"";
+                this.legendHtml += "background-color: " + innerColor + ";";
+                this.legendHtml += "border: solid " + outerColor + " 1px;";
+                this.legendHtml += "width: 40px;";
+                this.legendHtml += "height: 9px;";
+                this.legendHtml += "position: relative;";
+                this.legendHtml += "display: inline-block;";
+                this.legendHtml += "top: 2px;";
+                this.legendHtml += "\"></span>";
+                break;
+            default:
+                console.log(this.symbolObj);
+                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
+        }
+    }
+    return PolygonSymbol;
+}(CommonSymbol));
+var SymbolGenerator = (function () {
+    function SymbolGenerator(esriResponse) {
+        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+        this.renderer = esriResponse.drawingInfo.renderer;
+        this.olStyle = undefined;
+        this.legendHtml = '';
+    }
+    return SymbolGenerator;
+}());
+var SingleSymbol = (function (_super) {
+    __extends(SingleSymbol, _super);
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the symbol class to use
+     */
+    function SingleSymbol(esriResponse, SymbolClass) {
+        _super.call(this, esriResponse);
+        this.symbol = this.renderer['symbol'];
+        var symbolObj = new SymbolClass(this.symbol, this.opacity);
+        this.olStyle = symbolObj.olStyle;
+        this.legendHtml = symbolObj.legendHtml;
+    }
+    return SingleSymbol;
+}(SymbolGenerator));
+var UniqueValueSymbol = (function (_super) {
+    __extends(UniqueValueSymbol, _super);
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the Symbol class definition
+     */
+    function UniqueValueSymbol(esriResponse, SymbolClass) {
+        _super.call(this, esriResponse);
+        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
+        this.propertyName = this.renderer['field1'];
+        this.defaultSymbol = this.renderer['defaultSymbol'];
+        if (this.defaultSymbol) {
+            var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
+            this.defaultStyle = symbolObj.olStyle;
+            this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml;
+        }
+        else {
+            this.defaultStyle = undefined;
+            this.defaultLabelHtml = 'other';
+        }
+        this.valueArray = [];
+        this.labelArray = [];
+        this.legendArray = [];
+        this.propertyStyleLookup = {};
+        for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) {
+            var uniqueVal = _a[_i];
+            this.labelArray.push(uniqueVal['label']);
+            this.valueArray.push(uniqueVal['value']);
+            var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
+            this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml);
+            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+        }
+        var _this = this;
+        this.olStyle = function (feature, resolution) {
+            var checkProperties = feature.getProperties();
+            var checkProperty = checkProperties[_this.propertyName];
+            var returnValue;
+            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+                returnValue = [_this.propertyStyleLookup[checkProperty]];
+            }
+            else {
+                returnValue = [_this.defaultStyle];
+            }
+            return returnValue;
+        };
+        if (this.defaultLabelHtml !== null) {
+            this.legendArray.push(this.defaultLabelHtml);
+        }
+        this.legendHtml = '<ul>';
+        for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) {
+            var h = _c[_b];
+            this.legendHtml += "<li>" + h + "</li>";
+        }
+        this.legendHtml += '</ul>';
+    }
+    return UniqueValueSymbol;
+}(SymbolGenerator));
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+function makeFeatureServiceLegendAndSymbol(esriResponse) {
+    "use strict";
+    var renderer = esriResponse.drawingInfo.renderer;
+    var symbolLegendOut = null;
+    switch (renderer.type) {
+        case 'simple':
+            switch (esriResponse.geometryType) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse.geometryType + ' not handled');
+            }
+            break;
+        case 'uniqueValue':
+            switch (esriResponse.geometryType) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        default:
+            alert('not handled renderer type: ' + renderer['type']);
+    }
+    if (symbolLegendOut == null) {
+        return { style: undefined, legend: '' };
+    }
+    else {
+        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
+    }
+}
+exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+/**
+ *
+ * @param {object} lyrObject - the layer as defined in the response
+ * @param {boolean} [iconsOnly=false] use only icons
+ * @returns {string} legend html
+ */
+function mapServiceLegendItem(lyrObject, iconsOnly) {
+    if (iconsOnly === void 0) { iconsOnly = false; }
+    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
+    var layerName = lyrObject['layerName'];
+    var legendItems = lyrObject['legend'];
+    var legendHtml = '';
+    if (legendItems.length == 1) {
+        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
+    }
+    else {
+        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
+        for (var i = 0; i < legendItems.length; i++) {
+            legendHtml += "<li>";
+            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
+            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
+            legendHtml += "</li>";
+        }
+        legendHtml += '</ul>';
+    }
+    if (!iconsOnly) {
+        legendHtml = ("<span class=\"legend-layer-subitem\">" + layerName + "</span>") + legendHtml;
+    }
+    return legendHtml;
+}
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+function makeMapServiceLegend(esriResponse) {
+    "use strict";
+    var newLegendHtml = '';
+    var layers = esriResponse['layers'];
+    if (layers.length == 1) {
+        newLegendHtml += mapServiceLegendItem(layers[0], true);
+    }
+    else {
+        newLegendHtml += '<ul>';
+        for (var i = 0; i < layers.length; i++) {
+            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
+        }
+        newLegendHtml += '</ul>';
+    }
+    return newLegendHtml;
+}
+exports.makeMapServiceLegend = makeMapServiceLegend;
+nm.makeMapServiceLegend = makeMapServiceLegend;
+//# sourceMappingURL=esriToOlStyle.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/esriToOlStyle.js.map b/lib-ts/src-ts/olHelpers/esriToOlStyle.js.map
new file mode 100644
index 0000000..1fe6d3e
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/esriToOlStyle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esriToOlStyle.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapInteractionBase.d.ts b/lib-ts/src-ts/olHelpers/mapInteractionBase.d.ts
new file mode 100644
index 0000000..b840e1a
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapInteractionBase.d.ts
@@ -0,0 +1,40 @@
+import { ol } from 'custom-ol';
+/**
+ * base interaction
+ */
+export declare class MapInteractionBase {
+    _map: ol.Map;
+    _initialized: boolean;
+    _subtype: string;
+    /**
+     * map interaction base
+     * @param subtype - the interaction subtype
+     */
+    constructor(subtype: string);
+    /**
+     * base initializer, returns true for already initialized
+     * @param theMap - the ol Map
+     * @returns true for already initialized
+     */
+    init(theMap: ol.Map): boolean;
+    /**
+     * get reference to the ol map object
+     * @returns {ol.Map} the map object
+     */
+    map: ol.Map;
+    /**
+     * get if is initialized
+     * @returns {boolean} is initialized
+     */
+    initialized: boolean;
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     * @protected
+     */
+    _checkInit(): void;
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     */
+    checkInit(): void;
+}
+export default MapInteractionBase;
diff --git a/lib-ts/src-ts/olHelpers/mapInteractionBase.js b/lib-ts/src-ts/olHelpers/mapInteractionBase.js
new file mode 100644
index 0000000..10436da
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapInteractionBase.js
@@ -0,0 +1,79 @@
+"use strict";
+/**
+ * Created by gavorhes on 12/8/2015.
+ */
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('olHelpers');
+/**
+ * base interaction
+ */
+var MapInteractionBase = (function () {
+    /**
+     * map interaction base
+     * @param subtype - the interaction subtype
+     */
+    function MapInteractionBase(subtype) {
+        this._map = undefined;
+        this._initialized = false;
+        this._subtype = subtype;
+    }
+    /**
+     * base initializer, returns true for already initialized
+     * @param theMap - the ol Map
+     * @returns true for already initialized
+     */
+    MapInteractionBase.prototype.init = function (theMap) {
+        if (!this._initialized) {
+            this._map = theMap;
+            this._initialized = true;
+            return false;
+        }
+        return true;
+    };
+    Object.defineProperty(MapInteractionBase.prototype, "map", {
+        /**
+         * get reference to the ol map object
+         * @returns {ol.Map} the map object
+         */
+        get: function () {
+            return this._map;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
+        /**
+         * get if is initialized
+         * @returns {boolean} is initialized
+         */
+        get: function () {
+            return this._initialized;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     * @protected
+     */
+    MapInteractionBase.prototype._checkInit = function () {
+        if (!this.initialized) {
+            var msg = this._subtype + " object not initialized";
+            alert(msg);
+            console.log(msg);
+            throw msg;
+        }
+    };
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     */
+    MapInteractionBase.prototype.checkInit = function () {
+        this._checkInit();
+    };
+    return MapInteractionBase;
+}());
+exports.MapInteractionBase = MapInteractionBase;
+nm.MapInteractionBase = MapInteractionBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapInteractionBase;
+//# sourceMappingURL=mapInteractionBase.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapInteractionBase.js.map b/lib-ts/src-ts/olHelpers/mapInteractionBase.js.map
new file mode 100644
index 0000000..fb752b9
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapInteractionBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapInteractionBase.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/mapInteractionBase.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,wBAAoB,iBAAiB,CAAC,CAAA;AAEtC,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAIhC;;GAEG;AACH;IAKI;;;OAGG;IACH,4BAAY,OAAe;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,iCAAI,GAAJ,UAAK,MAAc;QACf,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,MAAM,CAAC,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;IAChB,CAAC;IAMD,sBAAI,mCAAG;QAJP;;;WAGG;aACH;YACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;;;OAAA;IAMD,sBAAI,2CAAW;QAJf;;;WAGG;aACH;YACI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAED;;;OAGG;IACH,uCAAU,GAAV;QACI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,GAAM,IAAI,CAAC,QAAQ,4BAAyB,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,sCAAS,GAAT;QACI,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IACL,yBAAC;AAAD,CAAC,AAlED,IAkEC;AAlEY,0BAAkB,qBAkE9B,CAAA;AAED,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C;kBAAe,kBAAkB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapMove.d.ts b/lib-ts/src-ts/olHelpers/mapMove.d.ts
new file mode 100644
index 0000000..963afae
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMove.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapMoveCls from './mapMoveCls';
+declare var _default: MapMoveCls;
+export default _default;
diff --git a/lib-ts/src-ts/olHelpers/mapMove.js b/lib-ts/src-ts/olHelpers/mapMove.js
new file mode 100644
index 0000000..17e2509
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMove.js
@@ -0,0 +1,8 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var mapMoveCls_1 = require('./mapMoveCls');
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = new mapMoveCls_1.default();
+//# sourceMappingURL=mapMove.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapMove.js.map b/lib-ts/src-ts/olHelpers/mapMove.js.map
new file mode 100644
index 0000000..a2cc0b8
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMove.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapMove.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/mapMove.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,2BAAuB,cAAc,CAAC,CAAA;AAMtC;kBAAe,IAAI,oBAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapMoveCls.d.ts b/lib-ts/src-ts/olHelpers/mapMoveCls.d.ts
new file mode 100644
index 0000000..494d965
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMoveCls.d.ts
@@ -0,0 +1,75 @@
+import LayerBaseVector from "../layers/LayerBaseVector";
+import MapInteractionBase from './mapInteractionBase';
+import { ol } from 'custom-ol';
+import { extentObject } from '../_internalnterfaces';
+import Timer = NodeJS.Timer;
+export interface mapMoveCallbackFunction {
+    /**
+     *
+     * @param extent extent as predefined object minX, minX, maxX, maxY
+     * @param zoomLevel current zoom level
+     * @param evtType the event type 'change:center', 'change:resolution'
+     */
+    (extent: extentObject, zoomLevel: number, evtType?: string): any;
+}
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+export declare class MapMoveCls extends MapInteractionBase {
+    _mapExtent: extentObject;
+    _zoomLevel: number;
+    _lookupLayer: Object;
+    _arrLayer: Array<LayerBaseVector>;
+    _arrLyrTimeout: Array<Timer>;
+    _mapMoveCallbackTimeout: Array<Timer>;
+    _mapMoveCallbackDelays: Array<number>;
+    _mapMoveCallbacksLookup: Object;
+    _mapMoveCallbackContext: Array<Object>;
+    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;
+    _arrLyrRequest: Array<any>;
+    /**
+     * constructor called implicitly
+     */
+    constructor();
+    /**
+     * initialize the map move object
+     * @param theMap - the ol map
+     */
+    init(theMap: ol.Map): boolean;
+    _updateMapExtent(): void;
+    /**
+     * return the map extent
+     */
+    mapExtent: extentObject;
+    /**
+     * Trigger the layer load
+     * @param lyr the layer being acted on
+     * @param index index of the layer
+     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+     */
+    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string): void;
+    /**
+     * trigger the map move call back at the given index
+     * @param ind - the index of the layer
+     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+     * @param functionId=undefined the function id used to reference the added callback function
+     */
+    triggerMoveCallback(ind: number, eventType?: string, functionId?: string): void;
+    /**
+     * Add a layer to the interaction
+     * @param  lyr - layer to add
+     * @param triggerOnAdd - if the layer should be loaded on add
+     */
+    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd?: boolean): void;
+    /**
+     * add a callback to the map move event
+     * @param func - callback function
+     * @param context - the context to use for this function
+     * @param delay=50 the delay before call load
+     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+     * @param functionId optional id to reference the function later for outside triggering
+     */
+    addCallback(func: mapMoveCallbackFunction, context: any, delay?: number, triggerOnAdd?: boolean, functionId?: string): void;
+}
+export default MapMoveCls;
diff --git a/lib-ts/src-ts/olHelpers/mapMoveCls.js b/lib-ts/src-ts/olHelpers/mapMoveCls.js
new file mode 100644
index 0000000..253ea31
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMoveCls.js
@@ -0,0 +1,236 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var mapInteractionBase_1 = require('./mapInteractionBase');
+var checkDefined = require('../util/checkDefined');
+var provide_1 = require('../util/provide');
+var makeGuid_1 = require('../util/makeGuid');
+var $ = require('jquery');
+var nm = provide_1.default('olHelpers');
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+var MapMoveCls = (function (_super) {
+    __extends(MapMoveCls, _super);
+    /**
+     * constructor called implicitly
+     */
+    function MapMoveCls() {
+        _super.call(this, 'map move');
+        this._arrLyrRequest = [];
+        this._arrLyrTimeout = [];
+        this._arrLayer = [];
+        this._lookupLayer = {};
+        this._mapMoveCallbacks = [];
+        this._mapMoveCallbacksLookup = {};
+        this._mapMoveCallbackDelays = [];
+        this._mapMoveCallbackContext = [];
+        this._mapMoveCallbackTimeout = [];
+        this._mapExtent = undefined;
+        this._zoomLevel = undefined;
+    }
+    /**
+     * initialize the map move object
+     * @param theMap - the ol map
+     */
+    MapMoveCls.prototype.init = function (theMap) {
+        var _this = this;
+        var isInitialized = _super.prototype.init.call(this, theMap);
+        if (_super.prototype.init.call(this, theMap)) {
+            return isInitialized;
+        }
+        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
+            _this._updateMapExtent();
+            // trigger the layer updates
+            for (var i = 0; i < _this._arrLayer.length; i++) {
+                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
+            }
+            // trigger the map callbacks
+            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
+                _this.triggerMoveCallback(i, e.type);
+            }
+        });
+    };
+    MapMoveCls.prototype._updateMapExtent = function () {
+        var theView = this.map.getView();
+        this._zoomLevel = theView.getZoom();
+        var extentArray = theView.calculateExtent(this.map.getSize());
+        this._mapExtent = {
+            minX: extentArray[0],
+            minY: extentArray[1],
+            maxX: extentArray[2],
+            maxY: extentArray[3]
+        };
+    };
+    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
+        /**
+         * return the map extent
+         */
+        get: function () {
+            if (!this._mapExtent) {
+                this._updateMapExtent();
+            }
+            return this._mapExtent;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * Trigger the layer load
+     * @param lyr the layer being acted on
+     * @param index index of the layer
+     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+     */
+    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            throw 'need to define lyr or index';
+        }
+        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            index = this._arrLayer.indexOf(lyr);
+        }
+        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
+            lyr = this._arrLayer[index];
+        }
+        // clear the timeout
+        if (this._arrLyrTimeout[index] != null) {
+            clearTimeout(this._arrLyrTimeout[index]);
+            this._arrLyrTimeout[index] = null;
+        }
+        // abort if necessary and clear the request
+        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
+            this._arrLyrRequest[index].abort();
+            this._arrLyrRequest[index] = null;
+        }
+        // dummy callback used if before load returns false
+        var callbackFunc = function () { };
+        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+            var _this_1 = this;
+            callbackFunc = function () {
+                function innerFunction(theLayer, theIndex) {
+                    var _innerThis = this;
+                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
+                        /**
+                         * @type {LayerBaseVector}
+                         */
+                        theLayer.mapMoveCallback(d);
+                        theLayer.loadCallback();
+                    }, 'json').fail(function (jqXHR) {
+                        if (jqXHR.statusText != 'abort') {
+                            console.log('failed');
+                            console.log(theLayer.url);
+                            console.log(theLayer.mapMoveParams);
+                        }
+                    }).always(function () {
+                        _innerThis._arrLyrTimeout[theIndex] = null;
+                        _innerThis._arrLyrRequest[theIndex] = null;
+                    });
+                }
+                innerFunction.call(_this_1, lyr, index);
+            };
+        }
+        else {
+            lyr.clear();
+        }
+        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+    };
+    /**
+     * trigger the map move call back at the given index
+     * @param ind - the index of the layer
+     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+     * @param functionId=undefined the function id used to reference the added callback function
+     */
+    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
+        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
+            throw 'either the function index or the id must be defined';
+        }
+        if (typeof ind !== 'number') {
+            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
+        }
+        if (ind < 0) {
+            console.log('function not found');
+            return;
+        }
+        // clear the timeout
+        if (this._mapMoveCallbackTimeout[ind] != null) {
+            clearTimeout(this._mapMoveCallbackTimeout[ind]);
+            this._mapMoveCallbackTimeout[ind] = null;
+        }
+        var ctx = this._mapMoveCallbackContext[ind];
+        var theFunc = this._mapMoveCallbacks[ind];
+        var _this = this;
+        var f = function () {
+            if (ctx !== null) {
+                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
+            }
+            else {
+                theFunc(_this._mapExtent, _this._zoomLevel, eventType);
+            }
+        };
+        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
+    };
+    /**
+     * Add a layer to the interaction
+     * @param  lyr - layer to add
+     * @param triggerOnAdd - if the layer should be loaded on add
+     */
+    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
+        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+        if (this._arrLayer.indexOf(lyr) > -1) {
+            console.log('already added ' + lyr.name + ' to map move');
+            return;
+        }
+        this._checkInit();
+        this._arrLyrRequest.push(null);
+        this._arrLyrTimeout.push(null);
+        this._arrLayer.push(lyr);
+        this._lookupLayer[lyr.id] = lyr;
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
+        }
+    };
+    /**
+     * add a callback to the map move event
+     * @param func - callback function
+     * @param context - the context to use for this function
+     * @param delay=50 the delay before call load
+     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+     * @param functionId optional id to reference the function later for outside triggering
+     */
+    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
+        if (this._mapMoveCallbacks.indexOf(func) > -1) {
+            console.log('this function already added to map move');
+            return;
+        }
+        this._checkInit();
+        if (!functionId) {
+            functionId = makeGuid_1.default();
+        }
+        this._mapMoveCallbacks.push(func);
+        this._mapMoveCallbacksLookup[functionId] = functionId;
+        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
+        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
+        this._mapMoveCallbackTimeout.push(null);
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
+        }
+    };
+    return MapMoveCls;
+}(mapInteractionBase_1.default));
+exports.MapMoveCls = MapMoveCls;
+nm.MapMoveCls = MapMoveCls;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapMoveCls;
+//# sourceMappingURL=mapMoveCls.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapMoveCls.js.map b/lib-ts/src-ts/olHelpers/mapMoveCls.js.map
new file mode 100644
index 0000000..a2421e6
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapMoveCls.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapMoveCls.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/mapMoveCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapPopup.d.ts b/lib-ts/src-ts/olHelpers/mapPopup.d.ts
new file mode 100644
index 0000000..f404d23
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopup.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapPopupCls from './mapPopupCls';
+declare var _default: MapPopupCls;
+export default _default;
diff --git a/lib-ts/src-ts/olHelpers/mapPopup.js b/lib-ts/src-ts/olHelpers/mapPopup.js
new file mode 100644
index 0000000..59df5a5
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopup.js
@@ -0,0 +1,8 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var mapPopupCls_1 = require('./mapPopupCls');
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = new mapPopupCls_1.default();
+//# sourceMappingURL=mapPopup.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapPopup.js.map b/lib-ts/src-ts/olHelpers/mapPopup.js.map
new file mode 100644
index 0000000..3c636e9
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopup.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/mapPopup.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,4BAAwB,eAAe,CAAC,CAAA;AAMxC;kBAAe,IAAI,qBAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapPopupCls.d.ts b/lib-ts/src-ts/olHelpers/mapPopupCls.d.ts
new file mode 100644
index 0000000..7e8dbea
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopupCls.d.ts
@@ -0,0 +1,150 @@
+/// <reference path="../../../definitions/jquery.d.ts" />
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import MapInteractionBase from './mapInteractionBase';
+import { ol } from 'custom-ol';
+import { LayerBaseVector } from "../layers/LayerBaseVector";
+import LayerEsriMapServer from "../layers/LayerEsriMapServer";
+export interface popupChangedFunction {
+    ($popContent: JQuery): any;
+}
+/**
+ *
+ */
+export interface popupCallback {
+    /**
+     * Callback function for the popup
+     * @param featureProperties
+     * @param jqRef
+     */
+    (featureProperties: Object, jqRef: JQuery): string | boolean;
+}
+export declare class FeatureLayerProperties {
+    feature: ol.Feature;
+    layer: LayerEsriMapServer;
+    layerIndex: number;
+    selectionLayer: ol.layer.Vector;
+    popupContent: string;
+    esriLayerName: string;
+    /**
+     *
+     * @param feature the feature
+     * @param layer - the layer in the popup
+     * @param layerIndex - index of the layer
+     * @param selectionLayer - the ol selection layer
+     * @param [esriLayerName=undefined] - esri layer name
+     */
+    constructor(feature: ol.Feature, layer: LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string);
+    layerName: string;
+}
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+declare class MapPopupCls extends MapInteractionBase {
+    _popupOpen: boolean;
+    _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;
+    _currentPopupIndex: number;
+    _popupContentLength: number;
+    _esriMapServiceLayers: Array<LayerEsriMapServer>;
+    _$popupCloser: JQuery;
+    _$popupContent: JQuery;
+    _$popupContainer: JQuery;
+    _popupOverlay: ol.Overlay;
+    _arrPopupLayers: Array<LayerBaseVector>;
+    _popupCoordinate: ol.Coordinate;
+    _popupChangedFunctions: Array<popupChangedFunction>;
+    _mapClickFunctions: Array<Function>;
+    _selectionLayerLookup: Object;
+    _arrPopupLayerIds: Array<string>;
+    _arrPopupLayerNames: Array<string>;
+    _arrPopupOlLayers: Array<ol.layer.Vector>;
+    _arrPopupContentFunction: Array<popupCallback>;
+    _selectionLayers: Array<ol.layer.Vector>;
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+    /**
+     * map popup constructor
+     */
+    constructor();
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+    init(theMap: ol.Map): boolean;
+    /**
+     * helper to select features
+     * @private
+     */
+    _triggerFeatSelect(): void;
+    /**
+     *
+     * @param feature - the ol feature
+     * @param {LayerEsriMapServer} lyr - the map server layer
+     * @param {string} popupContent - popup content
+     * @param {string} esriName - esri layer name
+     */
+    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string): void;
+    /**
+     *
+     * @param  pixel - the ol pixel
+     * @returns  feature layer properties
+     * @private
+     */
+    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties>;
+    closePopup(): boolean;
+    /**
+     *
+     * @param chgFunction - popup change function
+     */
+    addPopupChangedFunction(chgFunction: popupChangedFunction): void;
+    /**
+     *
+     * @param {LayerBase|*} lyr - the layer being acted on
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns  the new selection layer
+     * @private
+     */
+    _addPopupLayer(lyr: any, selectionStyle: any): ol.layer.Vector;
+    /**
+     * Add popup to the map
+     * @param {LayerBase|*} lyr The layer that the popup with act on
+     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback, selectionStyle: any): ol.layer.Vector;
+    /**
+     *
+     * @param {LayerBase} lyr - layer
+     */
+    removeVectorPopup(lyr: any): void;
+    /**
+     *
+     * @param {LayerEsriMapServer} lyr - map server layer
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    addMapServicePopup(lyr: any, selectionStyle?: ol.style.Style | Array<ol.style.Style> | ol.style.StyleFunction): ol.layer.Vector;
+    clearSelection(): void;
+    /**
+     * Add a function to be called when the map is clicked but before any popups are implemented
+     * @param {function} func - the map click function
+     */
+    addMapClickFunction(func: Function): void;
+}
+export default MapPopupCls;
diff --git a/lib-ts/src-ts/olHelpers/mapPopupCls.js b/lib-ts/src-ts/olHelpers/mapPopupCls.js
new file mode 100644
index 0000000..17141ee
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopupCls.js
@@ -0,0 +1,418 @@
+/// <reference path="../../definitions/jquery.d.ts"/>
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+var mapInteractionBase_1 = require('./mapInteractionBase');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var $ = require('jquery');
+var nm = provide_1.default('olHelpers');
+var FeatureLayerProperties = (function () {
+    /**
+     *
+     * @param feature the feature
+     * @param layer - the layer in the popup
+     * @param layerIndex - index of the layer
+     * @param selectionLayer - the ol selection layer
+     * @param [esriLayerName=undefined] - esri layer name
+     */
+    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+        this.feature = feature;
+        this.layer = layer;
+        this.layerIndex = layerIndex;
+        this.selectionLayer = selectionLayer;
+        this.popupContent = '';
+        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+    }
+    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
+        get: function () {
+            if (typeof this.esriLayerName == 'string') {
+                return this.esriLayerName;
+            }
+            else {
+                return this.layer.name;
+            }
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return FeatureLayerProperties;
+}());
+exports.FeatureLayerProperties = FeatureLayerProperties;
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+var MapPopupCls = (function (_super) {
+    __extends(MapPopupCls, _super);
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+    /**
+     * map popup constructor
+     */
+    function MapPopupCls() {
+        _super.call(this, 'map popup');
+        this._arrPopupLayerIds = [];
+        this._arrPopupLayerNames = [];
+        this._arrPopupLayers = [];
+        this._arrPopupOlLayers = [];
+        this._arrPopupContentFunction = [];
+        this._$popupContainer = undefined;
+        this._$popupContent = undefined;
+        this._$popupCloser = undefined;
+        this._popupOverlay = undefined;
+        this._selectionLayers = [];
+        this._selectionLayerLookup = {};
+        this._mapClickFunctions = [];
+        //let a = function($jqueryContent){console.log($jqueryContent)};
+        //this._popupChangedLookup = {'a': a};
+        this._popupChangedFunctions = [];
+        this._esriMapServiceLayers = [];
+        this._popupOpen = false;
+        this._popupCoordinate = null;
+        this._passThroughLayerFeatureArray = [];
+        this._currentPopupIndex = -1;
+        this._popupContentLength = 0;
+    }
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+    MapPopupCls.prototype.init = function (theMap) {
+        var _this = this;
+        var isInitialized = _super.prototype.init.call(this, theMap);
+        if (isInitialized) {
+            return true;
+        }
+        var $map;
+        var target = this.map.getTarget();
+        if (typeof target == 'string') {
+            $map = $('#' + target);
+        }
+        else {
+            $map = $(target);
+        }
+        $map.append('<div class="ol-popup">' +
+            '<span class="ol-popup-closer">X</span>' +
+            '<div class="popup-content"></div>' +
+            '</div>');
+        this._$popupContainer = $map.find('.ol-popup');
+        this._$popupContent = $map.find('.popup-content');
+        this._$popupCloser = $map.find('.ol-popup-closer');
+        this._popupOverlay = new custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true,
+            autoPanAnimation: {
+                duration: 250,
+                source: theMap.getView().getCenter()
+            } });
+        this._map.addOverlay(this._popupOverlay);
+        this._$popupCloser.click(function (evt) {
+            _this.closePopup();
+        });
+        // display popup on click
+        this._map.on('singleclick', function (evt) {
+            _this.closePopup();
+            _this._popupCoordinate = evt['coordinate'];
+            if (_this._esriMapServiceLayers.length > 0) {
+                var queryParams = {
+                    geometry: evt['coordinate'].join(','),
+                    geometryType: 'esriGeometryPoint',
+                    layers: 'all',
+                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
+                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
+                    imageDisplay: _this._map.getSize().join(',') + ',96',
+                    returnGeometry: true,
+                    tolerance: 15,
+                    f: 'pjson'
+                };
+                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
+                    var l = _a[_i];
+                    l.getPopupInfo(queryParams);
+                }
+            }
+            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
+            _this._passThroughLayerFeatureArray = [];
+            _this._currentPopupIndex = -1;
+            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+                var featObj = layerFeatureObjectArray[i];
+                var props = featObj.feature.getProperties();
+                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+                //skip if return was false
+                if (popupContentResponse === false) {
+                }
+                else if (typeof popupContentResponse == 'string') {
+                    featObj.popupContent = popupContentResponse;
+                    _this._passThroughLayerFeatureArray.push(featObj);
+                }
+                else {
+                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
+                }
+            }
+            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
+            _this._currentPopupIndex = -1;
+            var popupHtml = '<div class="ol-popup-nav">';
+            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
+            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
+            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
+            popupHtml += "<span>&nbsp;of&nbsp;</span>";
+            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
+            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
+            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
+            popupHtml += '</div>';
+            popupHtml += '<div class="ol-popup-inner">';
+            popupHtml += '</div>';
+            _this._$popupContent.html(popupHtml);
+            _this._$popupContent.find('.previous-popup').click(function () {
+                if (_this._popupContentLength == 1) {
+                    return;
+                }
+                if (_this._currentPopupIndex == 0) {
+                    _this._currentPopupIndex = _this._popupContentLength - 1;
+                }
+                else {
+                    _this._currentPopupIndex--;
+                }
+                _this._triggerFeatSelect();
+            });
+            var nextPopup = _this._$popupContent.find('.next-popup');
+            nextPopup.click(function () {
+                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+                    return;
+                }
+                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
+                    _this._currentPopupIndex = 0;
+                }
+                else {
+                    _this._currentPopupIndex++;
+                }
+                _this._triggerFeatSelect();
+            });
+            if (_this._popupContentLength > 0) {
+                nextPopup.trigger('click');
+                _this._popupOverlay.setPosition(_this._popupCoordinate);
+                _this._$popupContent.scrollTop(0);
+                _this._popupOpen = true;
+            }
+        });
+        //change mouse cursor when over marker
+        this._map.on('pointermove', function (evt) {
+            if (evt['dragging']) {
+                return;
+            }
+            var pixel = _this.map.getEventPixel(evt['originalEvent']);
+            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
+                    var olLayer = _a[_i];
+                    if (lyrCandidate == olLayer) {
+                        return true;
+                    }
+                }
+                return false;
+            });
+            _this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+        });
+        return true;
+    };
+    /**
+     * helper to select features
+     * @private
+     */
+    MapPopupCls.prototype._triggerFeatSelect = function () {
+        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
+        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
+        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
+        this.clearSelection();
+        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
+        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
+        $layerNameSpan.html(lyrFeatObj.layerName);
+        $innerPopup.html(lyrFeatObj.popupContent);
+        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
+        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
+            var f = _a[_i];
+            f(this._$popupContent);
+        }
+    };
+    /**
+     *
+     * @param feature - the ol feature
+     * @param {LayerEsriMapServer} lyr - the map server layer
+     * @param {string} popupContent - popup content
+     * @param {string} esriName - esri layer name
+     */
+    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
+        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
+        featLayerObject.popupContent = popupContent;
+        this._passThroughLayerFeatureArray.push(featLayerObject);
+        this._popupContentLength++;
+        $('.popup-content-length').html(this._popupContentLength.toFixed());
+        if (!this._popupOpen) {
+            this._$popupContent.find('.next-popup').trigger('click');
+            this._popupOverlay.setPosition(this._popupCoordinate);
+            this._$popupContent.scrollTop(0);
+            this._popupOpen = true;
+        }
+    };
+    /**
+     *
+     * @param  pixel - the ol pixel
+     * @returns  feature layer properties
+     * @private
+     */
+    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
+        var _this = this;
+        var layerFeatureObjectArray = [];
+        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
+            //TODO fix this
+            // if (lyrIndex > -1) {
+            //     layerFeatureObjectArray.push(new FeatureLayerProperties(
+            //         feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));
+            // }
+        });
+        return layerFeatureObjectArray;
+    };
+    MapPopupCls.prototype.closePopup = function () {
+        this._checkInit();
+        this._popupOpen = false;
+        this._popupOverlay.setPosition(undefined);
+        this._$popupCloser[0].blur();
+        this.clearSelection();
+        this._$popupContent.html('');
+        return false;
+    };
+    ;
+    /**
+     *
+     * @param chgFunction - popup change function
+     */
+    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
+        this._popupChangedFunctions.push(chgFunction);
+    };
+    /**
+     *
+     * @param {LayerBase|*} lyr - the layer being acted on
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns  the new selection layer
+     * @private
+     */
+    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+        this._checkInit();
+        selectionStyle = selectionStyle || {};
+        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+        selectionStyle.width = selectionStyle.width || 10;
+        var theStyle;
+        if (selectionStyle.olStyle) {
+            theStyle = selectionStyle.olStyle;
+        }
+        else {
+            theStyle = new custom_ol_1.ol.style.Style({
+                stroke: new custom_ol_1.ol.style.Stroke({
+                    color: selectionStyle.color,
+                    width: selectionStyle.width
+                }),
+                image: new custom_ol_1.ol.style.Circle({
+                    radius: 7,
+                    fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }),
+                    stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 })
+                }),
+                fill: new custom_ol_1.ol.style.Fill({
+                    color: selectionStyle.color
+                })
+            });
+        }
+        var selectionLayer = new custom_ol_1.ol.layer.Vector({
+            source: new custom_ol_1.ol.source.Vector(),
+            style: theStyle,
+            zIndex: 100
+        });
+        this._selectionLayers.push(selectionLayer);
+        this._selectionLayerLookup[lyr.id] = selectionLayer;
+        this.map.addLayer(selectionLayer);
+        return selectionLayer;
+    };
+    /**
+     * Add popup to the map
+     * @param {LayerBase|*} lyr The layer that the popup with act on
+     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
+        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+        this._arrPopupLayerIds.push(lyr.id);
+        this._arrPopupLayerNames.push(lyr.name);
+        this._arrPopupLayers.push(lyr);
+        this._arrPopupOlLayers.push(lyr.olLayer);
+        this._arrPopupContentFunction.push(popupContentFunction);
+        return selectionLayer;
+    };
+    ;
+    /**
+     *
+     * @param {LayerBase} lyr - layer
+     */
+    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
+        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
+        if (idx > -1) {
+            this._arrPopupLayerIds.splice(idx, 1);
+            this._arrPopupLayerNames.splice(idx, 1);
+            this._arrPopupLayers.splice(idx, 1);
+            this._arrPopupOlLayers.splice(idx, 1);
+            this._arrPopupContentFunction.splice(idx, 1);
+            this._selectionLayers.splice(idx, 1);
+            delete this._selectionLayerLookup[lyr.id];
+        }
+    };
+    /**
+     *
+     * @param {LayerEsriMapServer} lyr - map server layer
+     * @param {object} [selectionStyle={}] the selection style configuration
+     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+     * @param {number} [selectionStyle.width=10] the selection width for linear features
+     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+     * @returns {object} a reference to the ol selection layer
+     */
+    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
+        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+        this._esriMapServiceLayers.push(lyr);
+        return selectionLayer;
+    };
+    MapPopupCls.prototype.clearSelection = function () {
+        this._checkInit();
+        for (var i = 0; i < this._selectionLayers.length; i++) {
+            this._selectionLayers[i].getSource().clear();
+        }
+        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
+            var f = _a[_i];
+            f();
+        }
+    };
+    ;
+    /**
+     * Add a function to be called when the map is clicked but before any popups are implemented
+     * @param {function} func - the map click function
+     */
+    MapPopupCls.prototype.addMapClickFunction = function (func) {
+        this._mapClickFunctions.push(func);
+    };
+    return MapPopupCls;
+}(mapInteractionBase_1.default));
+nm.MapPopupCls = MapPopupCls;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = MapPopupCls;
+//# sourceMappingURL=mapPopupCls.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/mapPopupCls.js.map b/lib-ts/src-ts/olHelpers/mapPopupCls.js.map
new file mode 100644
index 0000000..9335e5c
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/mapPopupCls.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/propertiesZoomStyle.d.ts b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.d.ts
new file mode 100644
index 0000000..3fdc694
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.d.ts
@@ -0,0 +1,15 @@
+import { ol } from 'custom-ol';
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+declare function propertiesZoomStyle(styleFunc: any): (feature: ol.Feature, resolution: any) => void;
+export default propertiesZoomStyle;
diff --git a/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js
new file mode 100644
index 0000000..8862ccc
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js
@@ -0,0 +1,31 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var zoomResolutionConvert = require('./zoomResolutionConvert');
+var nm = provide_1.default('olHelpers');
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+function propertiesZoomStyle(styleFunc) {
+    if (styleFunc == undefined) {
+        return undefined;
+    }
+    return function (feature, resolution) {
+        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
+    };
+}
+nm.propertiesZoomStyle = propertiesZoomStyle;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = propertiesZoomStyle;
+//# sourceMappingURL=propertiesZoomStyle.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js.map b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js.map
new file mode 100644
index 0000000..a04d700
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/propertiesZoomStyle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"propertiesZoomStyle.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/propertiesZoomStyle.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,IAAY,qBAAqB,WAAM,yBAAyB,CAAC,CAAA;AAEjE,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAGhC;;;;;;GAMG;AAEH;;;;GAIG;AACH,6BAA6B,SAAS;IAClC,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,CAAA,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,UAAU,OAAmB,EAAE,UAAU;QAC5C,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC;AACN,CAAC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC7C;kBAAe,mBAAmB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/quickMap.d.ts b/lib-ts/src-ts/olHelpers/quickMap.d.ts
new file mode 100644
index 0000000..5268c24
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMap.d.ts
@@ -0,0 +1,23 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+import { quickMapOptions } from './quickMapBase';
+import { ol } from 'custom-ol';
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+export declare function quickMap(options?: quickMapOptions): ol.Map;
+export default quickMap;
diff --git a/lib-ts/src-ts/olHelpers/quickMap.js b/lib-ts/src-ts/olHelpers/quickMap.js
new file mode 100644
index 0000000..7343103
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMap.js
@@ -0,0 +1,36 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+"use strict";
+var quickMapBase_1 = require('./quickMapBase');
+var provide_1 = require('../util/provide');
+var mapMove_1 = require('./mapMove');
+var mapPopup_1 = require('./mapPopup');
+var nm = provide_1.default('olHelpers');
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+function quickMap(options) {
+    var m = quickMapBase_1.quickMapBase(options);
+    mapMove_1.default.init(m);
+    mapPopup_1.default.init(m);
+    return m;
+}
+exports.quickMap = quickMap;
+nm.quickMap = quickMap;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = quickMap;
+//# sourceMappingURL=quickMap.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/quickMap.js.map b/lib-ts/src-ts/olHelpers/quickMap.js.map
new file mode 100644
index 0000000..1f0d6a7
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"quickMap.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/quickMap.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,6BAA4C,gBAAgB,CAAC,CAAA;AAC7D,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,wBAAoB,WAAW,CAAC,CAAA;AAChC,yBAAqB,YAAY,CAAC,CAAA;AAClC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;;;;;;;;;;;GAeG;AACH,kBAAyB,OAA0B;IAC/C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjB,MAAM,CAAC,CAAC,CAAC;AACb,CAAC;AANe,gBAAQ,WAMvB,CAAA;AAGD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;kBAAe,QAAQ,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/quickMapBase.d.ts b/lib-ts/src-ts/olHelpers/quickMapBase.d.ts
new file mode 100644
index 0000000..e72054b
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMapBase.d.ts
@@ -0,0 +1,31 @@
+import { ol } from 'custom-ol';
+export interface quickMapOptions {
+    divId?: string;
+    center?: {
+        x: number;
+        y: number;
+    };
+    zoom?: number;
+    minZoom?: number;
+    maxZoom?: number;
+    baseSwitcher?: boolean;
+    fullScreen?: boolean;
+}
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param [options={}] config options
+ * @param [options.divId=map] map div id
+ * @param [options.center={}] center config object
+ * @param [options.center.x=-10018378] center x, web mercator x or lon
+ * @param [options.center.y=5574910] center y, web mercator y or lat
+ * @param [options.zoom=7] zoom level
+ * @param [options.minZoom=undefined] min zoom
+ * @param [options.maxZoom=undefined] max zoom
+ * @param [options.baseSwitcher=true] if add base map switcher
+ * @param [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+export declare function quickMapBase(options?: quickMapOptions): ol.Map;
+export default quickMapBase;
diff --git a/lib-ts/src-ts/olHelpers/quickMapBase.js b/lib-ts/src-ts/olHelpers/quickMapBase.js
new file mode 100644
index 0000000..9bfea03
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMapBase.js
@@ -0,0 +1,74 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+"use strict";
+var $ = require('jquery');
+var provide_1 = require('../util/provide');
+var custom_ol_1 = require('custom-ol');
+var nm = provide_1.default('olHelpers');
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param [options={}] config options
+ * @param [options.divId=map] map div id
+ * @param [options.center={}] center config object
+ * @param [options.center.x=-10018378] center x, web mercator x or lon
+ * @param [options.center.y=5574910] center y, web mercator y or lat
+ * @param [options.zoom=7] zoom level
+ * @param [options.minZoom=undefined] min zoom
+ * @param [options.maxZoom=undefined] max zoom
+ * @param [options.baseSwitcher=true] if add base map switcher
+ * @param [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+function quickMapBase(options) {
+    options = options || {};
+    options.divId = options.divId || 'map';
+    options.center = options.center || { x: -10018378, y: 5574910 };
+    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
+    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
+    var $mapDiv = $('#' + options.divId);
+    $mapDiv.css('position', 'relative');
+    var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() });
+    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
+    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
+    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
+    if (options.baseSwitcher) {
+    }
+    if (options.zoom < 0 || options.zoom > 28) {
+        throw 'zoom out of range';
+    }
+    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
+        var p = new custom_ol_1.ol.geom.Point([options.center.x, options.center.y]);
+        new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+        p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" }));
+        var coordinates = p.getCoordinates();
+        options.center.x = coordinates[0];
+        options.center.y = coordinates[1];
+    }
+    var map = new custom_ol_1.ol.Map({
+        layers: [osmLayer],
+        target: options.divId,
+        controls: custom_ol_1.ol.control.defaults({
+            attributionOptions: { collapsible: false }
+        }),
+        view: new custom_ol_1.ol.View({
+            center: [options.center.x, options.center.y],
+            zoom: options.zoom,
+            minZoom: options.minZoom,
+            maxZoom: options.maxZoom
+        })
+    });
+    if (options.fullScreen) {
+        //TODO add full screen options to ts
+        map.addControl(new custom_ol_1.ol.control.FullScreen({}));
+    }
+    return map;
+}
+exports.quickMapBase = quickMapBase;
+nm.quickMapBase = quickMapBase;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = quickMapBase;
+//# sourceMappingURL=quickMapBase.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/quickMapBase.js.map b/lib-ts/src-ts/olHelpers/quickMapBase.js.map
new file mode 100644
index 0000000..50ab24e
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/quickMapBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/quickMapBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/zoomResolutionConvert.d.ts b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.d.ts
new file mode 100644
index 0000000..a0814c9
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+export declare function zoomToResolution(zoomLevel: any): number;
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+export declare function resolutionToZoom(resolution: any): number;
diff --git a/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js
new file mode 100644
index 0000000..d4786ca
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js
@@ -0,0 +1,75 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+"use strict";
+var provide_1 = require('../util/provide');
+var nm = provide_1.default('olHelpers.zoomResolutionConvert');
+var _zoomResLookup = [
+    156543.03392804097,
+    78271.51696402048,
+    39135.75848201024,
+    19567.87924100512,
+    9783.93962050256,
+    4891.96981025128,
+    2445.98490512564,
+    1222.99245256282,
+    611.49622628141,
+    305.748113140705,
+    152.8740565703525,
+    76.43702828517625,
+    38.21851414258813,
+    19.109257071294063,
+    9.554628535647032,
+    4.777314267823516,
+    2.388657133911758,
+    1.194328566955879,
+    0.5971642834779395,
+    0.29858214173896974,
+    0.14929107086948487,
+    0.07464553543474244,
+    0.03732276771737122,
+    0.01866138385868561,
+    0.009330691929342804,
+    0.004665345964671402,
+    0.002332672982335701,
+    0.0011663364911678506,
+    0.0005831682455839253 //28
+];
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+function zoomToResolution(zoomLevel) {
+    "use strict";
+    if (typeof zoomLevel == 'number') {
+        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
+            return _zoomResLookup[zoomLevel];
+        }
+        else {
+            console.log("invalid zoom level provided: " + zoomLevel);
+            return undefined;
+        }
+    }
+    else {
+        return undefined;
+    }
+}
+exports.zoomToResolution = zoomToResolution;
+nm.zoomToResolution = zoomToResolution;
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+function resolutionToZoom(resolution) {
+    for (var i = 0; i < _zoomResLookup.length; i++) {
+        if (resolution >= _zoomResLookup[i]) {
+            return i;
+        }
+    }
+    return 0;
+}
+exports.resolutionToZoom = resolutionToZoom;
+nm.resolutionToZoom = resolutionToZoom;
+//# sourceMappingURL=zoomResolutionConvert.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js.map b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js.map
new file mode 100644
index 0000000..77b4c18
--- /dev/null
+++ b/lib-ts/src-ts/olHelpers/zoomResolutionConvert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"zoomResolutionConvert.js","sourceRoot":"","sources":["../../../src-ts/olHelpers/zoomResolutionConvert.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,IAAM,EAAE,GAAG,iBAAO,CAAC,iCAAiC,CAAC,CAAC;AAEtD,IAAI,cAAc,GAAG;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB,CAAC,IAAI;CAC7B,CAAC;AAEF;;;;GAIG;AACH,0BAAiC,SAAS;IACtC,YAAY,CAAC;IAEb,EAAE,CAAC,CAAC,OAAO,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC;QAC/B,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,kCAAgC,SAAW,CAAC,CAAC;YAEzD,MAAM,CAAC,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAde,wBAAgB,mBAc/B,CAAA;AACD,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,0BAAiC,UAAU;IACvC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;QAC5C,EAAE,CAAC,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAE,CAAC,CAAA,CAAC;YAClC,MAAM,CAAC,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IAED,MAAM,CAAC,CAAC,CAAC;AACb,CAAC;AARe,wBAAgB,mBAQ/B,CAAA;AAED,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/checkDefined.d.ts b/lib-ts/src-ts/util/checkDefined.d.ts
new file mode 100644
index 0000000..c116a08
--- /dev/null
+++ b/lib-ts/src-ts/util/checkDefined.d.ts
@@ -0,0 +1,12 @@
+/**
+ * check if the input is undefined or null
+ * @param input - input pointer
+ * @returns true undefined or null
+ */
+export declare function undefinedOrNull(input: any): boolean;
+/**
+ * check if the input is defined and not null
+ * @param input - input pointer
+ * @returns true defined and not null
+ */
+export declare function definedAndNotNull(input: any): boolean;
diff --git a/lib-ts/src-ts/util/checkDefined.js b/lib-ts/src-ts/util/checkDefined.js
new file mode 100644
index 0000000..09109c7
--- /dev/null
+++ b/lib-ts/src-ts/util/checkDefined.js
@@ -0,0 +1,26 @@
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util.checkDefined');
+/**
+ * check if the input is undefined or null
+ * @param input - input pointer
+ * @returns true undefined or null
+ */
+function undefinedOrNull(input) {
+    "use strict";
+    return (typeof input === 'undefined' || input === null);
+}
+exports.undefinedOrNull = undefinedOrNull;
+nm.undefinedOrNull = undefinedOrNull;
+/**
+ * check if the input is defined and not null
+ * @param input - input pointer
+ * @returns true defined and not null
+ */
+function definedAndNotNull(input) {
+    "use strict";
+    return !(undefinedOrNull(input));
+}
+exports.definedAndNotNull = definedAndNotNull;
+nm.definedAndNotNull = definedAndNotNull;
+//# sourceMappingURL=checkDefined.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/checkDefined.js.map b/lib-ts/src-ts/util/checkDefined.js.map
new file mode 100644
index 0000000..40d6f1b
--- /dev/null
+++ b/lib-ts/src-ts/util/checkDefined.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"checkDefined.js","sourceRoot":"","sources":["../../../src-ts/util/checkDefined.ts"],"names":[],"mappings":";AAAA,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,mBAAmB,CAAC,CAAC;AAEtC;;;;GAIG;AACH,yBAAiC,KAAK;IAClC,YAAY,CAAC;IAEb,MAAM,CAAC,CAAC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAJe,uBAAe,kBAI9B,CAAA;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;GAIG;AACH,2BAAmC,KAAU;IACzC,YAAY,CAAC;IAEb,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAJe,yBAAiB,oBAIhC,CAAA;AAED,EAAE,CAAC,iBAAiB,GAAG,iBAAiB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/colors.d.ts b/lib-ts/src-ts/util/colors.d.ts
new file mode 100644
index 0000000..3de4c8d
--- /dev/null
+++ b/lib-ts/src-ts/util/colors.d.ts
@@ -0,0 +1,41 @@
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+export declare function rgb2hex(rgb: any): string;
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+export declare function hexAlphaToRgbOrRgba(hexString: any, alphaVal: any): string;
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+export declare function rgbToRgba(rgb: any, alpha: any): any;
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export declare function makeBlueGreenRedGradient(minVal: any, maxVal: any, flipColors: any): (theVal: any) => string;
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export declare function makeBlueGreenRedGradientZScore(median: any, stdDev: any, flipColors: any): (theVal: any) => string;
diff --git a/lib-ts/src-ts/util/colors.js b/lib-ts/src-ts/util/colors.js
new file mode 100644
index 0000000..6e6ca29
--- /dev/null
+++ b/lib-ts/src-ts/util/colors.js
@@ -0,0 +1,157 @@
+"use strict";
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+var provide_1 = require('./provide');
+var chk = require('./checkDefined');
+var nm = provide_1.default('util.colors');
+/**
+ * helper function to convert to hex
+ * @param {number|string} x - the number to convert to hex
+ * @returns {string} number as hex
+ * @private
+ */
+function _hex(x) {
+    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
+}
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+function rgb2hex(rgb) {
+    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
+}
+exports.rgb2hex = rgb2hex;
+nm.rgb2hex = rgb2hex;
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+function hexAlphaToRgbOrRgba(hexString, alphaVal) {
+    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
+    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    if (alphaVal) {
+        return "rgba(" + r + "," + g + "," + b + "," + alphaVal + ")";
+    }
+    else {
+        return "rgba(" + r + "," + g + "," + b + ")";
+    }
+}
+exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+function rgbToRgba(rgb, alpha) {
+    var pieces = rgb.split(',');
+    pieces[0] = pieces[0].replace('rgb', 'rgba');
+    pieces[2] = pieces[2].replace(')', '');
+    pieces.push(' ' + alpha.toFixed(1) + ')');
+    return pieces.join(',');
+}
+exports.rgbToRgba = rgbToRgba;
+nm.rgbToRgba = rgbToRgba;
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
+    if (typeof flipColors != "boolean") {
+        flipColors = false;
+    }
+    return function (theVal) {
+        var r, g, b;
+        var ratio;
+        if (chk.undefinedOrNull(theVal)) {
+            return 'rgb(100,100,100)';
+        }
+        var percent = (theVal - minVal) / (maxVal - minVal);
+        if (flipColors == true) {
+            percent = 1 - percent;
+        }
+        if (percent >= 1) {
+            r = 255;
+            g = 0;
+            b = 0;
+        }
+        else if (percent <= 0) {
+            r = 0;
+            g = 0;
+            b = 255;
+        }
+        else if (percent < .25) {
+            // green up, blue constant
+            r = 0;
+            g = Math.floor(255 * percent / 0.25);
+            b = 255;
+        }
+        else if (percent < 0.50) {
+            //blue down, green constant
+            ratio = (percent - 0.25) / 0.25;
+            r = 0;
+            g = 255;
+            b = 255 - Math.floor(255 * ratio);
+        }
+        else if (percent < 0.75) {
+            // red up, green constant
+            ratio = (percent - 0.5) / 0.25;
+            r = Math.floor(255 * ratio);
+            g = 255;
+            b = 0;
+        }
+        else {
+            // green down, red constant
+            ratio = (percent - 0.75) / 0.25;
+            r = 255;
+            g = 255 - Math.floor(255 * ratio);
+            b = 0;
+        }
+        r = r.toFixed();
+        g = g.toFixed();
+        b = b.toFixed();
+        return 'rgb(' + r + ',' + g + ',' + b + ')';
+    };
+}
+exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
+    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+    return function (theVal) {
+        var zScore;
+        if (theVal == null) {
+            zScore = null;
+        }
+        else {
+            zScore = (theVal - median) / stdDev;
+        }
+        return grd(zScore);
+    };
+}
+exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+//# sourceMappingURL=colors.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/colors.js.map b/lib-ts/src-ts/util/colors.js.map
new file mode 100644
index 0000000..b0eeb5f
--- /dev/null
+++ b/lib-ts/src-ts/util/colors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../../src-ts/util/colors.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/dateConvert.d.ts b/lib-ts/src-ts/util/dateConvert.d.ts
new file mode 100644
index 0000000..db0945b
--- /dev/null
+++ b/lib-ts/src-ts/util/dateConvert.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
+ * @param {Date} dte to convert
+ * @returns {string} the formatted date string
+ */
+export declare function dateToYyyyMmDdHhMmSs(dte: any): string;
+/**
+ * Given a date return a string in the format YYYYmmdd_hh0000
+ * @param {Date} dte the input date
+ * @returns {string} the formatted date string
+ */
+export declare function dateToYyyyMmDdHh000(dte: any): string;
diff --git a/lib-ts/src-ts/util/dateConvert.js b/lib-ts/src-ts/util/dateConvert.js
new file mode 100644
index 0000000..f18d076
--- /dev/null
+++ b/lib-ts/src-ts/util/dateConvert.js
@@ -0,0 +1,45 @@
+/**
+ * Created by gavorhes on 11/4/2015.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util.dateConvert');
+function leadingPad(inNum) {
+    var strNum = inNum.toFixed();
+    if (strNum.length < 2) {
+        strNum = '0' + strNum;
+    }
+    return strNum;
+}
+nm.leadingPad = leadingPad;
+/**
+ * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
+ * @param {Date} dte to convert
+ * @returns {string} the formatted date string
+ */
+function dateToYyyyMmDdHhMmSs(dte) {
+    var yr = dte.getYear() + 1900;
+    var month = leadingPad(dte.getMonth() + 1);
+    var day = leadingPad(dte.getDate());
+    var hrs = leadingPad(dte.getHours());
+    var mns = leadingPad(dte.getMinutes());
+    var secs = leadingPad(dte.getSeconds());
+    return yr + "-" + month + "-" + day + " " + hrs + ":" + mns + ":" + secs;
+}
+exports.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
+nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
+/**
+ * Given a date return a string in the format YYYYmmdd_hh0000
+ * @param {Date} dte the input date
+ * @returns {string} the formatted date string
+ */
+function dateToYyyyMmDdHh000(dte) {
+    var yr = dte.getYear() + 1900;
+    var month = leadingPad(dte.getMonth() + 1);
+    var day = leadingPad(dte.getDate());
+    var hrs = leadingPad(dte.getHours());
+    return "" + yr + month + day + "_" + hrs + "0000";
+}
+exports.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
+nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
+//# sourceMappingURL=dateConvert.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/dateConvert.js.map b/lib-ts/src-ts/util/dateConvert.js.map
new file mode 100644
index 0000000..503c758
--- /dev/null
+++ b/lib-ts/src-ts/util/dateConvert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dateConvert.js","sourceRoot":"","sources":["../../../src-ts/util/dateConvert.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,kBAAkB,CAAC,CAAC;AAErC,oBAAoB,KAAK;IACrB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC;AAClB,CAAC;AAED,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;AAE3B;;;;GAIG;AACH,8BAAqC,GAAG;IACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,MAAM,CAAI,EAAE,SAAI,KAAK,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,SAAI,IAAM,CAAC;AACzD,CAAC;AATe,4BAAoB,uBASnC,CAAA;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAG/C;;;;GAIG;AACH,6BAAoC,GAAG;IACnC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErC,MAAM,CAAC,KAAG,EAAE,GAAG,KAAK,GAAG,GAAG,SAAI,GAAG,SAAM,CAAC;AAC5C,CAAC;AAPe,2BAAmB,sBAOlC,CAAA;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/formatString.d.ts b/lib-ts/src-ts/util/formatString.d.ts
new file mode 100644
index 0000000..f237ddf
--- /dev/null
+++ b/lib-ts/src-ts/util/formatString.d.ts
@@ -0,0 +1 @@
+export default undefined;
diff --git a/lib-ts/src-ts/util/formatString.js b/lib-ts/src-ts/util/formatString.js
new file mode 100644
index 0000000..99348cd
--- /dev/null
+++ b/lib-ts/src-ts/util/formatString.js
@@ -0,0 +1,37 @@
+/**
+ * Created by gavorhes on 10/30/2015.
+ */
+"use strict";
+if (!String.prototype['format']) {
+    /**
+     *  helper function for string replacement to keep code clean
+     * usage
+     * var aString = 'some{0}stuff{1}replaced';
+     * var c = 'cat';
+     * var b = 'bird';
+     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
+     * prettier than
+     * 'some' + c + 'stuff' + b + 'replaced'
+     * but same effect
+     * adapted to take a single array that is used for replacement by position ie
+     * var arrReplacements = [c, b];
+     * aString.format(arrReplacements)
+     * @returns {string} converted string
+     */
+    String.prototype['format'] = function () {
+        var args = arguments;
+        for (var i = 0; i < args.length; i++) {
+            args[i] = (args[i] !== null ? args[i] : '');
+        }
+        //if the first argument is an array, use that
+        if (args[0].constructor == Array) {
+            args = args[0];
+        }
+        return this.replace(/{(\d+)}/g, function (match, number) {
+            return typeof args[number] != 'undefined' ? args[number] : match;
+        });
+    };
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = undefined;
+//# sourceMappingURL=formatString.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/formatString.js.map b/lib-ts/src-ts/util/formatString.js.map
new file mode 100644
index 0000000..6944500
--- /dev/null
+++ b/lib-ts/src-ts/util/formatString.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"formatString.js","sourceRoot":"","sources":["../../../src-ts/util/formatString.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;QACzB,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,6CAA6C;QAC7C,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,MAAM;YACnD,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAED;kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/getUrlParams.d.ts b/lib-ts/src-ts/util/getUrlParams.d.ts
new file mode 100644
index 0000000..a3e477e
--- /dev/null
+++ b/lib-ts/src-ts/util/getUrlParams.d.ts
@@ -0,0 +1,5 @@
+/**
+ *
+ * @returns {object} object representation of url params
+ */
+export default function getUrlParams(): {};
diff --git a/lib-ts/src-ts/util/getUrlParams.js b/lib-ts/src-ts/util/getUrlParams.js
new file mode 100644
index 0000000..2cccef7
--- /dev/null
+++ b/lib-ts/src-ts/util/getUrlParams.js
@@ -0,0 +1,54 @@
+"use strict";
+/**
+ * Created by gavorhes on 6/23/2016.
+ */
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+function isNumber(checkVal) {
+    var returnVal = parseFloat(checkVal);
+    return !isNaN(returnVal);
+}
+/**
+ *
+ * @returns {object} object representation of url params
+ */
+function getUrlParams() {
+    "use strict";
+    var match;
+    var pl = /\+/g; // Regex for replacing addition symbol with a space
+    var search = /([^&=]+)=?([^&]*)/g;
+    var decode = function (s) {
+        return decodeURIComponent(s.replace(pl, " "));
+    };
+    var query = window.location.search.substring(1);
+    var urlParams = {};
+    while (match = search.exec(query)) {
+        /**
+         * @type {string}
+         */
+        var val = decode(match[2]).trim();
+        var typedVal = null;
+        if (val.length == 0) {
+        }
+        else if (isNumber(val)) {
+            if (val.indexOf('.') > -1) {
+                typedVal = parseFloat(val);
+            }
+            else {
+                typedVal = parseInt(val);
+            }
+        }
+        else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true') {
+            typedVal = val.toLowerCase() == 'true';
+        }
+        else {
+            typedVal = val;
+        }
+        urlParams[decode(match[1])] = typedVal;
+    }
+    return urlParams;
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = getUrlParams;
+nm.getUrlParams = getUrlParams;
+//# sourceMappingURL=getUrlParams.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/getUrlParams.js.map b/lib-ts/src-ts/util/getUrlParams.js.map
new file mode 100644
index 0000000..1876aa8
--- /dev/null
+++ b/lib-ts/src-ts/util/getUrlParams.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getUrlParams.js","sourceRoot":"","sources":["../../../src-ts/util/getUrlParams.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB,kBAAkB,QAAa;IAC3B,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH;IACI,YAAY,CAAC;IAEb,IAAI,KAAK,CAAC;IACV,IAAI,EAAE,GAAG,KAAK,CAAC,CAAE,mDAAmD;IACpE,IAAI,MAAM,GAAG,oBAAoB,CAAC;IAClC,IAAI,MAAM,GAAG,UAAU,CAAC;QACpB,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC;;WAEG;QACH,IAAI,GAAG,GAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA,CAAC;QAErB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC;YACpB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAC;gBACvB,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,IAAI,CAAC,CAAC;gBACJ,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAA,CAAC;YAClE,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,CAAC;YACF,QAAQ,GAAG,GAAG,CAAC;QACnB,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC;AACrB,CAAC;AAvCD;8BAuCC,CAAA;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/makeGuid.d.ts b/lib-ts/src-ts/util/makeGuid.d.ts
new file mode 100644
index 0000000..2e1fc4f
--- /dev/null
+++ b/lib-ts/src-ts/util/makeGuid.d.ts
@@ -0,0 +1,6 @@
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+declare function makeGuid(): string;
+export default makeGuid;
diff --git a/lib-ts/src-ts/util/makeGuid.js b/lib-ts/src-ts/util/makeGuid.js
new file mode 100644
index 0000000..4eb135e
--- /dev/null
+++ b/lib-ts/src-ts/util/makeGuid.js
@@ -0,0 +1,21 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+function makeGuid() {
+    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
+        .replace(/[xy]/g, function (c) {
+        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
+        return v.toString(16);
+    });
+}
+nm.makeGuid = makeGuid;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = makeGuid;
+//# sourceMappingURL=makeGuid.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/makeGuid.js.map b/lib-ts/src-ts/util/makeGuid.js.map
new file mode 100644
index 0000000..bcb8582
--- /dev/null
+++ b/lib-ts/src-ts/util/makeGuid.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"makeGuid.js","sourceRoot":"","sources":["../../../src-ts/util/makeGuid.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB;;;GAGG;AACH;IACQ,MAAM,CAAC,sCAAsC;SACxC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAEjE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AAEf,CAAC;AACD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;kBAAe,QAAQ,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/objectHelpers.d.ts b/lib-ts/src-ts/util/objectHelpers.d.ts
new file mode 100644
index 0000000..105f0be
--- /dev/null
+++ b/lib-ts/src-ts/util/objectHelpers.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @typedef {object} keyValuePair
+ * @property {string} key
+ * @property {object} value
+ */
+/**
+ * iterate over the key value pairs of an object
+ * @param {object} obj - the input object
+ * @returns {Array<keyValuePair>} - array of key value pairs
+ */
+export declare function keyValPairs(obj: any): any[];
diff --git a/lib-ts/src-ts/util/objectHelpers.js b/lib-ts/src-ts/util/objectHelpers.js
new file mode 100644
index 0000000..c0d6713
--- /dev/null
+++ b/lib-ts/src-ts/util/objectHelpers.js
@@ -0,0 +1,31 @@
+/**
+ * Created by gavorhes on 6/7/2016.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+/**
+ * @typedef {object} keyValuePair
+ * @property {string} key
+ * @property {object} value
+ */
+/**
+ * iterate over the key value pairs of an object
+ * @param {object} obj - the input object
+ * @returns {Array<keyValuePair>} - array of key value pairs
+ */
+function keyValPairs(obj) {
+    var outArray = [];
+    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
+        var key = _a[_i];
+        outArray.push({ 'key': key, 'value': obj[key] });
+    }
+    outArray.sort(function (a, b) {
+        "use strict";
+        return a > b ? 1 : -1;
+    });
+    return outArray;
+}
+exports.keyValPairs = keyValPairs;
+nm.keyValPairs = keyValPairs;
+//# sourceMappingURL=objectHelpers.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/objectHelpers.js.map b/lib-ts/src-ts/util/objectHelpers.js.map
new file mode 100644
index 0000000..34322f0
--- /dev/null
+++ b/lib-ts/src-ts/util/objectHelpers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"objectHelpers.js","sourceRoot":"","sources":["../../../src-ts/util/objectHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAEzB;;;;GAIG;AAGH;;;;GAIG;AACH,qBAA4B,GAAG;IAC3B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,CAAY,UAAgB,EAAhB,KAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAhB,cAAgB,EAAhB,IAAgB,CAAC;QAA5B,IAAI,GAAG,SAAA;QACR,QAAQ,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;KAElD;IACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC;QAEb,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,CAAC;AACpB,CAAC;AAbe,mBAAW,cAa1B,CAAA;AAED,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/provide.d.ts b/lib-ts/src-ts/util/provide.d.ts
new file mode 100644
index 0000000..d38ea8b
--- /dev/null
+++ b/lib-ts/src-ts/util/provide.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+declare function provide(namespace: any): any;
+export default provide;
diff --git a/lib-ts/src-ts/util/provide.js b/lib-ts/src-ts/util/provide.js
new file mode 100644
index 0000000..165a683
--- /dev/null
+++ b/lib-ts/src-ts/util/provide.js
@@ -0,0 +1,30 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+"use strict";
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+function provide(namespace) {
+    "use strict";
+    if (typeof window['gv'] == 'undefined') {
+        window['gv'] = {};
+    }
+    var parts = namespace.split('.');
+    var nameSpace = window['gv'];
+    for (var i = 0; i < parts.length; i++) {
+        var newObject = nameSpace[parts[i]];
+        if (typeof newObject == 'undefined') {
+            nameSpace[parts[i]] = {};
+        }
+        nameSpace = nameSpace[parts[i]];
+    }
+    return nameSpace;
+}
+provide('util');
+window['gv'].util.provide = provide;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = provide;
+//# sourceMappingURL=provide.js.map
\ No newline at end of file
diff --git a/lib-ts/src-ts/util/provide.js.map b/lib-ts/src-ts/util/provide.js.map
new file mode 100644
index 0000000..e56155a
--- /dev/null
+++ b/lib-ts/src-ts/util/provide.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"provide.js","sourceRoot":"","sources":["../../../src-ts/util/provide.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAGH;;;;GAIG;AACH,iBAAiB,SAAS;IACtB,YAAY,CAAC;IACb,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAA,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7B,GAAG,CAAC,CAAC,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;QAChC,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,EAAE,CAAC,CAAC,OAAO,SAAS,IAAI,WAAW,CAAC,CAAA,CAAC;YACjC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;AAChB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAEpC;kBAAe,OAAO,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/src/index.d.ts b/lib-ts/src/index.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/lib-ts/src/index.js b/lib-ts/src/index.js
new file mode 100644
index 0000000..9057dd9
--- /dev/null
+++ b/lib-ts/src/index.js
@@ -0,0 +1,4 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib-ts/src/index.js.map b/lib-ts/src/index.js.map
new file mode 100644
index 0000000..6672fd3
--- /dev/null
+++ b/lib-ts/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
\ No newline at end of file
diff --git a/lib-ts/util/_index.d.ts b/lib-ts/util/_index.d.ts
new file mode 100644
index 0000000..3bf6130
--- /dev/null
+++ b/lib-ts/util/_index.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+import * as checkDefinedf from './checkDefined';
+export declare namespace checkDefined {
+    const undefinedOrNull: typeof checkDefinedf.undefinedOrNull;
+    const definedAndNotNull: typeof checkDefinedf.definedAndNotNull;
+}
diff --git a/lib-ts/util/_index.js b/lib-ts/util/_index.js
new file mode 100644
index 0000000..893b790
--- /dev/null
+++ b/lib-ts/util/_index.js
@@ -0,0 +1,11 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+"use strict";
+var checkDefinedf = require('./checkDefined');
+var checkDefined;
+(function (checkDefined) {
+    checkDefined.undefinedOrNull = checkDefinedf.undefinedOrNull;
+    checkDefined.definedAndNotNull = checkDefinedf.definedAndNotNull;
+})(checkDefined = exports.checkDefined || (exports.checkDefined = {}));
+//# sourceMappingURL=_index.js.map
\ No newline at end of file
diff --git a/lib-ts/util/_index.js.map b/lib-ts/util/_index.js.map
new file mode 100644
index 0000000..aeec656
--- /dev/null
+++ b/lib-ts/util/_index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src-ts/util/_index.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,IAAY,aAAa,WAAM,gBAAgB,CAAC,CAAA;AAGhD,IAAiB,YAAY,CAG5B;AAHD,WAAiB,YAAY,EAAC,CAAC;IACd,4BAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAChD,8BAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;AACrE,CAAC,EAHgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAG5B"}
\ No newline at end of file
diff --git a/lib-ts/util/checkDefined.d.ts b/lib-ts/util/checkDefined.d.ts
new file mode 100644
index 0000000..c116a08
--- /dev/null
+++ b/lib-ts/util/checkDefined.d.ts
@@ -0,0 +1,12 @@
+/**
+ * check if the input is undefined or null
+ * @param input - input pointer
+ * @returns true undefined or null
+ */
+export declare function undefinedOrNull(input: any): boolean;
+/**
+ * check if the input is defined and not null
+ * @param input - input pointer
+ * @returns true defined and not null
+ */
+export declare function definedAndNotNull(input: any): boolean;
diff --git a/lib-ts/util/checkDefined.js b/lib-ts/util/checkDefined.js
new file mode 100644
index 0000000..09109c7
--- /dev/null
+++ b/lib-ts/util/checkDefined.js
@@ -0,0 +1,26 @@
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util.checkDefined');
+/**
+ * check if the input is undefined or null
+ * @param input - input pointer
+ * @returns true undefined or null
+ */
+function undefinedOrNull(input) {
+    "use strict";
+    return (typeof input === 'undefined' || input === null);
+}
+exports.undefinedOrNull = undefinedOrNull;
+nm.undefinedOrNull = undefinedOrNull;
+/**
+ * check if the input is defined and not null
+ * @param input - input pointer
+ * @returns true defined and not null
+ */
+function definedAndNotNull(input) {
+    "use strict";
+    return !(undefinedOrNull(input));
+}
+exports.definedAndNotNull = definedAndNotNull;
+nm.definedAndNotNull = definedAndNotNull;
+//# sourceMappingURL=checkDefined.js.map
\ No newline at end of file
diff --git a/lib-ts/util/checkDefined.js.map b/lib-ts/util/checkDefined.js.map
new file mode 100644
index 0000000..114ab5e
--- /dev/null
+++ b/lib-ts/util/checkDefined.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"checkDefined.js","sourceRoot":"","sources":["../../src-ts/util/checkDefined.ts"],"names":[],"mappings":";AAAA,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,mBAAmB,CAAC,CAAC;AAEtC;;;;GAIG;AACH,yBAAiC,KAAK;IAClC,YAAY,CAAC;IAEb,MAAM,CAAC,CAAC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAJe,uBAAe,kBAI9B,CAAA;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;GAIG;AACH,2BAAmC,KAAU;IACzC,YAAY,CAAC;IAEb,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAJe,yBAAiB,oBAIhC,CAAA;AAED,EAAE,CAAC,iBAAiB,GAAG,iBAAiB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/colors.d.ts b/lib-ts/util/colors.d.ts
new file mode 100644
index 0000000..3de4c8d
--- /dev/null
+++ b/lib-ts/util/colors.d.ts
@@ -0,0 +1,41 @@
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+export declare function rgb2hex(rgb: any): string;
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+export declare function hexAlphaToRgbOrRgba(hexString: any, alphaVal: any): string;
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+export declare function rgbToRgba(rgb: any, alpha: any): any;
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export declare function makeBlueGreenRedGradient(minVal: any, maxVal: any, flipColors: any): (theVal: any) => string;
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export declare function makeBlueGreenRedGradientZScore(median: any, stdDev: any, flipColors: any): (theVal: any) => string;
diff --git a/lib-ts/util/colors.js b/lib-ts/util/colors.js
new file mode 100644
index 0000000..6e6ca29
--- /dev/null
+++ b/lib-ts/util/colors.js
@@ -0,0 +1,157 @@
+"use strict";
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+var provide_1 = require('./provide');
+var chk = require('./checkDefined');
+var nm = provide_1.default('util.colors');
+/**
+ * helper function to convert to hex
+ * @param {number|string} x - the number to convert to hex
+ * @returns {string} number as hex
+ * @private
+ */
+function _hex(x) {
+    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
+}
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+function rgb2hex(rgb) {
+    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
+}
+exports.rgb2hex = rgb2hex;
+nm.rgb2hex = rgb2hex;
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+function hexAlphaToRgbOrRgba(hexString, alphaVal) {
+    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
+    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    if (alphaVal) {
+        return "rgba(" + r + "," + g + "," + b + "," + alphaVal + ")";
+    }
+    else {
+        return "rgba(" + r + "," + g + "," + b + ")";
+    }
+}
+exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+function rgbToRgba(rgb, alpha) {
+    var pieces = rgb.split(',');
+    pieces[0] = pieces[0].replace('rgb', 'rgba');
+    pieces[2] = pieces[2].replace(')', '');
+    pieces.push(' ' + alpha.toFixed(1) + ')');
+    return pieces.join(',');
+}
+exports.rgbToRgba = rgbToRgba;
+nm.rgbToRgba = rgbToRgba;
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
+    if (typeof flipColors != "boolean") {
+        flipColors = false;
+    }
+    return function (theVal) {
+        var r, g, b;
+        var ratio;
+        if (chk.undefinedOrNull(theVal)) {
+            return 'rgb(100,100,100)';
+        }
+        var percent = (theVal - minVal) / (maxVal - minVal);
+        if (flipColors == true) {
+            percent = 1 - percent;
+        }
+        if (percent >= 1) {
+            r = 255;
+            g = 0;
+            b = 0;
+        }
+        else if (percent <= 0) {
+            r = 0;
+            g = 0;
+            b = 255;
+        }
+        else if (percent < .25) {
+            // green up, blue constant
+            r = 0;
+            g = Math.floor(255 * percent / 0.25);
+            b = 255;
+        }
+        else if (percent < 0.50) {
+            //blue down, green constant
+            ratio = (percent - 0.25) / 0.25;
+            r = 0;
+            g = 255;
+            b = 255 - Math.floor(255 * ratio);
+        }
+        else if (percent < 0.75) {
+            // red up, green constant
+            ratio = (percent - 0.5) / 0.25;
+            r = Math.floor(255 * ratio);
+            g = 255;
+            b = 0;
+        }
+        else {
+            // green down, red constant
+            ratio = (percent - 0.75) / 0.25;
+            r = 255;
+            g = 255 - Math.floor(255 * ratio);
+            b = 0;
+        }
+        r = r.toFixed();
+        g = g.toFixed();
+        b = b.toFixed();
+        return 'rgb(' + r + ',' + g + ',' + b + ')';
+    };
+}
+exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
+    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+    return function (theVal) {
+        var zScore;
+        if (theVal == null) {
+            zScore = null;
+        }
+        else {
+            zScore = (theVal - median) / stdDev;
+        }
+        return grd(zScore);
+    };
+}
+exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+//# sourceMappingURL=colors.js.map
\ No newline at end of file
diff --git a/lib-ts/util/colors.js.map b/lib-ts/util/colors.js.map
new file mode 100644
index 0000000..1862671
--- /dev/null
+++ b/lib-ts/util/colors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src-ts/util/colors.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib-ts/util/dateConvert.d.ts b/lib-ts/util/dateConvert.d.ts
new file mode 100644
index 0000000..db0945b
--- /dev/null
+++ b/lib-ts/util/dateConvert.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
+ * @param {Date} dte to convert
+ * @returns {string} the formatted date string
+ */
+export declare function dateToYyyyMmDdHhMmSs(dte: any): string;
+/**
+ * Given a date return a string in the format YYYYmmdd_hh0000
+ * @param {Date} dte the input date
+ * @returns {string} the formatted date string
+ */
+export declare function dateToYyyyMmDdHh000(dte: any): string;
diff --git a/lib-ts/util/dateConvert.js b/lib-ts/util/dateConvert.js
new file mode 100644
index 0000000..f18d076
--- /dev/null
+++ b/lib-ts/util/dateConvert.js
@@ -0,0 +1,45 @@
+/**
+ * Created by gavorhes on 11/4/2015.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util.dateConvert');
+function leadingPad(inNum) {
+    var strNum = inNum.toFixed();
+    if (strNum.length < 2) {
+        strNum = '0' + strNum;
+    }
+    return strNum;
+}
+nm.leadingPad = leadingPad;
+/**
+ * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
+ * @param {Date} dte to convert
+ * @returns {string} the formatted date string
+ */
+function dateToYyyyMmDdHhMmSs(dte) {
+    var yr = dte.getYear() + 1900;
+    var month = leadingPad(dte.getMonth() + 1);
+    var day = leadingPad(dte.getDate());
+    var hrs = leadingPad(dte.getHours());
+    var mns = leadingPad(dte.getMinutes());
+    var secs = leadingPad(dte.getSeconds());
+    return yr + "-" + month + "-" + day + " " + hrs + ":" + mns + ":" + secs;
+}
+exports.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
+nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
+/**
+ * Given a date return a string in the format YYYYmmdd_hh0000
+ * @param {Date} dte the input date
+ * @returns {string} the formatted date string
+ */
+function dateToYyyyMmDdHh000(dte) {
+    var yr = dte.getYear() + 1900;
+    var month = leadingPad(dte.getMonth() + 1);
+    var day = leadingPad(dte.getDate());
+    var hrs = leadingPad(dte.getHours());
+    return "" + yr + month + day + "_" + hrs + "0000";
+}
+exports.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
+nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
+//# sourceMappingURL=dateConvert.js.map
\ No newline at end of file
diff --git a/lib-ts/util/dateConvert.js.map b/lib-ts/util/dateConvert.js.map
new file mode 100644
index 0000000..8c56fe6
--- /dev/null
+++ b/lib-ts/util/dateConvert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dateConvert.js","sourceRoot":"","sources":["../../src-ts/util/dateConvert.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,kBAAkB,CAAC,CAAC;AAErC,oBAAoB,KAAK;IACrB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC;AAClB,CAAC;AAED,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;AAE3B;;;;GAIG;AACH,8BAAqC,GAAG;IACpC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,MAAM,CAAI,EAAE,SAAI,KAAK,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,SAAI,IAAM,CAAC;AACzD,CAAC;AATe,4BAAoB,uBASnC,CAAA;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAG/C;;;;GAIG;AACH,6BAAoC,GAAG;IACnC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErC,MAAM,CAAC,KAAG,EAAE,GAAG,KAAK,GAAG,GAAG,SAAI,GAAG,SAAM,CAAC;AAC5C,CAAC;AAPe,2BAAmB,sBAOlC,CAAA;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/formatString.d.ts b/lib-ts/util/formatString.d.ts
new file mode 100644
index 0000000..f237ddf
--- /dev/null
+++ b/lib-ts/util/formatString.d.ts
@@ -0,0 +1 @@
+export default undefined;
diff --git a/lib-ts/util/formatString.js b/lib-ts/util/formatString.js
new file mode 100644
index 0000000..99348cd
--- /dev/null
+++ b/lib-ts/util/formatString.js
@@ -0,0 +1,37 @@
+/**
+ * Created by gavorhes on 10/30/2015.
+ */
+"use strict";
+if (!String.prototype['format']) {
+    /**
+     *  helper function for string replacement to keep code clean
+     * usage
+     * var aString = 'some{0}stuff{1}replaced';
+     * var c = 'cat';
+     * var b = 'bird';
+     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
+     * prettier than
+     * 'some' + c + 'stuff' + b + 'replaced'
+     * but same effect
+     * adapted to take a single array that is used for replacement by position ie
+     * var arrReplacements = [c, b];
+     * aString.format(arrReplacements)
+     * @returns {string} converted string
+     */
+    String.prototype['format'] = function () {
+        var args = arguments;
+        for (var i = 0; i < args.length; i++) {
+            args[i] = (args[i] !== null ? args[i] : '');
+        }
+        //if the first argument is an array, use that
+        if (args[0].constructor == Array) {
+            args = args[0];
+        }
+        return this.replace(/{(\d+)}/g, function (match, number) {
+            return typeof args[number] != 'undefined' ? args[number] : match;
+        });
+    };
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = undefined;
+//# sourceMappingURL=formatString.js.map
\ No newline at end of file
diff --git a/lib-ts/util/formatString.js.map b/lib-ts/util/formatString.js.map
new file mode 100644
index 0000000..fc80f57
--- /dev/null
+++ b/lib-ts/util/formatString.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"formatString.js","sourceRoot":"","sources":["../../src-ts/util/formatString.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;QACzB,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,6CAA6C;QAC7C,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,MAAM;YACnD,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAED;kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/getUrlParams.d.ts b/lib-ts/util/getUrlParams.d.ts
new file mode 100644
index 0000000..a3e477e
--- /dev/null
+++ b/lib-ts/util/getUrlParams.d.ts
@@ -0,0 +1,5 @@
+/**
+ *
+ * @returns {object} object representation of url params
+ */
+export default function getUrlParams(): {};
diff --git a/lib-ts/util/getUrlParams.js b/lib-ts/util/getUrlParams.js
new file mode 100644
index 0000000..2cccef7
--- /dev/null
+++ b/lib-ts/util/getUrlParams.js
@@ -0,0 +1,54 @@
+"use strict";
+/**
+ * Created by gavorhes on 6/23/2016.
+ */
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+function isNumber(checkVal) {
+    var returnVal = parseFloat(checkVal);
+    return !isNaN(returnVal);
+}
+/**
+ *
+ * @returns {object} object representation of url params
+ */
+function getUrlParams() {
+    "use strict";
+    var match;
+    var pl = /\+/g; // Regex for replacing addition symbol with a space
+    var search = /([^&=]+)=?([^&]*)/g;
+    var decode = function (s) {
+        return decodeURIComponent(s.replace(pl, " "));
+    };
+    var query = window.location.search.substring(1);
+    var urlParams = {};
+    while (match = search.exec(query)) {
+        /**
+         * @type {string}
+         */
+        var val = decode(match[2]).trim();
+        var typedVal = null;
+        if (val.length == 0) {
+        }
+        else if (isNumber(val)) {
+            if (val.indexOf('.') > -1) {
+                typedVal = parseFloat(val);
+            }
+            else {
+                typedVal = parseInt(val);
+            }
+        }
+        else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true') {
+            typedVal = val.toLowerCase() == 'true';
+        }
+        else {
+            typedVal = val;
+        }
+        urlParams[decode(match[1])] = typedVal;
+    }
+    return urlParams;
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = getUrlParams;
+nm.getUrlParams = getUrlParams;
+//# sourceMappingURL=getUrlParams.js.map
\ No newline at end of file
diff --git a/lib-ts/util/getUrlParams.js.map b/lib-ts/util/getUrlParams.js.map
new file mode 100644
index 0000000..3529a60
--- /dev/null
+++ b/lib-ts/util/getUrlParams.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getUrlParams.js","sourceRoot":"","sources":["../../src-ts/util/getUrlParams.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB,kBAAkB,QAAa;IAC3B,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH;IACI,YAAY,CAAC;IAEb,IAAI,KAAK,CAAC;IACV,IAAI,EAAE,GAAG,KAAK,CAAC,CAAE,mDAAmD;IACpE,IAAI,MAAM,GAAG,oBAAoB,CAAC;IAClC,IAAI,MAAM,GAAG,UAAU,CAAC;QACpB,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC;;WAEG;QACH,IAAI,GAAG,GAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA,CAAC;QAErB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC;YACpB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAC;gBACvB,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,IAAI,CAAC,CAAC;gBACJ,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAA,CAAC;YAClE,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,CAAC;YACF,QAAQ,GAAG,GAAG,CAAC;QACnB,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC;AACrB,CAAC;AAvCD;8BAuCC,CAAA;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/makeGuid.d.ts b/lib-ts/util/makeGuid.d.ts
new file mode 100644
index 0000000..2e1fc4f
--- /dev/null
+++ b/lib-ts/util/makeGuid.d.ts
@@ -0,0 +1,6 @@
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+declare function makeGuid(): string;
+export default makeGuid;
diff --git a/lib-ts/util/makeGuid.js b/lib-ts/util/makeGuid.js
new file mode 100644
index 0000000..4eb135e
--- /dev/null
+++ b/lib-ts/util/makeGuid.js
@@ -0,0 +1,21 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+function makeGuid() {
+    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
+        .replace(/[xy]/g, function (c) {
+        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
+        return v.toString(16);
+    });
+}
+nm.makeGuid = makeGuid;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = makeGuid;
+//# sourceMappingURL=makeGuid.js.map
\ No newline at end of file
diff --git a/lib-ts/util/makeGuid.js.map b/lib-ts/util/makeGuid.js.map
new file mode 100644
index 0000000..bc6cedb
--- /dev/null
+++ b/lib-ts/util/makeGuid.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"makeGuid.js","sourceRoot":"","sources":["../../src-ts/util/makeGuid.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB;;;GAGG;AACH;IACQ,MAAM,CAAC,sCAAsC;SACxC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAEjE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AAEf,CAAC;AACD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;kBAAe,QAAQ,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/objectHelpers.d.ts b/lib-ts/util/objectHelpers.d.ts
new file mode 100644
index 0000000..105f0be
--- /dev/null
+++ b/lib-ts/util/objectHelpers.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @typedef {object} keyValuePair
+ * @property {string} key
+ * @property {object} value
+ */
+/**
+ * iterate over the key value pairs of an object
+ * @param {object} obj - the input object
+ * @returns {Array<keyValuePair>} - array of key value pairs
+ */
+export declare function keyValPairs(obj: any): any[];
diff --git a/lib-ts/util/objectHelpers.js b/lib-ts/util/objectHelpers.js
new file mode 100644
index 0000000..c0d6713
--- /dev/null
+++ b/lib-ts/util/objectHelpers.js
@@ -0,0 +1,31 @@
+/**
+ * Created by gavorhes on 6/7/2016.
+ */
+"use strict";
+var provide_1 = require('./provide');
+var nm = provide_1.default('util');
+/**
+ * @typedef {object} keyValuePair
+ * @property {string} key
+ * @property {object} value
+ */
+/**
+ * iterate over the key value pairs of an object
+ * @param {object} obj - the input object
+ * @returns {Array<keyValuePair>} - array of key value pairs
+ */
+function keyValPairs(obj) {
+    var outArray = [];
+    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
+        var key = _a[_i];
+        outArray.push({ 'key': key, 'value': obj[key] });
+    }
+    outArray.sort(function (a, b) {
+        "use strict";
+        return a > b ? 1 : -1;
+    });
+    return outArray;
+}
+exports.keyValPairs = keyValPairs;
+nm.keyValPairs = keyValPairs;
+//# sourceMappingURL=objectHelpers.js.map
\ No newline at end of file
diff --git a/lib-ts/util/objectHelpers.js.map b/lib-ts/util/objectHelpers.js.map
new file mode 100644
index 0000000..80d4e87
--- /dev/null
+++ b/lib-ts/util/objectHelpers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"objectHelpers.js","sourceRoot":"","sources":["../../src-ts/util/objectHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,WAAW,CAAC,CAAA;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAEzB;;;;GAIG;AAGH;;;;GAIG;AACH,qBAA4B,GAAG;IAC3B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,CAAY,UAAgB,EAAhB,KAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAhB,cAAgB,EAAhB,IAAgB,CAAC;QAA5B,IAAI,GAAG,SAAA;QACR,QAAQ,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;KAElD;IACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC;QAEb,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,CAAC;AACpB,CAAC;AAbe,mBAAW,cAa1B,CAAA;AAED,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC"}
\ No newline at end of file
diff --git a/lib-ts/util/provide.d.ts b/lib-ts/util/provide.d.ts
new file mode 100644
index 0000000..d38ea8b
--- /dev/null
+++ b/lib-ts/util/provide.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+declare function provide(namespace: any): any;
+export default provide;
diff --git a/lib-ts/util/provide.js b/lib-ts/util/provide.js
new file mode 100644
index 0000000..165a683
--- /dev/null
+++ b/lib-ts/util/provide.js
@@ -0,0 +1,30 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+"use strict";
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+function provide(namespace) {
+    "use strict";
+    if (typeof window['gv'] == 'undefined') {
+        window['gv'] = {};
+    }
+    var parts = namespace.split('.');
+    var nameSpace = window['gv'];
+    for (var i = 0; i < parts.length; i++) {
+        var newObject = nameSpace[parts[i]];
+        if (typeof newObject == 'undefined') {
+            nameSpace[parts[i]] = {};
+        }
+        nameSpace = nameSpace[parts[i]];
+    }
+    return nameSpace;
+}
+provide('util');
+window['gv'].util.provide = provide;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = provide;
+//# sourceMappingURL=provide.js.map
\ No newline at end of file
diff --git a/lib-ts/util/provide.js.map b/lib-ts/util/provide.js.map
new file mode 100644
index 0000000..578fe6b
--- /dev/null
+++ b/lib-ts/util/provide.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"provide.js","sourceRoot":"","sources":["../../src-ts/util/provide.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAGH;;;;GAIG;AACH,iBAAiB,SAAS;IACtB,YAAY,CAAC;IACb,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAA,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7B,GAAG,CAAC,CAAC,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;QAChC,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,EAAE,CAAC,CAAC,OAAO,SAAS,IAAI,WAAW,CAAC,CAAA,CAAC;YACjC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;AAChB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAEpC;kBAAe,OAAO,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index a462ce2..e39cffc 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,7 @@
   "description": "Openlayers helpers",
   "main": "lib/index.js",
   "files": [
+    "lib-ts",
     "lib",
     "doc",
     "src",
@@ -12,77 +13,38 @@
   ],
   "scripts": {
     "test": "node node_modules\\karma\\bin\\karma start karma.conf.js",
-    "ol": "node node_modules/openlayers/tasks/build.js src/ol/ol-config.json src/ol/ol-build.js & COPY /Y src\\ol\\ol-build.js lib\\ol\\ol-build.js",
     "lint": "eslint src/**/*.js",
-    "jsdoc": "RD /S /Q doc & MD doc & jsdoc -r -d doc src",
-    "src2lib": "babel src --out-dir lib --ignore ol-build.js --plugins add-module-exports"
+    "esdoc": "RD /S /Q doc & MD doc & esdoc -c .esdoc.json",
+    "update-ol": "npm update custom-ol",
+    "serve": "cd test-html & C:\\Python33\\python.exe -m http.server 5001",
+    "pack": "webpack -w",
+    "pack-small": "webpack -w --optimize-minimize",
+    "tsc": "tsc -w"
   },
   "author": "TOPS Lab",
   "license": "ISC",
   "devDependencies": {
-    "babel-cli": "^6.9.0",
-    "babel-core": "^6.9.0",
-    "babel-polyfill": "^6.9.0",
-    "babel-preset-es2015": "^6.6.0",
     "chai": "^3.5.0",
     "expect": "^1.20.1",
     "jasmine": "^2.4.1",
     "jasmine-core": "^2.4.1",
-    "karma": "^0.13.22",
-    "karma-chai": "^0.1.0",
-    "karma-coverage": "^1.0.0",
-    "karma-jasmine": "^1.0.2",
-    "karma-mocha": "^1.0.1",
-    "karma-mocha-reporter": "^2.0.3",
-    "karma-phantomjs-launcher": "^1.0.0",
-    "mocha": "^2.4.5",
-    "openlayers": "^3.15.1",
-    "phantomjs-prebuilt": "^2.1.7"
+    "react": "^15.3.2",
+    "react-dom": "^15.3.2",
+    "source-map-loader": "^0.1.5",
+    "ts-loader": "^0.8.2",
+    "typescript": "^1.8.10"
   },
   "repository": {
     "type": "git",
     "url": "https://github.com/glennvorhes/webmapsjs.git"
   },
   "dependencies": {
-    "babel-plugin-add-module-exports": "^0.2.0",
-    "babel-plugin-transform-es2015-modules-umd": "^6.8.0",
-    "babelify": "^7.3.0",
-    "browserify": "^13.0.1",
+    "jquery": "2.2.3",
+    "jquery-layout": "1.0.0",
+    "jquery-ui": "1.10.5",
+    "custom-ol": "glennvorhes/custom-ol",
     "es6-mixins": "^1.0.2",
     "floatthead": "^1.4.0",
-    "glob": "^7.0.3",
-    "gulp": "^3.9.1",
-    "gulp-babel": "^6.1.2",
-    "gulp-cssmin": "^0.1.7",
-    "gulp-jasmine": "^2.3.0",
-    "gulp-less": "^3.1.0",
-    "gulp-minify": "0.0.11",
-    "gulp-rename": "^1.2.2",
-    "gulp-sourcemaps": "^1.6.0",
-    "gulp-util": "^3.0.7",
-    "jquery": "^2.2.3",
-    "jquery-layout": "^1.0.0",
-    "jquery-ui": "1.10.5",
-    "vinyl-buffer": "^1.0.0",
-    "vinyl-source-stream": "^1.1.0",
-    "watchify": "^3.7.0"
-  },
-  "browserify": {
-    "debug": true,
-    "transform": [
-      "babelify"
-    ]
-  },
-  "babel": {
-    "presets": [
-      "es2015"
-    ],
-    "ignore": [
-      "ol-build.js",
-      "node_modules/**/*/js"
-    ],
-    "plugins": [
-      "add-module-exports"
-    ]
+    "webpack": "^2.1.0-beta.25"
   }
 }
diff --git a/src-ts/_internalnterfaces.ts b/src-ts/_internalnterfaces.ts
new file mode 100644
index 0000000..47b91b7
--- /dev/null
+++ b/src-ts/_internalnterfaces.ts
@@ -0,0 +1,11 @@
+/**
+ * Created by gavorhes on 9/21/2016.
+ */
+
+export interface extentObject
+{
+    minX: number;
+    minY: number;
+    maxX: number;
+    maxY: number;
+}
diff --git a/src-ts/_scratch/Hello.tsx b/src-ts/_scratch/Hello.tsx
new file mode 100644
index 0000000..ca0cd0a
--- /dev/null
+++ b/src-ts/_scratch/Hello.tsx
@@ -0,0 +1,12 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+import * as React from "react";
+
+export interface HelloProps { compiler: string; framework: string; }
+
+export class Hello extends React.Component<HelloProps, {}> {
+    render() {
+        return <h1>Hello from {this.props.compiler} and {this.props.framework}!</h1>;
+    }
+}
\ No newline at end of file
diff --git a/src-ts/_test/another.ts b/src-ts/_test/another.ts
new file mode 100644
index 0000000..de81e43
--- /dev/null
+++ b/src-ts/_test/another.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+
+console.log('here is another');
+console.log('here is another');
\ No newline at end of file
diff --git a/test/compare-test.js b/src-ts/_test/compare-test.ts
similarity index 89%
rename from test/compare-test.js
rename to src-ts/_test/compare-test.ts
index bc98559..d749882 100644
--- a/test/compare-test.js
+++ b/src-ts/_test/compare-test.ts
@@ -1,12 +1,13 @@
 /**
  * Created by gavorhes on 6/1/2016.
  */
-import quickMap from '../src/olHelpers/quickMap';
-import LayerSwipe from '../src/olHelpers/layerSwipe';
-import LayerEsriMapServer from '../src/layers/LayerEsriMapServer';
+import {quickMap} from '../olHelpers/quickMap';
+import LayerSwipe from '../olHelpers/layerSwipe';
+import {LayerEsriMapServer} from '../layers/LayerEsriMapServer';
 
 let map = quickMap();
 
+
 let swiper = new LayerSwipe(map);
 
 
diff --git a/src-ts/_test/itsMap.ts b/src-ts/_test/itsMap.ts
new file mode 100644
index 0000000..21ec307
--- /dev/null
+++ b/src-ts/_test/itsMap.ts
@@ -0,0 +1,27 @@
+/**
+ * Created by gavorhes on 12/18/2015.
+ */
+// import 'babel-polyfill/dist/polyfill.min';
+import ItsLayerCollection from '../collections/ItsLayerCollection';
+import LayerLegend from '../collections/LayerLegend';
+import quickMap from '../olHelpers/quickMap';
+
+let map = quickMap();
+
+let itsLayerCollection = new ItsLayerCollection(map);
+
+let layerArray = [
+    {
+        groupName: 'ITS Inventory Layers',
+        collapse: false,
+        addCheck: true,
+        items: itsLayerCollection.layers
+    }
+];
+
+let legend = new LayerLegend(layerArray, 'legend-container', {});
+
+
+
+
+console.log('it works');
diff --git a/src-ts/_test/my_little_test.ts b/src-ts/_test/my_little_test.ts
new file mode 100644
index 0000000..4593808
--- /dev/null
+++ b/src-ts/_test/my_little_test.ts
@@ -0,0 +1,40 @@
+
+import {MediaControl} from '../domUtil/animate-buttons'
+//
+//
+
+
+console.log('eat this fish');
+console.log('eat this fish');
+console.log('eat this bird');
+
+//
+// let g = new ol3.source.Vector();
+//
+// console.log(olx);
+
+
+console.log('i am here5');
+
+
+
+function me (eat: number = 10){
+    console.log(eat, 'one');
+}
+
+me();
+
+var control = new MediaControl('map');
+
+//
+//
+// console.log(ol3);
+//
+//
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log(definedAndNotNull("fish"));
+// console.log('here');
+//
diff --git a/src-ts/_test/reacttst.tsx b/src-ts/_test/reacttst.tsx
new file mode 100644
index 0000000..9ae1522
--- /dev/null
+++ b/src-ts/_test/reacttst.tsx
@@ -0,0 +1,15 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+
+import * as React from "react";
+import * as ReactDOM from "react-dom";
+
+import { Hello } from "../_scratch/Hello";
+
+console.log('I am in a tsx file for some reason');
+
+ReactDOM.render(
+    <Hello compiler="TypeScript" framework="React" />,
+    document.getElementById("example")
+);
\ No newline at end of file
diff --git a/src-ts/_test/slider-test.ts b/src-ts/_test/slider-test.ts
new file mode 100644
index 0000000..c09a77a
--- /dev/null
+++ b/src-ts/_test/slider-test.ts
@@ -0,0 +1,180 @@
+/**
+ * Created by gavorhes on 6/22/2016.
+ */
+import {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';
+
+let slidersConfig = [
+    {
+        label: 'AADT',
+        yearOptions: [
+            {label: '1', column: 'aadtyr_1'}
+        ]
+    },
+    {
+        label: 'AADT Future',
+        yearOptions: [
+            {label: '5', column: 'aadtyr_5'},
+            {label: '10', column: 'aadtyr_10'},
+            {label: '15', column: 'aadtyr_15'},
+            {label: '20', column: 'aadtyr_20'}
+        ]
+    },
+    {
+        label: 'Growth',
+        yearOptions: [
+            {label: '5', column: 'growth_5'},
+            {label: '10', column: 'growth_10'},
+            {label: '15', column: 'growth_15'},
+            {label: '20', column: 'growth_20'}
+        ]
+    },
+    {
+        label: 'Truck',
+        yearOptions: [
+            {label: '1', column: 'trkdyr_1'},
+            {label: '20', column: 'trkdyr_20'}
+        ]
+    },
+    {
+        label: 'LOS',
+        yearOptions: [
+            {label: '1', column: 'losyr_1'}
+        ]
+    },
+    {
+        label: 'LOS Future',
+        yearOptions: [
+            {label: '5', column: 'losyr_5'},
+            {label: '10', column: 'losyr_10'},
+            {label: '15', column: 'losyr_15'},
+            {label: '20', column: 'losyr_20'}
+        ]
+    },
+    {
+        label: 'Crash Rate',
+        yearOptions: [
+            {label: 1, column: 'crash_rate'}
+        ]
+    },
+    {
+        label: 'Severity',
+        yearOptions: [
+            {label: 1, column: 'crash_severity'}
+        ]
+    },
+    {
+        label: 'Weather',
+        yearOptions: [
+            {label: 1, column: 'weather'}
+        ]
+    },
+    {
+        label: 'Event',
+        yearOptions: [
+            {label: 1, column: 'event'}
+        ]
+    }
+] as Array<TipSliderConfig>;
+
+
+let presetConfig = [
+    {
+        label: 'Default TIP',
+        presets: [
+            {column: 'aadtyr_1', value: 10.0},
+            {column: 'aadtyr_20', value: 7.0},
+            {column: 'growth_20', value: 7.0},
+            {column: 'trkdyr_1', value: 4.0},
+            {column: 'losyr_1', value: 12.0},
+            {column: 'losyr_20', value: 12.0},
+            {column: 'crash_rate', value: 15.0},
+            {column: 'crash_severity', value: 13.0},
+            {column: 'weather', value: 9.0},
+            {column: 'event', value: 11.0}
+        ]
+    },
+    {
+        label: 'Safety',
+        presets: [
+            {column: 'aadtyr_1', value: 20.0},
+            {column: 'aadtyr_20', value: 0.0},
+            {column: 'growth_20', value: 0.0},
+            {column: 'trkdyr_1', value: 0.0},
+            {column: 'losyr_1', value: 0.0},
+            {column: 'losyr_20', value: 0.0},
+            {column: 'crash_rate', value: 40.0},
+            {column: 'crash_severity', value: 40.0},
+            {column: 'weather', value: 0.0},
+            {column: 'event', value: 0.0}
+        ]
+    },
+    {
+        label: 'Mobility Present',
+        presets: [
+            {column: 'aadtyr_1', value: 25.0},
+            {column: 'aadtyr_20', value: 25.0},
+            {column: 'growth_20', value: 0.0},
+            {column: 'trkdyr_1', value: 25.0},
+            {column: 'losyr_1', value: 25.0},
+            {column: 'losyr_20', value: 0.0},
+            {column: 'crash_rate', value: 0.0},
+            {column: 'crash_severity', value: 0.0},
+            {column: 'weather', value: 0.0},
+            {column: 'event', value: 0.0}
+        ]
+    },
+    {
+        label: 'Mobility Future',
+        presets: [
+            {column: 'aadtyr_1', value: 0.0},
+            {column: 'aadtyr_20', value: 25.0},
+            {column: 'growth_20', value: 25.0},
+            {column: 'trkdyr_1', value: 25.0},
+            {column: 'losyr_1', value: 0.0},
+            {column: 'losyr_20', value: 25.0},
+            {column: 'crash_rate', value: 0.0},
+            {column: 'crash_severity', value: 0.0},
+            {column: 'weather', value: 0.0},
+            {column: 'event', value: 0.0}
+        ]
+    },
+    {
+        label: 'Service',
+        presets: [
+            {column: 'aadtyr_1', value: 30.0},
+            {column: 'aadtyr_20', value: 0.0},
+            {column: 'growth_20', value: 10.0},
+            {column: 'trkdyr_1', value: 0.0},
+            {column: 'losyr_1', value: 30.0},
+            {column: 'losyr_20', value: 30.0},
+            {column: 'crash_rate', value: 0.0},
+            {column: 'crash_severity', value: 0.0},
+            {column: 'weather', value: 0.0},
+            {column: 'event', value: 0.0}
+        ]
+    },
+    {
+        label: 'Freight Performance',
+        presets: [
+            {column: 'aadtyr_1', value: 20.0},
+            {column: 'aadtyr_20', value: 0.0},
+            {column: 'growth_20', value: 0.0},
+            {column: 'trkdyr_1', value: 60.0},
+            {column: 'losyr_1', value: 20.0},
+            {column: 'losyr_20', value: 0.0},
+            {column: 'crash_rate', value: 0.0},
+            {column: 'crash_severity', value: 0.0},
+            {column: 'weather', value: 0.0},
+            {column: 'event', value: 0.0}
+        ]
+    }
+] as Array<TipPresetConfig>;
+
+
+let sliders = new TipSliders(slidersConfig, presetConfig, 'slider-container',
+    'preset-selector', 'region-selector', 'version-selector', (chg) => {console.log(chg)});
+
+// sliders.changedCallback = (chg) => {console.log(chg)};
+
+window['glob'] = sliders;
+
diff --git a/src-ts/collections/ItsLayerCollection.ts b/src-ts/collections/ItsLayerCollection.ts
new file mode 100644
index 0000000..4e82779
--- /dev/null
+++ b/src-ts/collections/ItsLayerCollection.ts
@@ -0,0 +1,166 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+
+import * as colors from '../util/colors';
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+import LayerItsInventory from "../layers/LayerItsInventory";
+let nm = provide('collections');
+
+
+let itsConfig = [
+    {
+        name: 'Camera',
+        itsType: 'cctv',
+        minZoom: 11,
+        itsIconConfig: {
+            prop: 'owner',
+            defaultName: 'WisDOT',
+            defaultIcon: 'cctv.png',
+            iconArray: [
+                ['City of Madison', 'Madison', 'cctv-mad.png']
+            ]
+        }
+    },
+    {
+        name: 'Message Signs',
+        itsType: 'DMS',
+        minZoom: 11,
+        itsIconConfig: {
+            prop: 'dmsType',
+            defaultName: 'DMS',
+            defaultIcon: 'dms.png',
+            iconArray: [
+                ['pcms', 'PCMS', 'pcms.png']
+            ]
+        }
+    },
+    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},
+    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},
+    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},
+    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},
+    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},
+    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},
+    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},
+    {
+        name: 'Loop Detectors',
+        itsType: 'loop',
+        legendCollapse: true,
+        minZoom: 14,
+        visible: false,
+        itsIconConfig: {
+            prop: 'dtctrType',
+            defaultName: 'Other',
+            defaultIcon: 'loopdetectorother.png',
+            iconArray: [
+                ['detector', 'Detector', 'loopdetector.png'],
+                ['long', 'Long', 'loopdetectorlong.png'],
+                ['zone', 'Zone', 'loopdetectorzone.png']
+            ]
+        },
+        onDemand: true
+    },
+    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},
+    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},
+    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},
+    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},
+    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},
+    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},
+    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},
+    {
+        name: 'Trench',
+        itsType: 'trench',
+        onDemand: true,
+        visible: false,
+        onDemandDelay: 500,
+        minZoom: 15,
+        legendCollapse: true,
+        itsLineConfig: {
+            prop: 'owner',
+            //defaultName: 'Other',
+            //defaultWidth: 7,
+            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
+            lineArray: [
+                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],
+                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],
+                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],
+                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],
+                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],
+                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],
+                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],
+                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],
+                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]
+            ]
+        }
+    }
+
+
+];
+
+
+class ItsLayerCollection {
+    _map: ol.Map;
+    _layers: Array<LayerItsInventory>;
+
+
+    /**
+     * Create a collection of all ITS layers
+     * @param {ol.Map} theMap the openlayers map
+     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
+     *
+     * BLUE Bluetooth Detector - Bluetooth Detector
+     * CABINET Cabinets - The cabinets
+     * CCTV Camera - Traffic Cameras
+     * HUT Communication Hut - Communication Hut
+     * VAULT Communication Vault - The communication vaults
+     * HAR Highway Advisory Radio - Advisory Radios
+     * LIGHT Lighting - Lighting
+     * LOOP Loop Detectors - Loop Detectors
+     * DMS Message Board - Message Boards and Signs
+     * MICROWAVE Microwave Detector - Microwave Detectors
+     * PULL Pull Box - A pull box
+     * RWIS RWIS - Road weather information system
+     * GATE Ramp Gate - The ramp Gates
+     * METER Ramp Meter - The ramp meters
+     * SIGNAL Signal - Traffic Signal
+     * TOWER Tower - The towers
+     * TRENCH
+     */
+    constructor(theMap: ol.Map, exclude?: Array<string>) {
+
+        this._map = theMap;
+        this._layers = [];
+
+        exclude = typeof exclude == 'object' ? exclude : [];
+
+        for (let i = 0; i < itsConfig.length; i++) {
+            let lyrConfig = itsConfig[i];
+            let addLayer = true;
+
+            for (let j = 0; j < exclude.length; j++) {
+                if (exclude[j] == lyrConfig.itsType) {
+                    addLayer = false;
+                    break;
+                }
+            }
+
+            if (addLayer) {
+                let inventLyr = new LayerItsInventory(lyrConfig);
+                this._map.addLayer(inventLyr.olLayer);
+                this._layers.push(inventLyr);
+            }
+        }
+    }
+
+    /**
+     * Return the array of layers in this collection
+     * @returns {Array<LayerItsInventory>} an array of layers
+     */
+    get layers() {
+        return this._layers;
+    }
+}
+
+nm.ItsLayerCollection = ItsLayerCollection;
+export default ItsLayerCollection;
diff --git a/doc/collections_LayerLegend.js.html b/src-ts/collections/LayerLegend.ts
similarity index 58%
rename from doc/collections_LayerLegend.js.html
rename to src-ts/collections/LayerLegend.ts
index db94349..fe2e5e4 100644
--- a/doc/collections_LayerLegend.js.html
+++ b/src-ts/collections/LayerLegend.ts
@@ -1,41 +1,30 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: collections/LayerLegend.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: collections/LayerLegend.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
+/**
  * Created by gavorhes on 12/16/2015.
  */
-import $ from '../jquery/jquery';
+
 import provide from '../util/provide';
 import makeGuid from '../util/makeGuid';
 import mapMove from '../olHelpers/mapMove';
 let nm = provide('collections');
+import {ol} from 'custom-ol';
+const $ = require('jquery');
 
 class LayerGroup {
+    groupLayers: any;
+    groupLayersLookup: any;
+    groupGroupsLookup: any;
+    groupGroups: any;
+    itemIdArray: any;
+    groupId: any;
+    groupName: any;
+    allLayerArray: any;
+    parent: any;
+    allGroupArray: any;
+    allGroupLookup: any;
+    allLayerLookup: any;
+    collapse: any;
+    addCheck: any;
+    layerParentLookup: any;
 
     /**
      *
@@ -45,7 +34,7 @@ class LayerGroup {
      * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
      * @param {LayerGroup} [parent=undefined] - the parent group
      */
-    constructor(groupConfig, parent) {
+    constructor(groupConfig?, parent?) {
         this.groupLayers = [];
         this.groupLayersLookup = {};
         this.groupGroups = [];
@@ -78,7 +67,7 @@ class LayerGroup {
      * @param {string} groupConfig.groupName - the group name
      * @param {boolean} groupConfig.collapse if the group should be collapsed initially
      * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
-     * @param {Array&lt;LayerGroup>} parents parent groups
+     * @param {Array<LayerGroup>} parents parent groups
      * @returns {LayerGroup} the layer group just added
      */
     addGroup(groupConfig, parents) {
@@ -146,14 +135,14 @@ class LayerGroup {
     getLegendHtml(legendId, options) {
 
 
-        let legendHtml = `&lt;ul id="${legendId}" class="legend-container">`;
+        let legendHtml = `<ul id="${legendId}" class="legend-container">`;
 
-        legendHtml += `&lt;li>${options.legendTitle}&lt;input type="checkbox" checked id="suppress-by-extent-${legendId}" class="suppress-by-extent">` +
-            `&lt;label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-${legendId}">` +
-            `&lt;span>&lt;/span>` +
-            `&lt;/label>&lt;/li>`;
+        legendHtml += `<li>${options.legendTitle}<input type="checkbox" checked id="suppress-by-extent-${legendId}" class="suppress-by-extent">` +
+            `<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-${legendId}">` +
+            `<span></span>` +
+            `</label></li>`;
 
-        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '&lt;/ul>';
+        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
 
         return legendHtml;
     }
@@ -181,7 +170,7 @@ class LayerGroup {
              * @type {LayerBase}
              */
             let lyr = theGroup.groupLayersLookup[itemId];
-            theHml += `&lt;li id="${lyr.id}-layer-li" class="legend-layer-li ${layerDivClasses.join(' ')}">` + lyr.getLegendDiv() + '&lt;/li>';
+            theHml += `<li id="${lyr.id}-layer-li" class="legend-layer-li ${layerDivClasses.join(' ')}">` + lyr.getLegendDiv() + '</li>';
 
 
         } else if (theGroup.groupGroupsLookup[itemId]) {
@@ -190,26 +179,26 @@ class LayerGroup {
              */
             let otherGroup = theGroup.groupGroupsLookup[itemId];
 
-            theHml += `&lt;li>`;
-            theHml += `&lt;div id="${otherGroup.groupId}-legend-layer-div" ` +
+            theHml += `<li>`;
+            theHml += `<div id="${otherGroup.groupId}-legend-layer-div" ` +
                 `class="legend-layer-group  ${layerDivClasses.join(' ')}">`;
 
             if (otherGroup.addCheck) {
-                theHml += `&lt;input type="checkbox" checked id="${otherGroup.groupId}-group-chck">` +
-                    `&lt;label for="${otherGroup.groupId}-group-chck" title="Click arrow to expand or collapse">${otherGroup.groupName}&lt;/label>`;
+                theHml += `<input type="checkbox" checked id="${otherGroup.groupId}-group-chck">` +
+                    `<label for="${otherGroup.groupId}-group-chck" title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
             } else {
-                theHml += `&lt;label title="Click arrow to expand or collapse">${otherGroup.groupName}&lt;/label>`;
+                theHml += `<label title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
             }
 
-            theHml += `&lt;span title="Expand/Collapse" class="layer-group-expander`;
+            theHml += `<span title="Expand/Collapse" class="layer-group-expander`;
             theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}">`;
-            theHml += otherGroup.collapse ? '&amp;#9654;' : '&amp;#9660;';
-            theHml += '&lt;/span>';
+            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
+            theHml += '</span>';
 
             //parents.push(groupId);
-            theHml += '&lt;ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '&lt;/ul>';
-            theHml += '&lt;/div>';
-            theHml += '&lt;/li>';
+            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
+            theHml += '</div>';
+            theHml += '</li>';
         }
 
         return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
@@ -221,6 +210,11 @@ class LayerGroup {
  */
 class LayerLegend {
 
+    $divElement: any;
+    _legendItems: any;
+    layerGroup: any;
+    legendId: any;
+
     /**
      *
      * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
@@ -228,7 +222,7 @@ class LayerLegend {
      * @param {object} options for legend
      * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
      * @param {string} [options.legendTitle=Legend] the legend title
-     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent
+     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
      */
     constructor(legendItems, divId, options) {
         for (let i of legendItems) {
@@ -265,16 +259,16 @@ class LayerLegend {
         }
 
         let _this = this;
-
         //// if legend display is scale dependent, make sure the mapMove object is initialized first
         if (options.scaleDependent) {
             mapMove.checkInit();
 
             mapMove.addCallback(function (ext, zoom, evt) {
+
                 if (typeof evt == 'undefined' || evt == 'change:resolution') {
                     for (let lyr of this.layerGroup.allLayerArray) {
                         let $lyrLi = $('#' + lyr.id + '-layer-li');
-                        if (zoom > lyr.maxZoom || zoom &lt; lyr.minZoom) {
+                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
                             $lyrLi.addClass('layer-not-visible');
                         } else {
                             $lyrLi.removeClass('layer-not-visible');
@@ -284,7 +278,7 @@ class LayerLegend {
             }, this, 100, true, 'legend1');
         }
 
-        // &lt;editor-fold desc="add event listeners">
+        // <editor-fold desc="add event listeners">
 
         this.$divElement.find(".suppress-by-extent").change(function () {
             let legendLayerLis = $('.legend-layer-li');
@@ -313,23 +307,24 @@ class LayerLegend {
 
             if ($this.hasClass('legend-layer-group-collapsed')){
                 $this.removeClass('legend-layer-group-collapsed');
-                $this.html('&amp;#9660;');
+                $this.html('&#9660;');
             } else {
                 $this.addClass('legend-layer-group-collapsed');
-                $this.html('&amp;#9654;');
+                $this.html('&#9654;');
             }
         });
 
         this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
-        // &lt;/editor-fold>
+        // </editor-fold>
     }
 
+
     /**
      * @param {Array} [legendItems=this._layerConfig] the legend items
      * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
      * @private
      */
-    _buildTree(legendItems, parents) {
+    _buildTree(legendItems, parents?) {
 
         if (legendItems.length == 0) {
             return;
@@ -359,33 +354,7 @@ class LayerLegend {
         this._buildTree(legendItems.slice(1), parents);
     }
 
-    set showAll(val) {
-
-    }
 }
 
 nm.LayerLegend = LayerLegend;
 export default LayerLegend;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/collections/Sliders.ts b/src-ts/collections/Sliders.ts
new file mode 100644
index 0000000..db5e2f7
--- /dev/null
+++ b/src-ts/collections/Sliders.ts
@@ -0,0 +1,632 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+
+
+import provide from '../util/provide';
+let nm = provide('collections');
+const $ = require('jquery');
+
+export interface TipSliderConfig {
+    label: string;
+    yearOptions: Array<{column: string, label: string}>
+}
+
+export interface TipPresetConfig {
+    label: string;
+    presets: Array<{column: string, value: number}>
+}
+
+export interface ChangeResponse{
+    paramWeights: {[s:string]: number}
+    region: string;
+    mmVersion: string;
+}
+
+export interface ChangeCallback{
+    (chg: ChangeResponse): any
+}
+
+
+class TipPresets implements TipPresetConfig {
+    label: string;
+    presets: Array<{column: string, value: number}>;
+    domId: string;
+
+    constructor(conf: TipPresetConfig) {
+        this.label = conf.label;
+        this.presets = conf.presets;
+        this.domId = this.label.replace(/ /g, '').toLowerCase()
+    }
+}
+
+
+class _Slider {
+    _min: number;
+    _max: number;
+    _locked: boolean;
+    atMin: boolean;
+    atMax: boolean;
+    _weightDefault: number;
+    _weight: number;
+    html: string;
+    domId: string;
+    name: string;
+
+    labelLow: JQuery;
+    labelHigh: JQuery;
+    labelVal: JQuery;
+    slider: JQuery;
+    selectionBox: JQuery;
+    chk: JQuery;
+
+    selectedParam: any;
+    selectedParamDefault: any;
+    _dropdownSelection: string;
+
+    /**
+     * Slider constructor
+     * @param sliderConfig - the configuration
+
+     */
+    constructor(sliderConfig: TipSliderConfig) {
+        //let _this = this;
+        this._dropdownSelection = null;
+        this._weight = null;
+        this.name = sliderConfig.label;
+        this.domId = this.name.toLowerCase().replace(/ /g, '-');
+
+        this._locked = false;
+
+        this._min = 0.0;
+        this._max = 100;
+
+        this.labelLow = null;
+        this.labelHigh = null;
+        this.labelVal = null;
+        this.slider = null;
+        this.chk = null;
+
+        this.atMin = false;
+        this.atMax = false;
+
+
+        let sel = `<select class="${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}" id="${this.domId}_chg">`;
+
+        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {
+            let itm = sliderConfig.yearOptions[i];
+            sel += `<option value="${itm.column}">${itm.label}</option>`;
+        }
+        sel += '</select>';
+
+        this.selectedParamDefault = this.selectedParam;
+
+        this.html = '<div class="slider-div">' +
+            `<label for="${this.domId}_chk" class="slider-label">${this.name}</label>` +
+            sel + `<br>` +
+            `<input id="${this.domId}_chk" type="checkbox" title="Lock/Unlock Slider">` +
+            `<label id="${this.domId}_low" class="low-high"></label>` +
+            `<input id="${this.domId}" type="range" value="50" min="0" max="100" step="0.1">` +
+            `<label id="${this.domId}_high" class="low-high"></label>` +
+            `<label id="${this.domId}_lbl" for="${this.domId}" class="percent-label"></label></div>`;
+    }
+
+    /**
+     * add html to dom
+     * @param {jQuery} $container - container element
+     */
+    addToDom($container) {
+        $container.append(this.html);
+        this.labelLow = $(`#${this.domId}_low`);
+        this.labelHigh = $(`#${this.domId}_high`);
+        this.labelVal = $(`#${this.domId}_lbl`);
+        this.slider = $(`#${this.domId}`);
+        this.selectionBox = $(`#${this.domId}_chg`);
+        this.chk = $(`#${this.domId}_chk`);
+    }
+
+    /**
+     * increment the slider
+     * @param {number} delta change delta
+     * @returns {number} the remainder not able to be allocated to this slider
+     */
+    increment(delta) {
+        let remainder = 0;
+        delta = Number(delta.toFixed(1));
+
+        this._weight += delta;
+        if (this._weight < this._min) {
+            remainder = this._min - this._weight;
+            this._weight = this._min;
+            this.atMin = true;
+        } else if (this._weight > this._max) {
+            remainder = this._max - this._weight;
+            this._weight = this._max;
+            this.atMax = true;
+        } else {
+            this.atMin = false;
+            this.atMax = false;
+        }
+
+        this.slider.val(this._weight.toFixed(1));
+        this.labelVal.html(this._weight.toFixed(1) + '%');
+
+        return remainder;
+    }
+
+    /**
+     * set the value and drop down
+     * @param {number} newVal the new value
+     * @param {string} selectedParam the selected parameter
+     */
+    setValAndDropDown(newVal: number, selectedParam: string) {
+        this.min = 0;
+        this.max = 100;
+        this.weight = newVal;
+        this.slider.val(newVal.toFixed(1));
+        this.selectionBox.val(selectedParam);
+        this.selectedParam = selectedParam;
+        this.locked = true;
+    }
+
+    /**
+     *
+     * @returns {boolean} if locked
+     */
+    get locked() {
+        return this._locked;
+    }
+
+    /**
+     *
+     * @param {boolean} val if locked
+     */
+    set locked(val) {
+        this._locked = val;
+        this.slider.prop('disabled', this._locked);
+        this.selectionBox.prop('disabled', this._locked);
+        this.chk.prop('checked', !this._locked);
+    }
+
+    /**
+     *
+     * @returns {number} the minimum
+     */
+    get min() {
+        return this._min;
+    }
+
+    /**
+     *
+     * @param {number} newVal new minimum
+     */
+    set min(newVal) {
+        this._min = Number(newVal.toFixed(1));
+        if (this._min < 0) {
+            this._min = 0;
+        }
+        this.labelLow.html(this._min.toFixed(1));
+        this.slider.attr('min', this._min.toFixed(1));
+        this.atMin = this._weight == this._min;
+    }
+
+    /**
+     *
+     * @returns {number} the maximum
+     */
+    get max() {
+        return this._max;
+    }
+
+    /**
+     *
+     * @param {number} newVal the maximum
+     */
+    set max(newVal) {
+        this._max = Number(newVal.toFixed(1));
+        if (this._max > 100) {
+            this._max = 100.0;
+        }
+        this.labelHigh.html(this._max.toFixed(1));
+        this.slider.attr('max', this._max.toFixed(1));
+        this.atMax = this._weight == this._max;
+    }
+
+    /**
+     *
+     * @returns {number} the weight
+     */
+    get weight() {
+        return this._weight;
+    }
+
+    /**
+     *
+     * @param {number} newVal the weight
+     */
+    set weight(newVal) {
+        this._weight = Number(newVal.toFixed(1));
+        this.labelVal.html(this._weight.toFixed(1) + '%');
+        if (this._weight <= this._min) {
+            this.atMin = true;
+            this.atMax = false;
+        } else if (this._weight >= this._max) {
+            this.atMin = false;
+            this.atMax = true;
+        } else {
+            this.atMin = false;
+            this.atMax = false;
+        }
+    }
+}
+
+nm._Slider = _Slider;
+
+
+/**
+ * class to keep track of the sliders
+ */
+export class TipSliders {
+    $container: JQuery;
+    reservedPercent: number;
+    total: number;
+    lockedCount: number;
+    notLockedCount: number;
+    private _sliderList: Array<_Slider>;
+    private _sliderLookup: {[s: string]: _Slider};
+    private resetting: boolean;
+    public changedCallback: ChangeCallback;
+
+    private _lockedList: Array<_Slider>;
+    private _inRangeList: Array<_Slider>;
+    private _atMinList: Array<_Slider>;
+    private _atMaxList: Array<_Slider>;
+
+    _presetArray: Array<TipPresets>;
+    _presetLookup: {[s: string]: TipPresets};
+
+    _$presetSelector: JQuery;
+    _$regionSelector: JQuery;
+    _$versionSelector: JQuery;
+
+    /**
+     *
+     * @param sliderConfigs
+     * @param presetConfig
+     * @param divId
+     * @param presetSelectorId
+     * @param regionSelectorId
+     * @param versionSelectorId
+     */
+    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,
+                divId: string, presetSelectorId: string, regionSelectorId: string, versionSelectorId: string,
+                chgCallback?: ChangeCallback) {
+        this.resetting = false;
+        this.reservedPercent = 0.0;
+        this.$container = $('#' + divId);
+        this.$container.addClass('slider-container');
+
+        this.changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};
+
+        this._$presetSelector = $('#' + presetSelectorId);
+        this._$regionSelector = $('#' + regionSelectorId);
+        this._$versionSelector = $('#' + versionSelectorId);
+
+        this._sliderList = [];
+        this._sliderLookup = {};
+
+        for (let i = 0; i < sliderConfigs.length; i++) {
+            let sld = new _Slider(sliderConfigs[i]);
+            this._sliderList.push(sld);
+            this._sliderLookup[sld.domId] = sld;
+            sld.addToDom(this.$container);
+        }
+
+        this._presetArray = [];
+        this._presetLookup = {};
+
+        for (let i = 0; i < presetConfig.length; i++) {
+            let preset = new TipPresets(presetConfig[i]);
+
+            let idx = (i + 1).toFixed();
+
+            this._presetLookup[idx] = preset;
+            this._presetArray.push(preset);
+            this._$presetSelector.append(`<option value="${idx}">${preset.label}</option>`);
+        }
+
+
+        this._lockedList = [];
+        this._inRangeList = [];
+        this._atMinList = [];
+        this._atMaxList = [];
+
+        this.lockedCount = 10;
+        this.notLockedCount = 0;
+
+        this._splitSliderArray();
+
+
+        this._$presetSelector.change(() => {
+            this.setPresetValues();
+            this._runChangedCallback();
+        });
+
+        this._$regionSelector.change(() => {
+            this._runChangedCallback();
+        });
+
+        this._$versionSelector.change(() => {
+            this._runChangedCallback();
+        });
+
+        this._$presetSelector.trigger('change');
+
+        this._addEventListeners();
+    }
+
+    _runChangedCallback(){
+        this.changedCallback(this.paramWeightsRegionVersion);
+    }
+
+    setPresetValues() {
+        let thePreset = this._presetLookup[this._$presetSelector.val()];
+
+        for (let i = 0; i < thePreset.presets.length; i++) {
+            let presetValues = thePreset.presets[i];
+            let theSlider = this._sliderList[i];
+
+            theSlider.locked = true;
+            theSlider.setValAndDropDown(presetValues.value, presetValues.column);
+        }
+    }
+
+    /**
+     * split array into subarrays holding the sliders
+     * @private
+     */
+    _splitSliderArray() {
+        this._lockedList = [];
+        this._inRangeList = [];
+        this._atMinList = [];
+        this._atMaxList = [];
+
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
+
+            if (sld.locked) {
+                this._lockedList.push(sld);
+            } else if (sld.atMin) {
+                this._atMinList.push(sld);
+            } else if (sld.atMax) {
+                this._atMaxList.push(sld);
+            } else {
+                this._inRangeList.push(sld);
+            }
+        }
+        this.lockedCount = this._lockedList.length;
+        this.notLockedCount = this._sliderList.length - this.lockedCount;
+    }
+
+    /**
+     * handle remainder, recursive to take care of min max overshoots
+     * @param {number} remain the remainder
+     * @param {string} skipDomId - this dom id
+     * @private
+     */
+    _handleRemainder(remain, skipDomId) {
+
+        remain = Number(remain.toFixed(1));
+        if (remain == 0) {
+            return;
+        }
+
+        this._splitSliderArray();
+
+        let canChangeArray = [];
+        for (let i = 0; i < this._inRangeList.length; i++) {
+            let sld = this._inRangeList[i];
+            if (sld.domId == skipDomId) {
+                continue;
+            }
+            canChangeArray.push(sld);
+        }
+
+        if (remain > 0) {
+            for (let i = 0; i < this._atMaxList.length; i++) {
+                let sld = this._atMaxList[i];
+                if (sld.domId == skipDomId) {
+                    continue;
+                }
+                canChangeArray.push(sld);
+            }
+        } else {
+            for (let i = 0; i < this._atMinList.length; i++) {
+                let sld = this._atMinList[i];
+                if (sld.domId == skipDomId) {
+                    continue;
+                }
+                canChangeArray.push(sld);
+            }
+        }
+
+        if (canChangeArray.length == 0) {
+            return;
+        }
+
+        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
+
+        let newRemainder = 0;
+        for (let i = 0; i < canChangeArray.length; i++) {
+            newRemainder += canChangeArray[i].increment(inc);
+        }
+
+        this._handleRemainder(newRemainder, skipDomId);
+    }
+
+    /**
+     *
+     * @param {object} keyValList key and value list
+     */
+    setValues(keyValList) {
+        this.resetting = true;
+        for (let k in keyValList) {
+            if (keyValList.hasOwnProperty(k)) {
+                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
+            }
+        }
+        this.resetting = false;
+    }
+
+    /**
+     * get the weight sum
+     * @returns {number} the weight sum
+     */
+    getSum() {
+        let total = 0;
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
+            total += Number(sld.weight.toFixed(1));
+        }
+
+        return total;
+    }
+
+    /**
+     * get the parameter weights
+     * @returns {object} lookup with parameter weights
+     */
+    getParams() {
+        let paramWeights = {};
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
+            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
+        }
+
+        return paramWeights;
+    }
+
+    _addEventListeners() {
+        let ___this = this;
+
+
+        //change function
+        this.$container.find('input[type="range"]').change(function () {
+                if (___this.resetting) {
+                    return;
+                }
+
+                let $this = $(this);
+                let domId = this['id'];
+                let sldr = ___this._sliderLookup[domId];
+
+                let newValue = parseFloat($this.val());
+
+                let oldValue = sldr.weight;
+                let diff = newValue - oldValue;
+                diff = Number(diff.toFixed(1));
+
+                sldr.weight = Number(newValue.toFixed(1));
+
+                ___this._handleRemainder(diff, domId);
+
+                //cleanup, make sure the sum is still 100
+                let sum = Number(___this.getSum().toFixed(1));
+
+                if (sum > 100) {
+                    loop1:
+                        while (true) {
+                            for (let i = 0; i < ___this._sliderList.length; i++) {
+                                let sld = ___this._sliderList[i];
+                                if (sld.domId == domId || sld.locked || sld.atMin) {
+                                    continue;
+                                }
+                                sld.increment(-0.1);
+                                sum -= 0.1;
+                                if (sum.toFixed(1) == '100.0') {
+                                    break loop1;
+                                }
+                            }
+                        }
+                } else if (sum < 100) {
+                    loop1:
+                        while (true) {
+                            for (let i = 0; i < ___this._sliderList.length; i++) {
+                                let sld = ___this._sliderList[i];
+                                if (sld.domId == domId || sld.locked || sld.atMax) {
+                                    continue;
+                                }
+                                sld.increment(0.1);
+                                sum += 0.1;
+                                if (sum.toFixed(1) == '100.0') {
+                                    break loop1;
+                                }
+                            }
+                        }
+                }
+
+                ___this._$presetSelector.val('0');
+                ___this._runChangedCallback();
+            }
+        );
+
+        //update the selected parameter when the selection is changed
+        $('.show-select').change(function () {
+            if (___this.resetting) {
+                return;
+            }
+            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
+
+            ___this._$presetSelector.val('0');
+
+            ___this._runChangedCallback();
+
+        });
+
+        //lock the slider and update the reserved percent
+        this.$container.find('input[type="checkbox"]').change(function () {
+            let domEl = this;
+
+            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
+            ___this.reservedPercent = 0.0;
+            ___this.notLockedCount = 0;
+
+            let notLockedSliders = [];
+
+            for (let i = 0; i < ___this._sliderList.length; i++) {
+                let sld = ___this._sliderList[i];
+                if (sld.locked) {
+                    ___this.reservedPercent += sld.weight;
+                    continue;
+                }
+                notLockedSliders.push(sld);
+                ___this.notLockedCount++;
+            }
+
+            for (let i = 0; i < ___this._sliderList.length; i++) {
+                let sld = ___this._sliderList[i];
+                if (sld.locked) {
+                    continue;
+                }
+                sld.max = 100 - ___this.reservedPercent;
+            }
+
+            if (notLockedSliders.length == 1) {
+                notLockedSliders[0].min = notLockedSliders[0].weight;
+            } else {
+                for (let i = 0; i < notLockedSliders.length; i++) {
+                    notLockedSliders[i].min = 0;
+                }
+            }
+        });
+
+    }
+
+    get paramWeightsRegionVersion(): ChangeResponse{
+        return {paramWeights: this.getParams(),
+            region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val()}
+    }
+}
+
+nm.Sliders = TipSliders;
+export default TipSliders;
diff --git a/src-ts/domUtil/SelectBoxBase.ts b/src-ts/domUtil/SelectBoxBase.ts
new file mode 100644
index 0000000..5fb5c51
--- /dev/null
+++ b/src-ts/domUtil/SelectBoxBase.ts
@@ -0,0 +1,140 @@
+/**
+ * Created by gavorhes on 5/13/2016.
+ */
+/**
+ * Created by gavorhes on 5/12/2016.
+ */
+import makeGuid from '../util/makeGuid';
+import provide from '../util/provide';
+const nm = provide('domUtil');
+
+export interface selectChangeCallback{
+    /**
+     *
+     * @param theValue the current select value of the select box
+     */
+    (theValue: string) : void
+}
+
+/**
+ * must return in the contents <select id="${guid}"></select> among other things
+ */
+export interface contentGenerator{
+    /**
+     * @param aGuid
+     */
+    (aGuid: string): string
+}
+
+
+export class SelectBoxBase{
+    _$container: JQuery;
+    $label: JQuery;
+    _box: JQuery;
+    _changeListeners: Array<selectChangeCallback>;
+    /**
+     *
+     * @param {jQuery} parent - parent container
+     * @param {string} labelContent
+     * @param {contentGenerator} [contentGen=undefined]
+     */
+    constructor(parent, labelContent, contentGen?: contentGenerator){
+        let guidTop = makeGuid();
+        let guid = makeGuid();
+
+        let htmlString = `<div id="${guidTop}">`;
+        htmlString += `<label for="${guid}">${labelContent}</label>`;
+
+        if (contentGen){
+            htmlString += contentGen(guid);
+        } else {
+            htmlString += `<select id="${guid}"></select>`;
+        }
+        htmlString += '</div>';
+
+        parent.append(htmlString);
+
+        this._$container = parent.find('#' + guidTop);
+
+        this.$label = this._$container.find('label');
+
+        /**
+         *
+         * @type {Array<selectChangeCallback>}
+         * @private
+         */
+        this._changeListeners = [];
+
+        this._box = parent.find(`#${guid}`);
+        
+        if (!this._box){
+            throw 'the select box was not found';
+        }
+
+        this._box.change(() => {
+            this.changed();
+        })
+    }
+
+    /**
+     * 
+     * @returns {jQuery}
+     */
+    get box(){
+        return this._box;
+    }
+
+    changed(){
+        let v = this._box.val();
+        
+        for (let f of this._changeListeners){
+            f(v);
+        }
+    }
+
+    /**
+     *
+     * @param {selectChangeCallback} func
+     */
+    addChangeListener(func: selectChangeCallback){
+        this._changeListeners.push(func);
+    }
+
+    /**
+     *
+     * @returns {string|number}
+     */
+    get selectedValue(){
+        let theVal = this.box.val();
+
+        if (theVal == null || typeof theVal == 'undefined'){
+            return null;
+        } else if (isNaN(theVal)){
+            return theVal
+        } else {
+            if (theVal.indexOf('.') > -1){
+                return parseFloat(theVal)
+            } else {
+                return parseInt(theVal);
+            }
+        }
+    }
+
+    /**
+     *
+     * @param {string|number} v
+     * @protected
+     */
+    set selectedValue(v){
+        this.box.val(v);
+    }
+    
+    get selectedText(){
+        return this.box.find('option:selected').text();
+    }
+
+}
+
+nm.SelectBoxBase = SelectBoxBase;
+
+export default SelectBoxBase;
diff --git a/src-ts/domUtil/animate-buttons.ts b/src-ts/domUtil/animate-buttons.ts
new file mode 100644
index 0000000..b29121f
--- /dev/null
+++ b/src-ts/domUtil/animate-buttons.ts
@@ -0,0 +1,228 @@
+
+
+import Timer = NodeJS.Timer;
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+
+const $ = require('jquery');
+import provide from '../util/provide';
+import {rangeChange} from './range-change';
+
+
+let nm = provide('jQueryPlugin');
+
+/**
+ * @callback mediaCallback
+ * @param {number} tm
+ */
+
+function timeToLocalDateString(tm) {
+    "use strict";
+    let d = new Date(tm);
+    let p1 = d.toLocaleTimeString().split(' ');
+    let p2 = p1[0].split(':');
+    p2 = p2.slice(0, 2);
+
+    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
+}
+
+
+export class MediaControl {
+    _container: JQuery;
+    _min: number;
+    _max: number;
+    _playInterval: number;
+    _step: number;
+    _currentValue: number;
+
+    _playing: boolean;
+
+    _$btnStop: JQuery;
+    _$slider: JQuery;
+    _$valLabelVal: JQuery;
+    _$valLabelMin: JQuery;
+    _$valLabelMax: JQuery;
+    _interval: Timer;
+    _showAsDate: boolean;
+
+    _func: Function;
+
+    constructor(element: JQuery|HTMLElement|string, min = 0, max = 100, val= 0, step = 5, func: Function = ()=>{}, playInterval = 5, showAsDate= false) {
+
+        if (typeof  element == 'string'){
+            this._container = $('#' + element);
+        }
+        else if (typeof element['style'] !== 'undefined'){
+            this._container = $(element);
+        } else {
+            this._container = element as JQuery;
+        }
+
+        this._container.addClass('media-control-container');
+        this._playInterval = playInterval;
+        this._interval = undefined;
+        this._func = func;
+
+        this._showAsDate = showAsDate;
+
+        this._currentValue = undefined;
+        this._min = undefined;
+        this._max = undefined;
+        this._step = undefined;
+        this._playing = false;
+
+        let htmlStr =
+            '<span class="media-player-button media-back"></span>' +
+            '<span class="media-player-button media-play"></span>' +
+            '<span class="media-player-button media-pause media-disabled"></span>' +
+            '<span class="media-player-button media-stop media-disabled" ></span>' +
+            '<span class="media-player-button media-ahead"></span>' +
+            `<input type="range">` +
+            `<div class="media-control-value-label-container">` +
+            `<span class="media-control-value-label-min"></span>` +
+            `<span class="media-control-value-label-val"></span>` +
+            `<span class="media-control-value-label-max"></span>` +
+            `</div>`;
+
+        this._container.append(htmlStr);
+
+        // let btnPause = this._container.find('.media-pause');
+        let btnPlay = this._container.find('.media-play');
+        this._$btnStop = this._container.find('.media-stop');
+        let btnAhead = this._container.find('.media-ahead');
+        let btnBack = this._container.find('.media-back');
+        this._$slider = this._container.find('input[type=range]');
+
+        this._$valLabelMin = this._container.find('.media-control-value-label-min');
+        this._$valLabelVal = this._container.find('.media-control-value-label-val');
+        this._$valLabelMax = this._container.find('.media-control-value-label-max');
+
+        this.setMinMaxValueStep(min, max, val, step);
+
+        rangeChange(this._$slider,(newVal) => { this.currentValue = newVal;}, 100);
+
+        let ___this = this;
+
+        btnPlay.click(function () {
+            let $this = $(this);
+            $this.addClass('media-disabled');
+            ___this._$btnStop.removeClass('media-disabled');
+            btnAhead.addClass('media-locked');
+            btnBack.addClass('media-locked');
+            ___this._$slider.prop('disabled', true);
+            ___this._playing = true;
+
+            ___this._interval = setInterval(function () {
+                ___this.currentValue += ___this._step;
+            }, ___this._playInterval);
+        });
+
+        this._$btnStop.click(function () {
+            clearInterval(___this._interval);
+            let $this = $(this);
+            $this.addClass('media-disabled');
+            btnPlay.removeClass('media-disabled');
+            btnAhead.removeClass('media-locked');
+            btnBack.removeClass('media-locked');
+            ___this._$slider.prop('disabled', false);
+            ___this._playing = false;
+        });
+
+        btnAhead.click(function () {
+            ___this.currentValue = ___this.currentValue + ___this._step;
+        });
+
+        btnBack.click(function () {
+            ___this.currentValue = ___this.currentValue - ___this._step;
+        });
+    }
+
+    stopPlaying(){
+        if (this._playing){
+            this._$btnStop.trigger('click');
+        }
+    }
+
+    get playing(){
+        return this._playing;
+    }
+
+    get min() {
+        return this._min;
+    }
+
+    get max() {
+        return this._max;
+    }
+
+    get step() {
+        return this._step;
+    }
+
+    get currentValue() {
+        return this._currentValue;
+    }
+
+    set currentValue(newValue) {
+        if (newValue > this._max) {
+            newValue = this._min;
+        } else if (newValue < this._min) {
+            newValue = this._max;
+        }
+        this._currentValue = newValue;
+        this._$slider.val(this._currentValue.toFixed(2));
+
+        if (this._showAsDate) {
+            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+        } else {
+            this._$valLabelVal.html(this.currentValue.toString());
+        }
+
+        this._func(newValue);
+    }
+
+    /**
+     * set min and max value with step
+     * @param {number} newMin the new min
+     * @param {number} newMax the new mas
+     * @param {number} [newValue=newMin] the value to set
+     * @param {number} [newStep=(newMax-newMin)/20] step value
+     */
+    setMinMaxValueStep(newMin, newMax, newValue, newStep) {
+        this._min = newMin;
+        this._max = newMax;
+
+        newValue = typeof newValue == 'number' ? newValue : newMin;
+        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;
+
+        this._currentValue = newValue;
+        this._step = newStep;
+
+        this._$slider.prop('min', this.min.toString());
+        this._$slider.prop('max', this.max.toString());
+        this._$slider.prop('step', this.step.toString());
+        this._$slider.val(this.currentValue.toString());
+
+        if (this._showAsDate) {
+            this._$valLabelMin.html(timeToLocalDateString(this._min));
+            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+            this._$valLabelMax.html(timeToLocalDateString(this._max));
+        } else {
+            this._$valLabelMin.html(this._min.toString());
+            this._$valLabelVal.html(this.currentValue.toString());
+            this._$valLabelMax.html(this._max.toString());
+        }
+    }
+
+    /**
+     *
+     * @param {mediaCallback} newFunc the callback on change
+     */
+    set changeFunction(newFunc) {
+        this._func = newFunc;
+    }
+}
+
+nm.MediaControl = MediaControl;
+
diff --git a/src-ts/domUtil/range-change.ts b/src-ts/domUtil/range-change.ts
new file mode 100644
index 0000000..550d074
--- /dev/null
+++ b/src-ts/domUtil/range-change.ts
@@ -0,0 +1,142 @@
+
+
+let mouseIn = false;
+let mouseDown = false;
+let timeout = null;
+let dragged = false;
+let lastVal;
+const $ = require('jquery');
+
+
+/**
+ * callback on range change interaction, context of this is the firing dom element
+ * @callback rangeChangeCallback
+ * @param {number} newValue
+ * @param {number} ratio value from 0 to 1 relative of the value to the min and max
+ * @param {object} evt
+ */
+
+/***
+ * callback funcion after the slider has been moved
+ */
+export interface rangeChangedCallback{
+    /**
+     *
+     * @param newValue new value of the slider
+     * @param ratio ratio from low to high, 0 to 1
+     * @param evt the original event
+     */
+    (newValue: number, ratio: number, evt: Event): any
+}
+
+
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+
+function triggerCallback(callback: rangeChangedCallback, evt) {
+    "use strict";
+
+    let val = parseFloat(this.value);
+    let min = parseFloat(this.min);
+    let max = parseFloat(this.max);
+    let step = parseFloat(this.step);
+
+    if (max - val < step){
+        val = max;
+    }
+
+    let percent =  (val - min) / (max - min);
+
+    if (typeof lastVal == 'number' && val ==  lastVal){
+        return;
+    }
+    lastVal = val;
+    callback(val, percent, evt);
+}
+
+
+
+/**
+ * Add a variety of listeners for range inputs applied to a common callback
+ * @param  $slider - jquery reference to the slider
+ * @param {rangeChangeCallback} callback - the callback
+ * @param {number} [changeTimeout=75] before the callback is called
+ * @this {jQuery}
+ * @returns {jQuery} the jQuery object
+ */
+export function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {
+
+    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;
+
+    $slider.mouseenter(function () {
+        mouseIn = true;
+    });
+
+    $slider.mouseleave(function () {
+        mouseIn = false;
+        mouseDown = false;
+    });
+
+    $slider.mousedown(function () {
+        mouseDown = true;
+    });
+
+    $slider.mouseup(function () {
+        mouseDown = false;
+    });
+
+    $slider.mousemove(
+        /**
+         *
+         * @param {object} evt - event properties
+         * @this {HTMLElement}
+         */
+        function (evt) {
+        if (!(mouseIn && mouseDown)) {
+            return;
+        }
+
+        dragged = true;
+
+        if (lastVal == this['value']) {
+            return;
+        }
+        lastVal = this['value'];
+
+        if (timeout != null) {
+            clearTimeout(timeout);
+        }
+
+        let _this = this;
+
+        timeout = setTimeout(function () {
+            triggerCallback.call(_this, callback, evt);
+            timeout = null;
+
+        }, changeTimeout);
+    });
+
+    $slider.keyup(
+        /**
+         *
+         * @param {object} evt - event properties
+         */
+        function (evt) {
+        if (evt.keyCode == 37 || evt.keyCode == 39) {
+            triggerCallback.call(this, callback, evt);
+        }
+    });
+
+    $slider.change(function (evt) {
+        if (dragged) {
+            dragged = false;
+
+            return;
+        }
+        triggerCallback.call(this, callback, evt);
+    });
+
+    return this;
+}
+
diff --git a/src-ts/gulp-helpers.js b/src-ts/gulp-helpers.js
new file mode 100644
index 0000000..b5f91c5
--- /dev/null
+++ b/src-ts/gulp-helpers.js
@@ -0,0 +1,168 @@
+/**
+ * Created by gavorhes on 5/10/2016.
+ * Helpers functions for gulp tasks
+ */
+
+const gulp = require('gulp');
+const babel = require('gulp-babel');
+const babelify = require('babelify');
+const browserify = require('browserify');
+const buffer = require('vinyl-buffer');
+const source = require('vinyl-source-stream');
+const sourcemaps = require('gulp-sourcemaps');
+const minify = require('gulp-minify');
+const less = require('gulp-less');
+const cssmin = require('gulp-cssmin');
+const rename = require('gulp-rename');
+const glob = require('glob');
+const watchify = require('watchify');
+const gulpUtil = require('gulp-util');
+
+
+/**
+ * @typedef {object} dirNameFilePath
+ * @property {string} dirName - directory name
+ * @property {string} fileName - file name
+ */
+
+/**
+ * get directory and file name from output path
+ * @param {string} outputFile - output file path
+ * @returns {dirNameFilePath} file directory and path
+ * @private
+ */
+function _processOutDir(outputFile) {
+    "use strict";
+
+    let pathParts = outputFile.split('/');
+    let outFileName = pathParts[pathParts.length - 1];
+    pathParts.splice(pathParts.length - 1, 1);
+    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
+
+    return {dirName: outDir, fileName: outFileName};
+}
+
+/**
+ *
+ * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
+ * @param {dirNameFilePath|string} outFile - output file as string or path object
+ * @param {boolean} [production=false] if production, minify and don't watch
+ * @returns {*} the stream
+ * @private
+ */
+export function bundleEs2015(inputFile, outFile, production) {
+    "use strict";
+
+
+
+    if (typeof outFile == 'string') {
+        outFile = _processOutDir(outFile);
+    }
+
+    production = typeof production == 'boolean' ? production : false;
+
+    if (inputFile.indexOf('*') > -1) {
+        inputFile = glob.sync(inputFile);
+    }
+
+
+    let bundler = browserify({
+        entries: inputFile,
+        cache: {},
+        packageCache: {},
+        debug: true
+    });
+
+    
+    bundler.transform(babelify.configure({
+        presets: ["es2015"],
+        ignore: /ol\-build\.js|jquery\.min/
+        // ignore: /ol\-build\.js|jquery\.min|\/node_modules\/(?!webmapsjs\/)|\/node_modules\/webmapsjs\/(?!lib\/)/
+    }));
+
+    if (!production) {
+        bundler = watchify(bundler);
+    }
+
+
+    function runBundle() {
+        console.log(inputFile);
+        let stream = bundler.bundle()
+            .on('error', function (err) {
+                console.error(err);
+            })
+            .pipe(source(outFile.fileName))
+            .pipe(buffer())
+            .pipe(sourcemaps.init({loadMaps: true}));
+
+        if (production) {
+            stream = stream.pipe(minify({
+                ext: {
+                    src: '-debug.js',
+                    min: '.js'
+                },
+                exclude: ['tasks'],
+                ignoreFiles: ['.combo.js', '-min.js']
+            }));
+        }
+
+        return stream.pipe(sourcemaps.write('./')).pipe(gulp.dest(outFile.dirName));
+    }
+
+    if (!production) {
+        bundler.on('update', runBundle);
+        bundler.on('log', gulpUtil.log);
+    }
+
+    return runBundle();
+}
+
+
+/**
+ * convert less file
+ * @param {string} inputFile - input less file
+ * @param {string} outputFile - output css file
+ * @returns {*} stream
+ */
+export function processLessFile(inputFile, outputFile) {
+    "use strict";
+
+    let pathParts = outputFile.split('/');
+    let outFileName = pathParts[pathParts.length - 1];
+    pathParts.splice(pathParts.length - 1, 1);
+    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
+
+    let fileNameParts = outFileName.split('.');
+
+    return gulp.src(inputFile)
+        .pipe(less().on('error', function (err) {
+            console.log(err);
+        }))
+        .pipe(cssmin().on('error', function (err) {
+            console.log(err);
+        }))
+        .pipe(rename({
+            basename: fileNameParts[0],
+            extname: '.' + fileNameParts[1],
+            suffix: '.min'
+        }))
+        .pipe(gulp.dest(outDir));
+}
+
+/**
+ * make multiple bundles
+ * @param {Array<Array<string>>} fileArray - array with elements [input file, output file]
+ * @param {boolean} production - if is production
+ * @returns {*} output stream
+ */
+export function bundleEs2015Multiple(fileArray, production) {
+    "use strict";
+
+    let outStream = undefined;
+
+    for (let f of fileArray) {
+        outStream = bundleEs2015(f[0], f[1], production);
+    }
+
+    return outStream;
+}
diff --git a/src-ts/index.ts b/src-ts/index.ts
new file mode 100644
index 0000000..1fa9821
--- /dev/null
+++ b/src-ts/index.ts
@@ -0,0 +1,4 @@
+/**
+ * Created by gavorhes on 9/20/2016.
+ */
+import {} from 'util'
\ No newline at end of file
diff --git a/src-ts/jquery-plugin/day-range.ts b/src-ts/jquery-plugin/day-range.ts
new file mode 100644
index 0000000..f4e8136
--- /dev/null
+++ b/src-ts/jquery-plugin/day-range.ts
@@ -0,0 +1,114 @@
+
+import provide from '../util/provide';
+let nm = provide('jQueryPlugin');
+
+const $ = require('jquery');
+require('jquery-ui');
+
+export class DayRange {
+    _workingDayRange: number;
+    _$startDate: JQuery;
+    _$endDate: JQuery;
+    _maxDateRange: number;
+    _startDate: Date;
+    _endDate: Date;
+
+    /**
+     * constructor for the date range
+     * @param {number} dayRange number of days
+     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
+     */
+    constructor(dayRange, jQueryRef) {
+        this._workingDayRange = dayRange - 1;
+
+        let pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
+            '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
+            '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' +
+            '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
+
+        jQueryRef.append(pickerHtml);
+
+        this._$startDate = $('#start-date');
+        this._$endDate = $('#end-date');
+
+        this._$startDate['datepicker']();
+        this._$endDate['datepicker']();
+
+        this._startDate = null;
+        this._endDate = null;
+
+        let dte1 = new Date();
+        dte1.setHours(0, 0, 0, 0);
+        let dte2 = new Date(dte1.getTime());
+        dte2.setDate(dte2.getDate() + dayRange);
+        dte2.setHours(23, 59, 59, 0);
+        this._maxDateRange = dte2.getTime() - dte1.getTime();
+
+        let _this = this;
+
+        //add event listeners
+        this._$startDate.change(function () {
+            _this.startDate = this.value;
+        });
+
+        this._$endDate.change(function () {
+            _this.endDate = this.value;
+        });
+
+        // initialize
+        this.endDate = new Date();
+    }
+
+    get startDate() : Date{
+        return this._startDate;
+    }
+
+    /**
+     *
+     * @param val
+     */
+    set startDate(val: Date) {
+        this._startDate = val;
+        this._startDate.setHours(0, 0, 0, 0);
+        this._$startDate.val(this._startDate.toLocaleDateString());
+
+        if (
+            this.endDate == null ||
+            this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||
+            this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+            let tmpDate = new Date(this._startDate.getTime());
+            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
+            this.endDate = new Date(tmpDate.getTime());
+        }
+    }
+
+    get endDate() : Date{
+        return this._endDate;
+    }
+
+
+    set endDate(val: Date) {
+        this._endDate = val;
+        this._endDate.setHours(23, 59, 59, 0);
+        this._$endDate.val(this._endDate.toLocaleDateString());
+        if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+            let tmpDate = new Date(this._endDate.getTime());
+            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
+            this.startDate = new Date(tmpDate.getTime());
+        }
+    }
+}
+
+nm.DayRange = DayRange;
+
+/**
+ * Adds day range control
+ * @param {number} dayRange the number of days
+ * @returns {DayRange} the day range object
+ */
+jQuery.fn.dayRange = function (dayRange) {
+    return new DayRange(dayRange, this);
+};
+
+export default DayRange;
+
diff --git a/src-ts/jquery/floatthead.ts b/src-ts/jquery/floatthead.ts
new file mode 100644
index 0000000..0b33762
--- /dev/null
+++ b/src-ts/jquery/floatthead.ts
@@ -0,0 +1,55 @@
+/**
+ * Created by gavorhes on 6/22/2016.
+ */
+const $ = require('jquery');
+global['jQuery'] = $;
+
+require('floatthead');
+
+
+
+/**
+ * implement the default window scroll
+ * @param {jQuery} $table - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export function windowScroll($table, options){
+    "use strict";
+    options = options || {};
+
+    $table['floatThead'](options);
+}
+
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $tableContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export function overflowScroll($table: JQuery, $tableContainer: JQuery, options?){
+    "use strict";
+    options = options || {};
+
+    options.scrollContainer = (t) => {
+        return $tableContainer;
+    };
+
+     $table['floatThead'](options);
+}
+
+/**
+ *
+ * @param {jQuery} $table - jquery reference to table
+ * @param {jQuery} $responsiveContainer - jquery reference to table
+ * @param {object} [options={}] float options
+ */
+export function responsiveScroll($table: JQuery, $responsiveContainer: JQuery, options?) {
+    "use strict";
+    options = options || {};
+
+    options.responsiveContainer = (t) => {
+        return $responsiveContainer;
+    };
+
+    $table['floatThead'](options);
+}
diff --git a/doc/layers_LayerBase.js.html b/src-ts/layers/LayerBase.ts
similarity index 55%
rename from doc/layers_LayerBase.js.html
rename to src-ts/layers/LayerBase.ts
index 155d991..f59b5d0 100644
--- a/doc/layers_LayerBase.js.html
+++ b/src-ts/layers/LayerBase.ts
@@ -1,42 +1,59 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerBase.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerBase.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>import $ from '../jquery/jquery';
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+const $ = require('jquery');
 import makeGuid from '../util/makeGuid';
 import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';
 import provide from '../util/provide';
+import {ol} from 'custom-ol';
 const nm = provide('layers');
 
+
+export interface LayerBaseOptions{
+    id?: string;
+    name?: string;
+    opacity?: number;
+    visible?: boolean;
+    minZoom?: number;
+    maxZoom?: number;
+    params?: any;
+    zIndex?: number;
+    loadCallback?: Function;
+    legendCollapse?: boolean;
+    legendCheckbox?: boolean;
+    legendContent?: string;
+}
+
+
 /**
  * The base layer class
  * @abstract
  */
-class LayerBase {
+export abstract class LayerBase {
+
+    _legendCheckbox: boolean;
+    _url: string;
+    _opacity: number;
+    _minZoom: number;
+    _maxZoom: number;
+    _visible: boolean;
+    _loaded: boolean;
+    _zIndex: number;
+    _legendContent: string;
+    _params: any;
+    id: string;
+    _name: string;
+    _source: ol.source.Source;
+    animate: boolean;
+    _legendCollapse: boolean;
+    _maxResolution: number;
+    _minResolution: number;
+    _$legendDiv: JQuery;
+    loadCallback: Function;
+    _olLayer: ol.layer.Layer;
+    _applyCollapseCalled: boolean;
+
+
+
     /**
      * The base layer for all others
      * @param {string} url - url for source
@@ -54,16 +71,15 @@ class LayerBase {
      * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
      * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
      */
-    constructor(url, options) {
-        options = options || {};
+    constructor(url: string, options?: LayerBaseOptions) {
+        options = options || {} as LayerBaseOptions;
 
         if (typeof url !== 'string') {
             throw 'Invalid URL';
         }
         this._url = url;
-        
-        
-        
+
+
         this._params = typeof options.params == 'object' ? options.params : {};
         this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
         this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
@@ -75,16 +91,16 @@ class LayerBase {
 
         if (this._opacity > 1) {
             this._opacity = 1;
-        } else if (this._opacity &lt; 0) {
+        } else if (this._opacity < 0) {
             this._opacity = 0;
         }
 
         this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        
+
         this._source = undefined;
 
         /**
-         * 
+         *
          * @protected
          */
         this._olLayer = undefined;
@@ -107,11 +123,11 @@ class LayerBase {
         this._legendContent = '';
 
         if (this._legendCheckbox) {
-            this._legendContent += `&lt;input type="checkbox" ${this.visible ? 'checked' : ''} ` +
-                `class="legend-check" id="${this.id}-legend-layer-check">&lt;span>&lt;/span>`;
-            this._legendContent += `&lt;label for="${this.id}-legend-layer-check" class="legend-layer-name">${this.name}&lt;/label>`;
+            this._legendContent += `<input type="checkbox" ${this.visible ? 'checked' : ''} ` +
+                `class="legend-check" id="${this.id}-legend-layer-check"><span></span>`;
+            this._legendContent += `<label for="${this.id}-legend-layer-check" class="legend-layer-name">${this.name}</label>`;
         } else {
-            this._legendContent += `&lt;label class="legend-layer-name">${this.name}&lt;/label>`;
+            this._legendContent += `<label class="legend-layer-name">${this.name}</label>`;
         }
 
         this._$legendDiv = null;
@@ -139,7 +155,7 @@ class LayerBase {
      * @returns {string} html for layer wrapped in a div
      */
     getLegendDiv() {
-        return `&lt;div class="legend-layer-div" id="${this.id}-legend-layer-div">${this._legendContent}&lt;/div>`;
+        return `<div class="legend-layer-div" id="${this.id}-legend-layer-div">${this._legendContent}</div>`;
     }
 
     /**
@@ -150,10 +166,10 @@ class LayerBase {
     _addLegendContent(additionalContent) {
         additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
 
-        let addCollapse = additionalContent.indexOf('&lt;ul>') > -1;
+        let addCollapse = additionalContent.indexOf('<ul>') > -1;
 
         if (addCollapse) {
-            additionalContent = '&lt;span class="legend-items-expander" title="Expand/Collapse">&amp;#9660;&lt;/span>' + additionalContent;
+            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
         }
 
         this._legendContent += additionalContent;
@@ -197,10 +213,10 @@ class LayerBase {
 
                     if ($this.hasClass('legend-layer-group-collapsed')) {
                         $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&amp;#9660;');
+                        $this.html('&#9660;');
                     } else {
                         $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&amp;#9654;');
+                        $this.html('&#9654;');
                     }
                 });
 
@@ -214,12 +230,9 @@ class LayerBase {
     /**
      * trick to refresh the layer
      */
-    refresh(){
-        if (this.source){
+    refresh() {
+        if (this.source) {
             this.source.refresh();
-            //let src = this.source;
-            //this.olLayer.setSource(undefined);
-            //this.olLayer.setSource(src);
         }
     }
 
@@ -254,7 +267,7 @@ class LayerBase {
      * @param {object} newParams - new get params
      * @protected
      */
-    set params(newParams){
+    set params(newParams) {
         this._params = newParams;
     }
 
@@ -302,24 +315,29 @@ class LayerBase {
      * Get the layer visibility
      * @type {boolean}
      */
-    get visible() {
+    get visible(): boolean {
         return this._visible;
     }
 
     /**
-     * Set the layer visibility
-     * @param {boolean} visibility - layer visibility
+     * set the visibility
+     * @param visibility
      */
-    set visible(visibility) {
+    set visible(visibility: boolean) {
+        this.setVisible(visibility);
+    }
+
+    protected setVisible(visibility: boolean) {
         this._visible = visibility;
         if (this.olLayer) {
             this.olLayer.setVisible(this._visible);
-            if (visibility &amp;&amp; !this._loaded) {
+            if (visibility && !this._loaded) {
                 this._load();
             }
         }
     }
 
+
     /**
      * Get the layer opacity
      * @type {number}
@@ -367,58 +385,44 @@ class LayerBase {
      * get the layer source
      * @type {*}
      */
-    get source() {
+    get source(): ol.source.Source {
+        return this.getSource();
+    }
+
+
+    protected getSource(): ol.source.Source{
         return this._source;
     }
 
     /**
      * get the z index
-     * @type {number}
      */
-    get zIndex(){
+    get zIndex(): number {
         return this._zIndex;
     }
 
     /**
      * set the z index
-     * @param {number} newZ - new Z index
      */
-    set zIndex(newZ){
+    set zIndex(newZ: number) {
         this._zIndex = newZ;
-        this.olLayer.setZIndex(this.zIndex);
+    }
+
+    protected setZIndex(newZ: number){
+
     }
 
     /**
-     * 
-     * @returns {ol.layer.Base|undefined} the ol layer
+     * the the ol layer
      */
-    get olLayer(){
+    get olLayer(): ol.layer.Layer {
+        return this.getOlLayer();
+    }
+
+    protected getOlLayer(): ol.layer.Layer{
         return this._olLayer;
     }
 }
 
 nm.LayerBase = LayerBase;
 export default LayerBase;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/layers/LayerBaseVector.ts b/src-ts/layers/LayerBaseVector.ts
new file mode 100644
index 0000000..7ce2a29
--- /dev/null
+++ b/src-ts/layers/LayerBaseVector.ts
@@ -0,0 +1,320 @@
+/// <reference path="../../definitions/jquery.d.ts" />
+/// <reference path="../../definitions/node.d.ts" />
+
+
+import {LayerBase, LayerBaseOptions} from './LayerBase';
+import mapMove from '../olHelpers/mapMove';
+import MapMoveCls from '../olHelpers/mapMoveCls'
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+const $ = require('jquery');
+
+let g = new ol.Map({});
+
+const nm = provide('layers');
+
+export interface makeMapMoveParams {
+    /**
+     *
+     * @param lyr
+     * @param extent
+     * @param zoomLevel
+     */
+    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any
+}
+
+
+export interface LayerBaseVectorOptions extends LayerBaseOptions{
+    autoLoad?: boolean;
+    style?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;
+    onDemand?: boolean;
+    onDemandDelay?: number;
+    mapMoveMakeGetParams?: makeMapMoveParams;
+    mapMoveObj?: MapMoveCls;
+}
+
+
+
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+export class LayerBaseVector extends LayerBase {
+    _olLayer: ol.layer.Vector;
+    _source: ol.source.Vector;
+    _style: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;
+    _autoLoad: boolean;
+    _onDemand: boolean;
+    _onDemandDelay: number;
+    _mapMoveMakeGetParams: makeMapMoveParams;
+    _mapMoveParams: any;
+    _mapMove: MapMoveCls;
+    _projectionMap: ol.proj.Projection;
+    _projection4326: ol.proj.Projection;
+
+
+
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+    constructor(url: string, options: LayerBaseVectorOptions) {
+        super(url, options);
+
+        options = options as LayerBaseVectorOptions;
+
+        //prevent regular load if no url has been provided
+        if (this.url.trim() == '') {
+            this._loaded = true;
+        }
+
+        this._style = typeof options.style == 'undefined' ? undefined : options.style;
+
+        if (this.visible) {
+            this._autoLoad = true;
+        } else {
+            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
+        }
+
+        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+
+        if (options.mapMoveObj) {
+            this._mapMove = options.mapMoveObj;
+        } else {
+            this._mapMove = this._onDemand ? mapMove : undefined;
+        }
+
+
+        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
+            function () {return {};};
+
+        if (this._onDemand) {
+            this._loaded = true;
+            this._mapMoveParams = {};
+            this._mapMove.checkInit();
+            this._mapMove.addVectorLayer(this);
+        }
+
+        this._source = new ol.source.Vector();
+
+        this._olLayer = new ol.layer.Vector(
+            {
+                source: this._source,
+                visible: this.visible,
+                style: this.style,
+                minResolution: this._minResolution,
+                maxResolution: this._maxResolution,
+                zIndex: this._zIndex
+            }
+        );
+
+        this._projectionMap = null;
+        this._projection4326 = new ol.proj.Projection({code: "EPSG:4326"});
+    }
+
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+    addFeatures(featureCollection) {
+        console.log('Layer vector base addFeatures is a placeholder and does nothing');
+    }
+
+    /**
+     * Before call to map move callback, can prevent call by returning false
+     * @param {number} zoom - zoom level
+     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+     * @returns {boolean} if the call should proceed
+     */
+    mapMoveBefore(zoom, evtType) {
+        if (this.minZoom !== undefined) {
+            if (zoom < this.minZoom) {
+                return false;
+            }
+        }
+
+        if (this.maxZoom !== undefined) {
+            if (zoom > this.maxZoom) {
+                return false;
+            }
+        }
+
+        return this.visible;
+    }
+
+    /**
+     * callback to generate the parameters passed in the get request
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+    mapMoveMakeGetParams(extent, zoomLevel) {
+        this._mapMoveParams = {};
+        $.extend(this._mapMoveParams, this.params);
+        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+    }
+
+    /**
+     * callback function on map move
+     * @param {object} d - the json response
+     */
+    mapMoveCallback(d) {
+        if (this.source) {
+            this._source.clear();
+        }
+    }
+
+    /**
+     * clear features in the layer
+     */
+    clear() {
+        if (this._source) {
+            this._source.clear();
+        }
+    }
+
+    /**
+     * get on demand delay in miliseconds
+     */
+    get onDemandDelay(): number {
+        return this._onDemandDelay;
+    }
+
+    /**
+     * get if the layer is autoloaded
+     */
+    get autoLoad(): boolean {
+        return this._autoLoad;
+    }
+
+    /**
+     * get the style definition
+     */
+    get style(): ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style {
+        return this._style;
+    }
+
+    /**
+     * set the style
+     * @param style - the style or function
+     */
+    set style(style: ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style) {
+        this._style = style;
+        this.olLayer.setStyle(this._style);
+    }
+
+    /**
+     * get the map CRS if it is defined by the map move object
+     */
+    get mapCrs(): string {
+        return this.mapProj == null ? null : this.mapProj.getCode();
+    }
+
+    get mapProj(): ol.proj.Projection{
+        if (this._projectionMap != null){
+            return this._projectionMap;
+        }
+
+        if (this._mapMove) {
+            this._projectionMap = this._mapMove.map.getView().getProjection();
+            return this._projectionMap;
+        } else {
+            return null;
+        }
+
+    }
+
+    /**
+     * get the map move object
+     * @type {MapMoveCls|*}
+     */
+    get mapMove(): MapMoveCls {
+        return this._mapMove;
+    }
+
+    /**
+     * map move params
+     * @type {object}
+     */
+    get mapMoveParams() {
+        return this._mapMoveParams;
+    }
+
+    get visible(): boolean{
+        return this._visible;
+    }
+
+    /**
+     * Set the layer visibility
+     * @type {boolean}
+     * @override
+     */
+    set visible(visibility) {
+        super.setVisible(visibility);
+
+        if (this._onDemand) {
+            this.mapMove.triggerLyrLoad(this);
+        }
+    }
+
+    /**
+     * get the layer vector source
+     * @override
+     */
+    get source(): ol.source.Vector {
+        return this.getSource() as ol.source.Vector;
+    }
+
+    /**
+     * array of ol features
+     */
+    get features(): Array<ol.Feature> {
+        return this.source.getFeatures();
+    }
+
+    /**
+     *
+     */
+    get olLayer(): ol.layer.Vector {
+        return super.getOlLayer() as ol.layer.Vector;
+    }
+
+    protected setZIndex(newZ: number) {
+        this.olLayer.setZIndex(newZ);
+    }
+}
+
+nm.LayerBaseVector = LayerBaseVector;
+export default LayerBaseVector;
+
+
+
+
+
+
diff --git a/doc/layers_LayerBaseVectorEsri.js.html b/src-ts/layers/LayerBaseVectorEsri.js
similarity index 56%
rename from doc/layers_LayerBaseVectorEsri.js.html
rename to src-ts/layers/LayerBaseVectorEsri.js
index 99b924c..3bc94e3 100644
--- a/doc/layers_LayerBaseVectorEsri.js.html
+++ b/src-ts/layers/LayerBaseVectorEsri.js
@@ -1,32 +1,4 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerBaseVectorEsri.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerBaseVectorEsri.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
+/**
  * Created by gavorhes on 11/2/2015.
  */
 
@@ -115,7 +87,7 @@ class LayerBaseVectorEsri extends LayerBaseVector {
         if (!this._useEsriStyle) {
             super.addLegendContent(additionalContent);
         } else {
-            $.get(this._urlCopy + '?f=pjson&amp;callback=?', {}, (d) => {
+            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {
                 if (d['subLayers'].length > 0) {
                     alert('should only use single feature layers, not groups');
 
@@ -207,26 +179,3 @@ class LayerBaseVectorEsri extends LayerBaseVector {
 
 nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
 export default LayerBaseVectorEsri;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/layers/LayerBaseVectorGeoJson.ts b/src-ts/layers/LayerBaseVectorGeoJson.ts
new file mode 100644
index 0000000..174100b
--- /dev/null
+++ b/src-ts/layers/LayerBaseVectorGeoJson.ts
@@ -0,0 +1,119 @@
+/**
+ * Created by gavorhes on 11/2/2015.
+ */
+
+import {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+import {MapMoveCls} from "../olHelpers/mapMoveCls";
+let nm = provide('layers');
+const $ = require('jquery');
+
+export interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions{
+    transform?: CrsTransform;
+    mapMoveObj?: MapMoveCls;
+}
+
+export interface CrsTransform{
+    dataProjection: ol.proj.Projection|string;
+    featureProjection: ol.proj.Projection|string;
+}
+
+/**
+ * The Vector GeoJson Layer
+ * @augments LayerBaseVector
+ */
+class LayerBaseVectorGeoJson extends LayerBaseVector {
+    _geoJsonFormat: ol.format.GeoJSON;
+    _transform: CrsTransform;
+
+    /**
+     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     */
+    constructor(url, options?: LayerBaseVectorGeoJsonOptions) {
+        url = typeof url == 'string' ? url : '';
+        super(url, options);
+
+        this._geoJsonFormat = new ol.format.GeoJSON();
+
+        this._transform = options.transform || {dataProjection: "EPSG:4326", featureProjection: "EPSG:3857"};
+
+        if (this.autoLoad || this.visible) {
+            this._load();
+        }
+    }
+
+    /**
+     * add feature collection
+     * @param {object} featureCollection - as geojson object
+     */
+    addFeatures(featureCollection: JSON) {
+        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
+        } else {
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform as Object));
+        }
+    }
+
+    /**
+     * trigger load features
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+    _load() {
+
+        if (super._load()) {
+            return true;
+        }
+
+        $.get(this._url,
+            this._params,
+            (d) => {
+                this.addFeatures(d);
+                this.loadCallback(this);
+            }, 'json').fail(
+            function () {
+                this._loaded = false;
+            }
+        );
+
+        return false;
+    }
+
+    /**
+     * callback function on map move
+     * @param {object} d the json response
+     * @override
+     */
+    mapMoveCallback(d) {
+        super.mapMoveCallback(d);
+        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform as Object));
+    }
+}
+
+nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
+export default LayerBaseVectorGeoJson;
diff --git a/src-ts/layers/LayerBaseXyzTile.js b/src-ts/layers/LayerBaseXyzTile.js
new file mode 100644
index 0000000..88c5856
--- /dev/null
+++ b/src-ts/layers/LayerBaseXyzTile.js
@@ -0,0 +1,106 @@
+/**
+ * Created by gavorhes on 12/4/2015.
+ */
+import $ from '../jquery/jquery';
+import LayerBase from './LayerBase';
+import * as esriToOl from '../olHelpers/esriToOlStyle';
+import provide from '../util/provide';
+import ol from '../ol/ol';
+const nm = provide('layers');
+
+/**
+ * XYZ tile
+ * @augments LayerBase
+ */
+class LayerBaseXyzTile extends LayerBase {
+
+    /**
+     * The XYZ tile layer
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
+     */
+    constructor(url, options) {
+        super(url, options);
+        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});
+        this._olLayer = new ol.layer.Tile({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+
+
+        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
+
+        if (this._useEsriStyle) {
+            this.addLegendContent();
+        }
+    }
+
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    addLegendContent(additionalContent) {
+        if (!this._useEsriStyle) {
+            super.addLegendContent(additionalContent);
+        } else {
+            let urlCopy = this.url;
+
+            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
+            if (mapServerIndex > -1) {
+                urlCopy = urlCopy.slice(0, mapServerIndex + 9);
+            } else {
+                return;
+            }
+
+            if (urlCopy[urlCopy.length - 1] !== '/') {
+                urlCopy += '/';
+            }
+
+            urlCopy += 'legend?f=pjson&callback=?';
+
+            let _this = this;
+            let superAddLegend = super.addLegendContent;
+
+            $.get(urlCopy, {}, function (d) {
+                let newHtml = esriToOl.makeMapServiceLegend(d);
+                superAddLegend.call(_this, newHtml);
+            }, 'json');
+        }
+    }
+
+    /**
+     *
+     * @returns {ol.source.XYZ} the vector source
+     */
+    get source() {
+        return super.source;
+    }
+
+    /**
+     *
+     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
+     */
+    get olLayer() {
+        return super.olLayer;
+    }
+}
+
+nm.LayerBaseXyzTile = LayerBaseXyzTile;
+export default LayerBaseXyzTile;
diff --git a/src-ts/layers/LayerEsriMapServer.ts b/src-ts/layers/LayerEsriMapServer.ts
new file mode 100644
index 0000000..8bcb59a
--- /dev/null
+++ b/src-ts/layers/LayerEsriMapServer.ts
@@ -0,0 +1,167 @@
+/**
+ * Created by gavorhes on 12/7/2015.
+ */
+import {LayerBase, LayerBaseOptions} from './LayerBase';
+import * as esriToOl from '../olHelpers/esriToOlStyle';
+import mapPopup from '../olHelpers/mapPopup';
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+const nm = provide('layers');
+
+const $ = require('jquery');
+
+
+export interface LayerEsriMapServerOptions extends LayerBaseOptions{
+    addPopup?: boolean;
+    showLayers?: Array<number>;
+    useEsriStyle?: boolean
+}
+
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+export class LayerEsriMapServer extends LayerBase {
+    _esriFormat: ol.format.EsriJSON;
+    _popupRequest: JQueryXHR;
+
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} [options] - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+     */
+    constructor(url, options?: LayerEsriMapServerOptions) {
+        super(url, options);
+        this._source = new ol.source.TileArcGISRest(
+            {
+                url: this.url == '' ? undefined : this.url,
+                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}
+            }
+        );
+
+        this._olLayer = new ol.layer.Tile({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
+            zIndex: this._zIndex
+        });
+
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+
+        this._esriFormat = new ol.format.EsriJSON();
+        this._popupRequest = null;
+
+        this.addLegendContent();
+
+        if (options.addPopup) {
+            mapPopup.addMapServicePopup(this);
+        }
+    }
+
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+    addLegendContent(additionalContent?: string) {
+        let urlCopy = this.url;
+
+        if (urlCopy[urlCopy.length - 1] !== '/') {
+            urlCopy += '/';
+        }
+
+        urlCopy += 'legend?f=pjson&callback=?';
+
+        let _this = this;
+        let superAddLegend = super.addLegendContent;
+
+        $.get(urlCopy, {}, function (d) {
+            let newHtml = esriToOl.makeMapServiceLegend(d);
+            superAddLegend.call(_this, newHtml);
+        }, 'json');
+    }
+
+
+    getPopupInfo(queryParams) {
+        if (!this.visible) {
+            return;
+        }
+
+        let urlCopy = this.url;
+
+        if (urlCopy[urlCopy.length - 1] != '/') {
+            urlCopy += '/';
+        }
+
+        urlCopy += 'identify?callback=?';
+
+        let _this = this;
+
+        if (this._popupRequest != null) {
+            this._popupRequest.abort();
+        }
+
+        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
+            for (let r of d['results']) {
+
+                let popupHtml = '<table class="esri-popup-table">';
+
+                for (let a in r['attributes']) {
+                    if (r['attributes'].hasOwnProperty(a)) {
+                        let attrVal = r['attributes'][a];
+
+                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
+                            continue;
+                        }
+
+                        let attr = a;
+                        if (attr.length > 14) {
+                            attr = attr.slice(0, 11) + '...';
+                        }
+
+                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;
+                    }
+                }
+
+                popupHtml += '</table>';
+
+                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+            }
+        }, 'json').always(function () {
+            _this._popupRequest = null;
+        });
+    }
+
+    /**
+     *
+     * @returns {ol.source.TileArcGISRest} the vector source
+     */
+    get source(): ol.source.TileArcGISRest {
+        return super.getSource() as ol.source.TileArcGISRest;
+    }
+
+    /**
+     *
+     * @returns the ol layer
+     */
+    get olLayer(): ol.layer.Tile {
+        return super.getOlLayer() as ol.layer.Tile;
+    }
+}
+nm.LayerEsriMapServer = LayerEsriMapServer;
+export default LayerEsriMapServer;
diff --git a/src-ts/layers/LayerEsriTile.js b/src-ts/layers/LayerEsriTile.js
new file mode 100644
index 0000000..ee0e1b0
--- /dev/null
+++ b/src-ts/layers/LayerEsriTile.js
@@ -0,0 +1,44 @@
+/**
+ * Created by gavorhes on 12/4/2015.
+ */
+import provide from '../util/provide';
+import LayerBaseXyzTile from './LayerBaseXyzTile';
+
+const nm = provide('layers');
+
+/**
+ * Esri tile
+ * @augments LayerBaseXyzTile
+ */
+export class LayerEsriTile extends LayerBaseXyzTile {
+
+    /**
+     * The Esri tile layer
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
+     */
+    constructor(url, options) {
+        if (url.search(/\/$/) == -1){
+            url += '/';
+        }
+        url += 'tile/{z}/{y}/{x}';
+        
+        super(url, options);
+    }
+}
+
+nm.LayerBaseXyzTile = LayerEsriTile;
+
diff --git a/doc/layers_LayerItsInventory.js.html b/src-ts/layers/LayerItsInventory.ts
similarity index 65%
rename from doc/layers_LayerItsInventory.js.html
rename to src-ts/layers/LayerItsInventory.ts
index 0f1f0b2..99b7886 100644
--- a/doc/layers_LayerItsInventory.js.html
+++ b/src-ts/layers/LayerItsInventory.ts
@@ -1,41 +1,13 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: layers/LayerItsInventory.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: layers/LayerItsInventory.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
+/**
  * Created by gavorhes on 12/8/2015.
  */
 
-import $ from '../jquery/jquery';
 import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
 import mapPopup from '../olHelpers/mapPopup';
 import provide from '../util/provide';
-import ol from '../ol/ol';
+import {ol} from 'custom-ol';
 let nm = provide('layers');
+const $ = require('jquery');
 
 
 function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
@@ -74,7 +46,7 @@ function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
         }
 
         // set the width if not defined
-        for (let i = 0; i &lt; itsLineConfig.lineArray.length; i++) {
+        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
             if (itsLineConfig.lineArray[i].length == 3) {
                 itsLineConfig.lineArray[i].push(5);
             }
@@ -110,7 +82,7 @@ function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
  * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
  * @returns {*} undefined, style, or style function
  */
-function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) : ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction|Function{
     "use strict";
     checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
 
@@ -133,11 +105,11 @@ function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
             })
         });
     } else if (itsIconConfig) {
-        return function (feature) {
+        return function (feature, resolution) {
             let symbolProp = feature.getProperties()[itsIconConfig.prop];
             let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
 
-            for (let i = 0; i &lt; itsIconConfig.iconArray.length; i++) {
+            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {
                 let thisProp = itsIconConfig.iconArray[i];
 
                 if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
@@ -161,7 +133,7 @@ function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
             let colr = itsLineConfig.defaultColor || 'red';
             let width = itsLineConfig.defaultWidth || 5;
 
-            for (let i = 0; i &lt; itsLineConfig.lineArray.length; i++) {
+            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
                 let thisProp = itsLineConfig.lineArray[i];
 
                 if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
@@ -215,31 +187,31 @@ function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
 
     if (itsIcon) {
-        return `&lt;img src="${_iconUrlRoot + itsIcon}" class="legend-layer-icon" height="${iconHeight}">`;
+        return `<img src="${_iconUrlRoot + itsIcon}" class="legend-layer-icon" height="${iconHeight}">`;
     } else if (itsLineStyle) {
-        return `&lt;hr style="height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}">`;
+        return `<hr style="height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}">`;
     } else if (itsIconConfig) {
         let outHtml = '';
-        outHtml += '&lt;ul>';
+        outHtml += '<ul>';
 
         for (let a of itsIconConfig.iconArray) {
-            outHtml += `&lt;li>&lt;span class="legend-layer-subitem">${a[1]}&lt;/span>&lt;img src="${_iconUrlRoot + a[2]}" class="legend-layer-icon" height="${iconHeight}">`;
+            outHtml += `<li><span class="legend-layer-subitem">${a[1]}</span><img src="${_iconUrlRoot + a[2]}" class="legend-layer-icon" height="${iconHeight}">`;
         }
-        outHtml += `&lt;li>&lt;span class="legend-layer-subitem">${itsIconConfig.defaultName}&lt;/span>` +
-            `&lt;img src="${_iconUrlRoot + itsIconConfig.defaultIcon}" class="legend-layer-icon" height="${iconHeight}">&lt;/li>`;
-        outHtml += '&lt;/ul>';
+        outHtml += `<li><span class="legend-layer-subitem">${itsIconConfig.defaultName}</span>` +
+            `<img src="${_iconUrlRoot + itsIconConfig.defaultIcon}" class="legend-layer-icon" height="${iconHeight}"></li>`;
+        outHtml += '</ul>';
 
         return outHtml;
     } else if (itsLineConfig) {
         let outHtml = '';
-        outHtml += '&lt;ul>';
+        outHtml += '<ul>';
         for (let ls of itsLineConfig.lineArray) {
-            outHtml += `&lt;li>&lt;span class="legend-layer-subitem">${ls[1]}&lt;/span>` +
-                `&lt;hr style="height: ${ls[3]}px; background-color: ${ls[2]}">`;
+            outHtml += `<li><span class="legend-layer-subitem">${ls[1]}</span>` +
+                `<hr style="height: ${ls[3]}px; background-color: ${ls[2]}">`;
         }
-        outHtml += `&lt;li>&lt;span class="legend-layer-subitem">${itsLineConfig.defaultName}&lt;/span>` +
-            `&lt;hr style="height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}">&lt;/li>`;
-        outHtml += '&lt;/ul>';
+        outHtml += `<li><span class="legend-layer-subitem">${itsLineConfig.defaultName}</span>` +
+            `<hr style="height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}"></li>`;
+        outHtml += '</ul>';
 
         return outHtml;
     } else {
@@ -326,8 +298,8 @@ class LayerItsInventory extends LayerBaseVectorGeoJson {
 
         if (options.addPopup) {
             mapPopup.addVectorPopup(this, function (props) {
-                return `&lt;iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}" ` +
-                    `height="250" width="350">&lt;/iframe>`;
+                return `<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}" ` +
+                    `height="250" width="350"></iframe>`;
             });
         }
     }
@@ -345,10 +317,10 @@ class LayerItsInventory extends LayerBaseVectorGeoJson {
     mapMoveMakeGetParams(extent, zoomLevel) {
         super.mapMoveMakeGetParams(extent, zoomLevel);
         let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);
-        lowerLeft.transform(this.mapCrs, "EPSG:4326");
+        lowerLeft.transform(this.mapProj, this._projection4326);
         let lowerLeftCoordinates = lowerLeft.getCoordinates();
         let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);
-        upperRight.transform(this.mapCrs, "EPSG:4326");
+        upperRight.transform(this.mapProj, this._projection4326);
         let upperRightCoordinates = upperRight.getCoordinates();
 
         $.extend(this.mapMoveParams,
@@ -363,26 +335,3 @@ class LayerItsInventory extends LayerBaseVectorGeoJson {
 
 nm.LayerItsInventory = LayerItsInventory;
 export default LayerItsInventory;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/layers/LayerRealEarthTile.js b/src-ts/layers/LayerRealEarthTile.js
new file mode 100644
index 0000000..46eb2a9
--- /dev/null
+++ b/src-ts/layers/LayerRealEarthTile.js
@@ -0,0 +1,55 @@
+/**
+ * Created by gavorhes on 11/4/2015.
+ */
+
+import $ from '../jquery/jquery';
+import LayerBaseXyzTile from './LayerBaseXyzTile';
+import RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';
+import provide from '../util/provide';
+const mixIns = require('es6-mixins');
+const nm = provide('layers');
+
+/**
+ * Real earth tile
+ * @augments LayerBaseXyzTile
+ */
+class LayerRealEarthTile extends LayerBaseXyzTile {
+    /**
+     * The base layer for all others
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {string} options.products - the products to request
+     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
+     * @param {boolean} [options.animate=false] if the layer should be animated
+     */
+    constructor(options) {
+        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
+        if (!options.animate) {
+            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);
+            this._products = options.products;
+        } else {
+            super('', options);
+            this._products = options.products;
+
+            if (!this.timeInit){
+                mixIns([RealEarthAnimateTile], this);
+            }
+            this.timeInit();
+        }
+    }
+}
+
+nm.LayerRealEarthTile = LayerRealEarthTile;
+export default LayerRealEarthTile;
diff --git a/src-ts/layers/LayerRealEarthVector.js b/src-ts/layers/LayerRealEarthVector.js
new file mode 100644
index 0000000..65ebab4
--- /dev/null
+++ b/src-ts/layers/LayerRealEarthVector.js
@@ -0,0 +1,63 @@
+/**
+ * Created by gavorhes on 11/13/2015.
+ */
+
+import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
+import RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';
+import provide from '../util/provide';
+const mixIns = require('es6-mixins');
+const nm = provide('layers');
+
+/**
+ * Vector real earth vector
+ * @augments LayerBaseVectorGeoJson
+ */
+class LayerVectorRealEarth extends LayerBaseVectorGeoJson {
+    /**
+     * Real Earth vector layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     *
+     * @param {string} options.products real earth products identifier
+     * @param {boolean} [options.animate=false] if the layer should be animated
+     */
+    constructor(options) {
+        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
+        if (!options.animate) {
+            options.params = {products: options.products};
+            super('http://realearth.ssec.wisc.edu/api/shapes', options);
+        } else {
+            options.autoLoad = false;
+            super('', options);
+            this._products = options.products;
+            if (!this.timeInit) {
+                mixIns([RealEarthAnimateVector], this);
+            }
+            this.timeInit();
+        }
+    }
+}
+
+nm.LayerVectorRealEarth = LayerVectorRealEarth;
+export default LayerVectorRealEarth;
diff --git a/src-ts/mixin/RealEarthAnimate.js b/src-ts/mixin/RealEarthAnimate.js
new file mode 100644
index 0000000..949a867
--- /dev/null
+++ b/src-ts/mixin/RealEarthAnimate.js
@@ -0,0 +1,151 @@
+/**
+ * Created by gavorhes on 12/4/2015.
+ */
+import provide from '../util/provide';
+import mapPopup from '../olHelpers/mapPopup';
+import $ from '../jquery/jquery';
+const nm = provide('mixin');
+
+
+/**
+ * The GMT offset time in minutes
+ * @type {number}
+ */
+let offsetMinutes = (new Date()).getTimezoneOffset();
+
+/**
+ * Mixin to get the product times
+ * Be sure to call getTimeInit after the mixin has been applied
+ */
+class RealEarthAnimate {
+
+    /**
+     * override base layer load
+     */
+    load(){};
+
+    /**
+     * Call this after the mixin has been applied
+     */
+    timeInit() {
+        if (!this._products) {
+            throw 'this mixin must be applied to one of the RealEarth layer objects with this.products defined';
+        }
+
+        this._rawDateStrings = [];
+        this._localDates = [];
+        this.localTimes = [];
+        this._animateEnabled = true;
+        this._loaded = true;
+        this._currentTime = undefined;
+        this._currentIndex = undefined;
+
+        let _this = this;
+
+        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, function (d) {
+            if (d.length == 0) {
+                console.log(`${this._products} layer not available or does not have times`);
+
+                return;
+            }
+            d = d[0];
+            for (let i = 0; i < d['times'].length; i++) {
+                _this._loadDates.call(_this, d['times'][i]);
+            }
+            _this.loadCallback.call(_this);
+            _this._loadLatest.call(_this);
+        }, 'json');
+    }
+
+
+    /**
+     *
+     * @returns {boolean} if animation enabled
+     */
+    get animationEnabled(){
+        return this._animateEnabled;
+    }
+
+    /**
+     * Given the raw time string, add to the arrays to keep track of dates and cache
+     * @param {string} inString - input string to parse
+     * @returns {string} the converted string
+     * @protected
+     */
+    _loadDates(inString) {
+        let yr = inString.slice(0, 4);
+        let month = inString.slice(4, 6);
+        let d = inString.slice(6, 8);
+        let hr = inString.slice(9, 11);
+        let mn = inString.slice(11, 13);
+        let sec = inString.slice(13, 15);
+
+        let rawDateStr = inString.replace('.', '_');
+        this._rawDateStrings.push(rawDateStr);
+
+        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;
+        let newDte = new Date(dteStr);
+        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
+        this._localDates.push(newDte);
+        this.localTimes.push(newDte.getTime());
+
+        return rawDateStr;
+    }
+
+    /**
+     *
+     * @protected
+     * @returns {boolean} if should continue
+     */
+    _loadLatest(){
+        mapPopup.closePopup();
+        if (this.localTimes.length > 0){
+            this._currentIndex = this.localTimes.length -1;
+
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     *
+     * @param {number} theTime - the time
+     * @returns {boolean} true if new index, false if the same or below lowest value
+     */
+    setLayerTime(theTime){
+        if (!this.visible){
+            return false;
+        }
+
+        this._currentTime = theTime;
+
+        let newIndex;
+
+        if (theTime < this.localTimes[0]){
+            return false;
+        } else if (theTime > this.localTimes[this.localTimes.length - 1]){
+            newIndex = this.localTimes.length - 1;
+        }
+
+        for (let i = 0; i < this.localTimes.length; i++){
+            if (this.localTimes[i] >= theTime){
+                newIndex = i;
+                break;
+            }
+        }
+
+        if (newIndex == this._currentIndex){
+            return false;
+        } else {
+            this._currentIndex = newIndex;
+            mapPopup.closePopup();
+
+            return true;
+        }
+    }
+}
+
+nm.RealEarthAnimate = RealEarthAnimate;
+export default RealEarthAnimate;
+
diff --git a/src-ts/mixin/RealEarthAnimateTile.js b/src-ts/mixin/RealEarthAnimateTile.js
new file mode 100644
index 0000000..f793f47
--- /dev/null
+++ b/src-ts/mixin/RealEarthAnimateTile.js
@@ -0,0 +1,56 @@
+/**
+ * Created by gavorhes on 12/4/2015.
+ */
+import RealEarthAnimate from './RealEarthAnimate';
+import provide from '../util/provide';
+const nm = provide('mixin');
+
+/**
+ * Animate real earth tile
+ * @augments RealEarthAnimate
+ */
+class RealEarthAnimateTile extends RealEarthAnimate {
+
+    /**
+     * override base layer load
+     */
+    load() {
+        super.load();
+    };
+
+
+    timeInit() {
+        super.timeInit();
+        this._sourceUrls = [];
+    }
+
+    _loadDates(inString) {
+        let rawDte = super._loadDates(inString);
+        let dteProductUrl =
+            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;
+        this._sourceUrls.push(dteProductUrl);
+    }
+
+    /**
+     * @protected
+     */
+    _loadLatest() {
+        if (super._loadLatest()){
+            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
+        }
+    }
+
+    setLayerTime(theTime) {
+        if (super.setLayerTime(theTime)) {
+            if (this.olLayer.getZIndex() < 0){
+                this.olLayer.setZIndex(0);
+            }
+            this._source.setUrl(this._sourceUrls[this._currentIndex]);
+        } else {
+            this.olLayer.setZIndex(-1);
+        }
+    }
+}
+
+nm.RealEarthAnimateTile = RealEarthAnimateTile;
+export default RealEarthAnimateTile;
diff --git a/src-ts/mixin/RealEarthAnimateVector.js b/src-ts/mixin/RealEarthAnimateVector.js
new file mode 100644
index 0000000..9442238
--- /dev/null
+++ b/src-ts/mixin/RealEarthAnimateVector.js
@@ -0,0 +1,103 @@
+/**
+ * Created by gavorhes on 12/4/2015.
+ */
+import RealEarthAnimate from './RealEarthAnimate';
+import provide from '../util/provide';
+const nm = provide('mixin');
+const $ = require('jquery');
+
+
+/**
+ * class mixin to animate RealEarth vector layers
+ * @augments RealEarthAnimate
+ */
+class RealEarthAnimateVector extends RealEarthAnimate {
+
+    /**
+     * override base layer load
+     */
+    load() {
+        super.load();
+    };
+
+    /**
+     * Call this after the mixin has been applied
+     */
+    timeInit() {
+        super.timeInit();
+        this._rawTimesLookup = {};
+        this._dataCache = [];
+    }
+
+    /**
+     * Given the raw time string, add to the arrays to keep track of dates and cache
+     * @param {string} inString - input date string
+     * @protected
+     */
+    _loadDates(inString) {
+        let rawDte = super._loadDates(inString);
+        this._dataCache.push(null);
+        this._rawTimesLookup[rawDte] = null;
+    }
+
+    /**
+     * @protected
+     */
+    _loadLatest() {
+        if(super._loadLatest()){
+            this._loadAtTimeIndex.call(this, this._currentIndex);
+        }
+    }
+    //
+    //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4
+    //
+    //    20160108.205500
+    //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&x=34&y=46&z=7
+
+    /**
+     * Load the features at the date index specified
+     * @param {number} i the index of the features to be loaded by date
+     * @param {boolean} [setAsSource=true] set to false to trigger cache load only
+     * @private
+     */
+    _loadAtTimeIndex(i, setAsSource) {
+        setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
+        if (this._dataCache[i] != null) {
+            this.source.clear();
+            this._loadFeatures(this._dataCache[i]);
+        } else {
+            let _this = this;
+            $.get('http://realearth.ssec.wisc.edu:80/api/shapes',
+                {products: `${this._products}_${this._rawDateStrings[i]}`},
+                function (d) {
+                    _this._dataCache[i] = d;
+                    _this._rawTimesLookup[_this._rawDateStrings[i]] = d;
+                    if (setAsSource) {
+                        _this.source.clear();
+                        _this._loadFeatures.call(_this, _this._dataCache[i]);
+                    }
+                }, 'json'
+            );
+        }
+    }
+
+    /**
+     * helper to load the features at the index specified
+     * @param {object} geojObj - the geojson object
+     * @private
+     */
+    _loadFeatures(geojObj) {
+        this.source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
+    }
+
+    setLayerTime(theTime) {
+        if (super.setLayerTime(theTime)){
+            this._loadAtTimeIndex(this._currentIndex);
+        } else {
+            this.source.clear();
+        }
+    }
+}
+
+nm.RealEarthAnimateVector = RealEarthAnimateVector;
+export default RealEarthAnimateVector;
diff --git a/src-ts/olHelpers/SortedFeatures.js b/src-ts/olHelpers/SortedFeatures.js
new file mode 100644
index 0000000..bba3f45
--- /dev/null
+++ b/src-ts/olHelpers/SortedFeatures.js
@@ -0,0 +1,106 @@
+/**
+ * Created by gavorhes on 12/23/2015.
+ */
+import provide from '../util/provide';
+let nm = provide('olHelpers');
+
+/**
+ * take an array of features and sort by a given property name
+ */
+class SortedFeatures {
+
+    /**
+     *
+     * @param {Array<ol.Feature>} features array of ol features
+     * @param {string} propertyName - the property name to use for lookup
+     */
+    constructor(features, propertyName) {
+        this.sortedFeatures = features;
+        this.propertyName = propertyName;
+
+        if (this.sortedFeatures.length > 0) {
+            this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
+
+            let _this = this;
+            this.sortedFeatures.sort(function (a, b) {
+                if (_this._propertyType == 'number'){
+                    return (a['getProperties']()[_this.propertyName] - b['getProperties']()[_this.propertyName]);
+                } else if (_this._propertyType == 'string'){
+                    return (a['getProperties']()[_this.propertyName] > b['getProperties']()[_this.propertyName]);
+                }
+            });
+        }
+    }
+
+    /**
+     * recursive search to find the value
+     * @param {number|string} propertyValue - the property value to search for
+     * @param {boolean} [exactMatch=false] if only an exact match should be returned
+     * @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
+     * @returns {ol.Feature|undefined} the feature matching the lookup
+     */
+    getFeature(propertyValue, exactMatch, sortedFeatures) {
+        if (typeof sortedFeatures == 'undefined'){
+            sortedFeatures = this.sortedFeatures;
+        }
+
+        if (typeof exactMatch !== 'boolean'){
+            exactMatch = false;
+        }
+
+        if (sortedFeatures.length == 0){
+            return undefined;
+        }
+
+        if (sortedFeatures.length == 1){
+            if (exactMatch){
+                if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue){
+                    return sortedFeatures[0];
+                } else {
+                    return undefined;
+                }
+            } else {
+                return sortedFeatures[0];
+            }
+        }
+
+        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];
+        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
+
+        if (exactMatch){
+            if (lowProp == propertyValue){
+                return sortedFeatures[0];
+            } else if (propertyValue < lowProp){
+                return undefined;
+            } else if (highProp == propertyValue){
+                return sortedFeatures[sortedFeatures.length - 1];
+            } else if (propertyValue >  highProp){
+                return undefined;
+            }
+        } else {
+            if (propertyValue <= lowProp){
+                return sortedFeatures[0];
+            } else if (propertyValue >= highProp){
+                return sortedFeatures[sortedFeatures.length - 1];
+            }
+        }
+
+        let midIndex = Math.floor(sortedFeatures.length / 2);
+        let midFeature = sortedFeatures[midIndex];
+        let midProperty = midFeature.getProperties()[this.propertyName];
+
+        if (midProperty ===  propertyValue){
+            return midFeature;
+        }
+
+        if (propertyValue < midProperty){
+            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));
+        } else {
+            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
+        }
+    }
+}
+
+nm.SortedFeatures = SortedFeatures;
+export default SortedFeatures;
+
diff --git a/doc/olHelpers_esriToOlStyle.js.html b/src-ts/olHelpers/esriToOlStyle.ts
similarity index 53%
rename from doc/olHelpers_esriToOlStyle.js.html
rename to src-ts/olHelpers/esriToOlStyle.ts
index 76697bb..d8e917d 100644
--- a/doc/olHelpers_esriToOlStyle.js.html
+++ b/src-ts/olHelpers/esriToOlStyle.ts
@@ -1,36 +1,8 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/esriToOlStyle.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/esriToOlStyle.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
+/**
  * Created by gavorhes on 1/4/2016.
  */
 import provide from '../util/provide';
-import ol from '../ol/ol';
+import {ol} from 'custom-ol';
 const nm = provide('olHelpers.esriToOlStyle');
 
 /**
@@ -42,7 +14,7 @@ const nm = provide('olHelpers.esriToOlStyle');
 
 /**
  *
- * @param {Array&lt;number>} colorArray - input color array
+ * @param {Array<number>} colorArray - input color array
  * @param {number} opacity - the opacity 0 to 1
  * @returns {string} rgba string
  * @private
@@ -60,24 +32,53 @@ function _colorArrayToRgba(colorArray, opacity) {
  */
 function htmlEscape(str) {
     return String(str)
-        .replace(/&amp;/g, '&amp;amp;')
-        .replace(/"/g, '&amp;quot;')
-        .replace(/'/g, '&amp;#39;')
-        .replace(/&lt;/g, '&amp;lt;')
-        .replace(/>/g, '&amp;gt;');
+        .replace(/&/g, '&amp;')
+        .replace(/"/g, '&quot;')
+        .replace(/'/g, '&#39;')
+        .replace(/</g, '&lt;')
+        .replace(/>/g, '&gt;');
 }
 
 nm.htmlEscape = htmlEscape;
 
 
+export interface EsriResponse{
+    drawingInfo: {
+        renderer: EsriRenderer
+    },
+    geometryType: string
+}
+
+export interface EsriRenderer{
+    type: string;
+    symbol: EsriSymbol;
+    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;
+}
+
+export interface EsriSymbol{
+    size: number;
+    type: string;
+    outline:{
+        color: string;
+        width: number;
+    },
+    color: string;
+    width: number;
+}
+
+
 class CommonSymbol {
+    legendHtml: string;
+    opacity: number;
+    symbolObj: EsriSymbol;
+    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;
 
     /**
-     * 
+     *
      * @param symbolObj
      * @param {number} opacity
      */
-    constructor(symbolObj, opacity) {
+    constructor(symbolObj: EsriSymbol, opacity: number) {
         this.symbolObj = symbolObj;
         this.opacity = opacity;
         this.olStyle = undefined;
@@ -85,10 +86,15 @@ class CommonSymbol {
     }
 }
 
+interface ICommonSymbol{
+    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol
+}
+
+
 class PointSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
+    constructor(symbolObj: EsriSymbol, opacity: number) {
         super(symbolObj, opacity);
-        switch (this.symbolObj['type']) {
+        switch (this.symbolObj.type) {
             case 'esriSMS':
                 let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
                 let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
@@ -105,13 +111,13 @@ class PointSymbol extends CommonSymbol {
                         stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})
                     })
                 });
-                this.legendHtml = `&lt;span class="legend-layer-icon" style="color: ${innerColor}">&amp;#9679;&lt;/span>`;
+                this.legendHtml = `<span class="legend-layer-icon" style="color: ${innerColor}">&#9679;</span>`;
                 break;
             case 'esriPMS':
                 this.olStyle = new ol.style.Style({
                     image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})
                 });
-                this.legendHtml = `&lt;img class="legend-layer-icon" height="17" src="data:image/png;base64,${this.symbolObj['imageData']}">`;
+                this.legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${this.symbolObj['imageData']}">`;
                 break;
             default:
                 console.log(this.symbolObj);
@@ -121,9 +127,9 @@ class PointSymbol extends CommonSymbol {
 }
 
 class LineSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
+    constructor(symbolObj: EsriSymbol, opacity: number) {
         super(symbolObj, opacity);
-        switch (this.symbolObj['type']) {
+        switch (this.symbolObj.type) {
             case 'esriSLS':
                 let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
                 let lineWidth = this.symbolObj.width;
@@ -136,7 +142,7 @@ class LineSymbol extends CommonSymbol {
                     })
                 });
 
-                this.legendHtml = `&lt;span class="legend-layer-icon" `;
+                this.legendHtml = `<span class="legend-layer-icon" `;
                 this.legendHtml += `style="`;
                 this.legendHtml += `background-color: ${innerColor};`;
                 this.legendHtml += `width: 40px;`;
@@ -144,7 +150,7 @@ class LineSymbol extends CommonSymbol {
                 this.legendHtml += `position: relative;`;
                 this.legendHtml += `display: inline-block;`;
                 this.legendHtml += `top: -1px;`;
-                this.legendHtml += `">&lt;/span>`;
+                this.legendHtml += `"></span>`;
                 break;
             default:
                 console.log(this.symbolObj);
@@ -154,7 +160,7 @@ class LineSymbol extends CommonSymbol {
 }
 
 class PolygonSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
+    constructor(symbolObj: EsriSymbol, opacity: number) {
         super(symbolObj, opacity);
         switch (this.symbolObj['type']) {
             case 'esriSFS':
@@ -173,7 +179,7 @@ class PolygonSymbol extends CommonSymbol {
                     })
                 });
 
-                this.legendHtml = `&lt;span class="legend-layer-icon" `;
+                this.legendHtml = `<span class="legend-layer-icon" `;
                 this.legendHtml += `style="`;
                 this.legendHtml += `background-color: ${innerColor};`;
                 this.legendHtml += `border: solid ${outerColor} 1px;`;
@@ -182,7 +188,7 @@ class PolygonSymbol extends CommonSymbol {
                 this.legendHtml += `position: relative;`;
                 this.legendHtml += `display: inline-block;`;
                 this.legendHtml += `top: 2px;`;
-                this.legendHtml += `">&lt;/span>`;
+                this.legendHtml += `"></span>`;
                 break;
 
             default:
@@ -193,23 +199,29 @@ class PolygonSymbol extends CommonSymbol {
 }
 
 class SymbolGenerator {
-    constructor(esriResponse) {
+    opacity: number;
+    renderer: EsriRenderer;
+    legendHtml: string;
+    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;
+
+    constructor(esriResponse: EsriResponse) {
         this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-        this.renderer = esriResponse['drawingInfo']['renderer'];
+        this.renderer = esriResponse.drawingInfo.renderer;
         this.olStyle = undefined;
         this.legendHtml = '';
     }
 }
 
 class SingleSymbol extends SymbolGenerator {
+    symbol: EsriSymbol;
     /**
      *
      * @param {object} esriResponse - layer info
      * @param {Constructor|*} SymbolClass - the symbol class to use
      */
-    constructor(esriResponse, SymbolClass) {
+    constructor(esriResponse, SymbolClass: ICommonSymbol) {
         super(esriResponse);
-        this.symbol = this.renderer['symbol'];
+        this.symbol = this.renderer.symbol;
         let symbolObj = new SymbolClass(this.symbol, this.opacity);
         this.olStyle = symbolObj.olStyle;
         this.legendHtml = symbolObj.legendHtml;
@@ -217,12 +229,23 @@ class SingleSymbol extends SymbolGenerator {
 }
 
 class UniqueValueSymbol extends SymbolGenerator {
+
+    propertyName: string;
+    defaultSymbol: EsriSymbol;
+    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;
+    defaultLabelHtml: string;
+    labelArray: Array<string>;
+    legendArray: Array<string>;
+    propertyStyleLookup: Object;
+    valueArray: Array<any>;
+    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;
+
     /**
      *
      * @param {object} esriResponse - layer info
      * @param {Constructor|*} SymbolClass - the Symbol class definition
      */
-    constructor(esriResponse, SymbolClass) {
+    constructor(esriResponse: EsriResponse, SymbolClass) {
         super(esriResponse);
         this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
         this.propertyName = this.renderer['field1'];
@@ -232,7 +255,7 @@ class UniqueValueSymbol extends SymbolGenerator {
         if (this.defaultSymbol) {
             let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
             this.defaultStyle = symbolObj.olStyle;
-            this.defaultLabelHtml = `&lt;span class="legend-layer-subitem">${htmlEscape(this.renderer['defaultLabel'])}&lt;/span>` + symbolObj.legendHtml;
+            this.defaultLabelHtml = `<span class="legend-layer-subitem">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;
         } else {
             this.defaultStyle = undefined;
             this.defaultLabelHtml = 'other';
@@ -247,21 +270,20 @@ class UniqueValueSymbol extends SymbolGenerator {
             this.labelArray.push(uniqueVal['label']);
             this.valueArray.push(uniqueVal['value']);
             let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
-            this.legendArray.push(`&lt;span class="legend-layer-subitem">${htmlEscape(uniqueVal['label'])}&lt;/span>` + uniqueSym.legendHtml);
+            this.legendArray.push(`<span class="legend-layer-subitem">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);
             this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
         }
 
-        let _this = this;
 
-        this.olStyle = function (feature, resolution) {
+        this.olStyle = (feature: ol.Feature) => {
             let checkProperties = feature.getProperties();
-            let checkProperty = checkProperties[_this.propertyName];
+            let checkProperty = checkProperties[this.propertyName];
 
             let returnValue;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
+            if (this.propertyStyleLookup[checkProperty] !== undefined) {
+                returnValue = [this.propertyStyleLookup[checkProperty]];
             } else {
-               returnValue = [_this.defaultStyle];
+               returnValue = [this.defaultStyle];
             }
 
             return returnValue;
@@ -271,11 +293,11 @@ class UniqueValueSymbol extends SymbolGenerator {
             this.legendArray.push(this.defaultLabelHtml);
         }
 
-        this.legendHtml = '&lt;ul>';
+        this.legendHtml = '<ul>';
         for (let h of this.legendArray) {
-            this.legendHtml += `&lt;li>${h}&lt;/li>`;
+            this.legendHtml += `<li>${h}</li>`;
         }
-        this.legendHtml += '&lt;/ul>';
+        this.legendHtml += '</ul>';
     }
 }
 
@@ -283,6 +305,9 @@ class UniqueValueSymbol extends SymbolGenerator {
 
 
 
+
+
+
 /**
  * style and legend object
  * @typedef {object} styleAndLegend
@@ -295,14 +320,14 @@ class UniqueValueSymbol extends SymbolGenerator {
  * @param {object} esriResponse - layer info
  * @returns {styleAndLegend} style and legend object
  */
-export function makeFeatureServiceLegendAndSymbol(esriResponse) {
+export function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {
     "use strict";
-    let renderer = esriResponse['drawingInfo']['renderer'];
-    let symbolLegendOut = null;
+    let renderer = esriResponse.drawingInfo.renderer;
+    let symbolLegendOut: SymbolGenerator = null;
 
-    switch (renderer['type']) {
+    switch (renderer.type) {
         case 'simple':
-            switch (esriResponse['geometryType']) {
+            switch (esriResponse.geometryType) {
                 case 'esriGeometryPoint':
                     symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
                     break;
@@ -314,11 +339,11 @@ export function makeFeatureServiceLegendAndSymbol(esriResponse) {
                     break;
                 default:
                     console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
+                    alert(esriResponse.geometryType + ' not handled');
             }
             break;
         case 'uniqueValue':
-            switch (esriResponse['geometryType']) {
+            switch (esriResponse.geometryType) {
                 case 'esriGeometryPoint':
                     symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
                     break;
@@ -352,7 +377,7 @@ nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
  * @param {boolean} [iconsOnly=false] use only icons
  * @returns {string} legend html
  */
-function mapServiceLegendItem(lyrObject, iconsOnly) {
+function mapServiceLegendItem(lyrObject, iconsOnly: boolean = false) {
 
 
     iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
@@ -361,20 +386,20 @@ function mapServiceLegendItem(lyrObject, iconsOnly) {
     let legendHtml = '';
 
     if (legendItems.length == 1) {
-        legendHtml = `&lt;img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[0]['imageData']}">`;
+        legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[0]['imageData']}">`;
     } else {
-        legendHtml += '&lt;span class="legend-items-expander" title="Expand/Collapse">&amp;#9660;&lt;/span>&lt;ul>';
-        for (let i = 0; i &lt; legendItems.length; i++) {
-            legendHtml += `&lt;li>`;
-            legendHtml += `&lt;span class="legend-layer-subitem">${htmlEscape(legendItems[i]['label'])}&lt;/span>`;
-            legendHtml += `&lt;img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[i]['imageData']}">`;
-            legendHtml += `&lt;/li>`;
+        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
+        for (let i = 0; i < legendItems.length; i++) {
+            legendHtml += `<li>`;
+            legendHtml += `<span class="legend-layer-subitem">${htmlEscape(legendItems[i]['label'])}</span>`;
+            legendHtml += `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[i]['imageData']}">`;
+            legendHtml += `</li>`;
         }
-        legendHtml += '&lt;/ul>';
+        legendHtml += '</ul>';
     }
 
     if (!iconsOnly) {
-        legendHtml = `&lt;span class="legend-layer-subitem">${layerName}&lt;/span>` + legendHtml;
+        legendHtml = `<span class="legend-layer-subitem">${layerName}</span>` + legendHtml;
     }
 
     return legendHtml;
@@ -395,37 +420,14 @@ export function makeMapServiceLegend(esriResponse) {
     if (layers.length == 1) {
         newLegendHtml += mapServiceLegendItem(layers[0], true);
     } else {
-        newLegendHtml += '&lt;ul>';
-        for (let i = 0; i &lt; layers.length; i++) {
-            newLegendHtml += '&lt;li>' + mapServiceLegendItem(layers[i]) + '&lt;/li>';
+        newLegendHtml += '<ul>';
+        for (let i = 0; i < layers.length; i++) {
+            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
         }
-        newLegendHtml += '&lt;/ul>';
+        newLegendHtml += '</ul>';
     }
 
     return newLegendHtml;
 }
 
 nm.makeMapServiceLegend = makeMapServiceLegend;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/olHelpers/extentUtil.ts b/src-ts/olHelpers/extentUtil.ts
new file mode 100644
index 0000000..36f9bc6
--- /dev/null
+++ b/src-ts/olHelpers/extentUtil.ts
@@ -0,0 +1,85 @@
+/**
+ * Created by gavorhes on 7/18/2016.
+ */
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+
+
+const nm = provide('util');
+
+/**
+ *
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
+ * @returns {ol.Extent|Array<number>|*} - collective extent
+ */
+export function calculateExtent(layers): ol.Extent|Array<number> {
+    "use strict";
+
+    if (layers.constructor.name != 'Array'){
+        layers = [layers];
+    }
+
+    let hasExtent = false;
+
+    let minX = 10E100;
+    let minY = 10E100;
+    let maxX = -10E100;
+    let maxY = -10E100;
+
+    for (let lyr of layers) {
+
+        /**
+         * 
+         * @type {ol.layer.Vector}
+         */
+        let olLayer = lyr['olLayer'] || lyr;
+        
+        
+        if (olLayer.getSource().getFeatures().length > 0) {
+            hasExtent = true;
+            let ext = olLayer.getSource().getExtent();
+            minX = ext[0] < minX ? ext[0] : minX;
+            minY = ext[1] < minY ? ext[1] : minY;
+            maxX = ext[2] > maxX ? ext[2] : maxX;
+            maxY = ext[3] > maxY ? ext[3] : maxY;
+        }
+    }
+
+    if (hasExtent) {
+        return [minX, minY, maxX, maxY];
+    } else {
+        return undefined;
+    }
+}
+
+nm.calculateExtent = calculateExtent;
+ 
+
+/**
+ * given one or an array of layers, fit to the map
+ * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector} layers - array of layers or single
+ * @param {ol.Map} mp - the map to fit
+ * @param {number|undefined} [zoomOut=undefined] - levels to zoom out after fit
+ */
+export function fitToMap(layers, mp: ol.Map, zoomOut?: number){
+    "use strict";
+
+    /**
+     * 
+     * @type {ol.Extent|undefined}
+     */
+    let ext = calculateExtent(layers);
+    
+    if (typeof ext == 'undefined'){
+        return;
+    }
+    
+    mp.getView().fit(ext, mp.getSize());
+    
+    if (typeof zoomOut == 'number'){
+        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);
+    }
+    
+}
+
+nm.calculateExtent = calculateExtent;
diff --git a/src-ts/olHelpers/layerSwipe.ts b/src-ts/olHelpers/layerSwipe.ts
new file mode 100644
index 0000000..3308682
--- /dev/null
+++ b/src-ts/olHelpers/layerSwipe.ts
@@ -0,0 +1,160 @@
+/**
+ * Created by gavorhes on 6/1/2016.
+ */
+
+
+import provide from '../util/provide';
+import {LayerBase} from "../layers/LayerBase";
+const $ = require('jquery');
+import {ol} from 'custom-ol';
+
+let nm = provide('collections.layerSwipe');
+
+
+class LayerSwipe {
+    leftLayers: Array<LayerBase>;
+    rightLayers: Array<LayerBase>;
+    _percentRight: number;
+    _map: ol.Map;
+    $mapElement: JQuery;
+    $swiper: JQuery;
+    dragging: boolean;
+    offset: number;
+    /**
+     *
+     * @param {ol.Map} map - the map
+     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
+     */
+    constructor(map: ol.Map, sliderContent: string = '') {
+
+        sliderContent = sliderContent || '';
+        /**
+         *
+         * @type {Array<LayerBase>}
+         */
+        this.leftLayers = [];
+
+        /**
+         *
+         * @type {Array<LayerBase>}
+         */
+        this.rightLayers = [];
+
+        this._percentRight = 50;
+        this.offset = null;
+
+        this._map = map;
+        this.$mapElement = $(map.getTargetElement());
+        this.$mapElement.append(`<div class="layer-swiper">${sliderContent}</div>`);
+
+
+        this.$swiper = this.$mapElement.find('.layer-swiper');
+        this.percentRight = this.percentRight;
+
+        this.dragging = false;
+
+        this.$mapElement.mouseleave(() => {
+            this.dragging = false;
+        });
+
+        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){
+            evt.preventDefault();
+        });
+
+        this.$swiper.mousedown((evt) => {
+            this.dragging = true;
+            this.offset = evt.offsetX;
+        });
+
+        $(window).mouseup(() => {
+            this.dragging = false;
+        });
+
+        this.$mapElement.mousemove((evt) => {
+            if (this.dragging) {
+                let mapLeft = this.$mapElement.position().left;
+                let mapWidth = this.$mapElement.width();
+
+                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;
+            }
+        });
+    }
+
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to left side
+     */
+    addLeftLayer(lyr) {
+
+        if (this.leftLayers.indexOf(lyr) != -1){
+            return;
+        }
+
+        lyr.olLayer.on('precompose', (event) => {
+            let ctx = event['context'];
+            let width = ctx.canvas.width * (this.percentRight / 100);
+
+            ctx.save();
+            ctx.beginPath();
+            ctx.rect(0, 0, width, ctx.canvas.height);
+            ctx.clip();
+        });
+
+        lyr.olLayer.on('postcompose', function (event) {
+            let ctx = event['context'];
+            ctx.restore();
+        });
+
+
+        this.leftLayers.push(lyr);
+    }
+
+    /**
+     *
+     * @param {LayerBase|*} lyr - layer to be added to right side
+     */
+    addRightLayer(lyr) {
+
+        if (this.rightLayers.indexOf(lyr) != -1){
+            return;
+        }
+
+        lyr.olLayer.on('precompose', (event) => {
+            let ctx = event['context'];
+            let width = ctx.canvas.width * (this.percentRight / 100);
+
+            ctx.save();
+            ctx.beginPath();
+            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
+            ctx.clip();
+        });
+
+        lyr.olLayer.on('postcompose', function (event) {
+            let ctx = event['context'];
+            ctx.restore();
+        });
+
+        this.rightLayers.push(lyr);
+    }
+
+    get percentRight() : number{
+        return this._percentRight;
+    }
+
+    set percentRight(percent: number) {
+        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
+
+        if (percent < 0) {
+            return;
+        } else if (maxed && percent > this.percentRight) {
+            return;
+        }
+
+        this._percentRight = percent;
+        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);
+        this._map.render();
+    }
+}
+
+nm.LayerSwipe = LayerSwipe;
+export default LayerSwipe;
diff --git a/src-ts/olHelpers/mapInteractionBase.ts b/src-ts/olHelpers/mapInteractionBase.ts
new file mode 100644
index 0000000..219f690
--- /dev/null
+++ b/src-ts/olHelpers/mapInteractionBase.ts
@@ -0,0 +1,78 @@
+/**
+ * Created by gavorhes on 12/8/2015.
+ */
+import provide from '../util/provide';
+import {ol} from 'custom-ol';
+const nm = provide('olHelpers');
+
+
+
+/**
+ * base interaction
+ */
+export class MapInteractionBase {
+    _map: ol.Map;
+    _initialized: boolean;
+    _subtype: string;
+
+    /**
+     * map interaction base
+     * @param subtype - the interaction subtype
+     */
+    constructor(subtype: string) {
+        this._map = null;
+        this._initialized = false;
+        this._subtype = subtype;
+    }
+
+    /**
+     * base initializer, returns true for already initialized
+     * @param theMap - the ol Map
+     * @returns true for already initialized
+     */
+    init(theMap: ol.Map){
+        if (!this._initialized){
+            this._map = theMap;
+            this._initialized = true;
+        }
+    }
+
+    /**
+     * get reference to the ol map object
+     * @returns {ol.Map} the map object
+     */
+    get map() {
+        return this._map;
+    }
+
+    /**
+     * get if is initialized
+     * @returns {boolean} is initialized
+     */
+    get initialized() {
+        return this._initialized;
+    }
+
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     * @protected
+     */
+    _checkInit() {
+        if (!this.initialized) {
+            let msg = `${this._subtype} object not initialized`;
+            alert(msg);
+            console.log(msg);
+            throw msg;
+        }
+    }
+
+    /**
+     * Check the initialization status and throw exception if not valid yet
+     */
+    checkInit(){
+        this._checkInit();
+    }
+}
+
+nm.MapInteractionBase = MapInteractionBase;
+export default MapInteractionBase;
diff --git a/src-ts/olHelpers/mapMove.ts b/src-ts/olHelpers/mapMove.ts
new file mode 100644
index 0000000..26f4b48
--- /dev/null
+++ b/src-ts/olHelpers/mapMove.ts
@@ -0,0 +1,11 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+import MapMoveCls from './mapMoveCls';
+
+/**
+ * The single map move object catch is that it is common to multimap pages
+ * @type {MapMoveCls}
+ */
+export default new MapMoveCls();
diff --git a/src-ts/olHelpers/mapMoveCls.ts b/src-ts/olHelpers/mapMoveCls.ts
new file mode 100644
index 0000000..cf7d5c5
--- /dev/null
+++ b/src-ts/olHelpers/mapMoveCls.ts
@@ -0,0 +1,290 @@
+///// /// <reference path="../../definitions/openlayers.d.ts"/>
+import LayerBaseVector from "../layers/LayerBaseVector";
+import MapInteractionBase from './mapInteractionBase';
+import * as checkDefined from '../util/checkDefined';
+import provide from '../util/provide';
+import makeGuid from '../util/makeGuid';
+import {ol} from 'custom-ol'
+import {extentObject} from '../_internalnterfaces'
+import Timer = NodeJS.Timer;
+const $ = require('jquery');
+const nm = provide('olHelpers');
+
+
+export interface mapMoveCallbackFunction{
+    /**
+     *
+     * @param extent extent as predefined object minX, minX, maxX, maxY
+     * @param zoomLevel current zoom level
+     * @param evtType the event type 'change:center', 'change:resolution'
+     */
+    (extent: extentObject, zoomLevel: number, evtType?: string): any
+}
+
+
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+export class MapMoveCls extends MapInteractionBase {
+    _mapExtent: extentObject;
+    _zoomLevel: number;
+    _lookupLayer: Object;
+    _arrLayer: Array<LayerBaseVector>;
+    _arrLyrTimeout: Array<Timer>;
+    _mapMoveCallbackTimeout: Array<Timer>;
+    _mapMoveCallbackDelays: Array<number>;
+    _mapMoveCallbacksLookup: Object;
+    _mapMoveCallbackContext: Array<Object>;
+    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;
+    _arrLyrRequest: Array<any>;
+
+    /**
+     * constructor called implicitly
+     */
+    constructor() {
+        super('map move');
+        this._arrLyrRequest = [];
+        this._arrLyrTimeout = [];
+        this._arrLayer = [];
+        this._lookupLayer = {};
+
+        this._mapMoveCallbacks = [];
+        this._mapMoveCallbacksLookup = {};
+        this._mapMoveCallbackDelays = [];
+        this._mapMoveCallbackContext = [];
+        this._mapMoveCallbackTimeout = [];
+
+        this._mapExtent = undefined;
+        this._zoomLevel = undefined;
+
+    }
+
+    /**
+     * initialize the map move object
+     * @param theMap - the ol map
+     */
+    init(theMap: ol.Map){
+        super.init(theMap);
+
+        this.map.getView().on(['change:center', 'change:resolution'], (e) =>{
+
+           this._updateMapExtent();
+
+            // trigger the layer updates
+            for (let i = 0; i < this._arrLayer.length; i++) {
+                this.triggerLyrLoad(this._arrLayer[i], i, e.type);
+            }
+
+            // trigger the map callbacks
+            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {
+                this.triggerMoveCallback(i, e.type);
+            }
+        });
+    }
+
+    _updateMapExtent() {
+        let theView = this.map.getView();
+        this._zoomLevel = theView.getZoom();
+
+        let extentArray = theView.calculateExtent(this.map.getSize());
+
+        this._mapExtent = {
+            minX: extentArray[0],
+            minY: extentArray[1],
+            maxX: extentArray[2],
+            maxY: extentArray[3]
+        };
+    }
+
+    /**
+     * return the map extent
+     */
+    get mapExtent() {
+        if (!this._mapExtent) {
+            this._updateMapExtent();
+        }
+
+        return this._mapExtent;
+    }
+
+    /**
+     * Trigger the layer load
+     * @param lyr the layer being acted on
+     * @param index index of the layer
+     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+     */
+    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {
+
+        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            throw 'need to define lyr or index';
+        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
+            index = this._arrLayer.indexOf(lyr);
+        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
+            lyr = this._arrLayer[index];
+        }
+
+        // clear the timeout
+        if (this._arrLyrTimeout[index] != null) {
+            clearTimeout(this._arrLyrTimeout[index]);
+            this._arrLyrTimeout[index] = null;
+        }
+
+        // abort if necessary and clear the request
+        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
+            this._arrLyrRequest[index].abort();
+            this._arrLyrRequest[index] = null;
+        }
+
+        // dummy callback used if before load returns false
+        let callbackFunc = function () {};
+
+        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+
+            let _this = this;
+
+            callbackFunc = function () {
+                function innerFunction(theLayer, theIndex) {
+                    let _innerThis = this;
+                    this._arrLyrRequest[theIndex] = $.get(
+                        theLayer.url,
+                        theLayer.mapMoveParams,
+                        function (d) {
+                            /**
+                             * @type {LayerBaseVector}
+                             */
+                            theLayer.mapMoveCallback(d);
+                            theLayer.loadCallback();
+                        }, 'json').fail(
+                        function (jqXHR) {
+                            if (jqXHR.statusText != 'abort') {
+                                console.log('failed');
+                                console.log(theLayer.url);
+                                console.log(theLayer.mapMoveParams);
+                            }
+                        }).always(
+                        function () {
+                            _innerThis._arrLyrTimeout[theIndex] = null;
+                            _innerThis._arrLyrRequest[theIndex] = null;
+                        });
+                }
+                innerFunction.call(_this, lyr, index);
+            };
+        } else {
+            lyr.clear();
+        }
+        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+    }
+
+    /**
+     * trigger the map move call back at the given index
+     * @param ind - the index of the layer
+     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+     * @param functionId=undefined the function id used to reference the added callback function
+     */
+    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {
+
+        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){
+            throw 'either the function index or the id must be defined';
+        }
+
+        if (typeof ind !== 'number'){
+            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
+        }
+
+        if (ind < 0){
+            console.log('function not found');
+
+            return;
+        }
+
+        // clear the timeout
+        if (this._mapMoveCallbackTimeout[ind] != null) {
+            clearTimeout(this._mapMoveCallbackTimeout[ind]);
+            this._mapMoveCallbackTimeout[ind] = null;
+        }
+
+        let ctx = this._mapMoveCallbackContext[ind];
+        let theFunc = this._mapMoveCallbacks[ind];
+
+        let _this = this;
+
+        let f = function () {
+            if (ctx !== null) {
+                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
+            } else {
+                theFunc(_this._mapExtent, _this._zoomLevel, eventType);
+            }
+        };
+
+        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
+    }
+
+    /**
+     * Add a layer to the interaction
+     * @param  lyr - layer to add
+     * @param triggerOnAdd - if the layer should be loaded on add
+     */
+    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {
+        if (this._arrLayer.indexOf(lyr) > -1) {
+            console.log('already added ' + lyr.name + ' to map move');
+
+            return;
+        }
+        this._checkInit();
+
+        this._arrLyrRequest.push(null);
+        this._arrLyrTimeout.push(null);
+        this._arrLayer.push(lyr);
+        this._lookupLayer[lyr.id] = lyr;
+
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
+        }
+    }
+
+
+    /**
+     * add a callback to the map move event
+     * @param func - callback function
+     * @param context - the context to use for this function
+     * @param delay=50 the delay before call load
+     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+     * @param functionId optional id to reference the function later for outside triggering
+     */
+    addCallback(func: mapMoveCallbackFunction, context: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {
+
+        if (this._mapMoveCallbacks.indexOf(func) > -1) {
+            console.log('this function already added to map move');
+            return;
+        }
+        this._checkInit();
+        if (!functionId){
+            functionId = makeGuid();
+        }
+
+        this._mapMoveCallbacks.push(func);
+        this._mapMoveCallbacksLookup[functionId] = functionId;
+        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
+        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
+        this._mapMoveCallbackTimeout.push(null);
+
+        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+        if (triggerOnAdd) {
+            if (this._mapExtent === undefined) {
+                this._updateMapExtent();
+            }
+            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
+        }
+    }
+}
+
+nm.MapMoveCls = MapMoveCls;
+export default MapMoveCls;
diff --git a/src-ts/olHelpers/mapPopup.ts b/src-ts/olHelpers/mapPopup.ts
new file mode 100644
index 0000000..284e265
--- /dev/null
+++ b/src-ts/olHelpers/mapPopup.ts
@@ -0,0 +1,11 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+import MapPopupCls from './mapPopupCls';
+
+/**
+ * The single popup object catch is that it is common to multimap pages
+ * @type {MapPopupCls}
+ */
+export default new MapPopupCls();
diff --git a/doc/olHelpers_mapPopupCls.js.html b/src-ts/olHelpers/mapPopupCls.ts
similarity index 56%
rename from doc/olHelpers_mapPopupCls.js.html
rename to src-ts/olHelpers/mapPopupCls.ts
index d027920..f180716 100644
--- a/doc/olHelpers_mapPopupCls.js.html
+++ b/src-ts/olHelpers/mapPopupCls.ts
@@ -1,56 +1,62 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/mapPopupCls.js</title>
+/// <reference path="../../definitions/jquery.d.ts"/>
 
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/mapPopupCls.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>/**
+/**
  * Created by gavorhes on 11/3/2015.
  */
 
-import $ from '../jquery/jquery';
 import MapInteractionBase from './mapInteractionBase';
 import propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';
 import provide from '../util/provide';
-import ol from '../ol/ol';
-
+import {ol} from 'custom-ol';
+import {LayerBaseVector} from "../layers/LayerBaseVector";
+import LayerEsriMapServer from "../layers/LayerEsriMapServer";
+import MapEvent = ol.MapEvent;
+const $ = require('jquery');
 
 const nm = provide('olHelpers');
 
+export interface popupChangedFunction{
+    ($popContent: JQuery): any;
+}
+
+/**
+ *
+ */
+export interface popupCallback{
+    /**
+     * Callback function for the popup
+     * @param featureProperties
+     * @param jqRef
+     */
+    (featureProperties: Object, jqRef: JQuery): string | boolean;
+}
+
+interface mapEvent{
+    coordinate: ol.Coordinate;
+    pixel: ol.Pixel;
+    dragging: boolean|any;
+    originalEvent: Event;
+}
 
-class _FeatureLayerProperties {
+
+export class FeatureLayerProperties {
+
+    feature: ol.Feature;
+    layer: LayerEsriMapServer;
+    layerIndex: number;
+    selectionLayer: ol.layer.Vector;
+    popupContent: string;
+    esriLayerName: string;
 
     /**
      *
-     * @param {ol.Feature} feature the feature
-     * @param {LayerBaseVector|*} layer - the layer in the popup
-     * @param {number} layerIndex - index of the layer
-     * @param {ol.layer.Vector} selectionLayer - the ol selection layer
-     * @param {string} [esriLayerName=undefined] - esri layer name
+     * @param feature the feature
+     * @param layer - the layer in the popup
+     * @param layerIndex - index of the layer
+     * @param selectionLayer - the ol selection layer
+     * @param [esriLayerName=undefined] - esri layer name
      */
-    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+    constructor(feature: ol.Feature, layer: LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {
         this.feature = feature;
         this.layer = layer;
         this.layerIndex = layerIndex;
@@ -73,19 +79,34 @@ class _FeatureLayerProperties {
  * @augments MapInteractionBase
  */
 class MapPopupCls extends MapInteractionBase {
+    _popupOpen: boolean;
+    _passThroughLayerFeatureArray:  Array<FeatureLayerProperties>;
+    _currentPopupIndex: number;
+    _popupContentLength: number;
+    _esriMapServiceLayers: Array<LayerEsriMapServer>;
+    _$popupCloser: JQuery;
+    _$popupContent: JQuery;
+    _$popupContainer: JQuery;
+    _popupOverlay: ol.Overlay;
+    _arrPopupLayers: Array<LayerBaseVector>;
+    _popupCoordinate: ol.Coordinate;
+    _popupChangedFunctions: Array<popupChangedFunction>;
+     _mapClickFunctions: Array<Function>;
+    _selectionLayerLookup: Object;
+     _arrPopupLayerIds: Array<string>;
+     _arrPopupLayerNames: Array<string>;
+    _arrPopupOlLayers: Array<ol.layer.Vector>;
+    _arrPopupContentFunction: Array<popupCallback>;
+    _selectionLayers: Array<ol.layer.Vector>;
 
     /**
      * Definition for openlayers style function
      * @callback olStyleFunction
-     * &amp;param feature the openlayers vector feature
+     * &param feature the openlayers vector feature
      * $param
      */
 
-    /**
-     * Definition for popup changed callback functions
-     * @callback popupChangedFunction
-     * @param $popContent jquery reference to the popup content
-     */
+
 
     /**
      * map popup constructor
@@ -94,11 +115,6 @@ class MapPopupCls extends MapInteractionBase {
         super('map popup');
         this._arrPopupLayerIds = [];
         this._arrPopupLayerNames = [];
-        /**
-         *
-         * @type {Array&lt;LayerBaseVector>}
-         * @private
-         */
         this._arrPopupLayers = [];
         this._arrPopupOlLayers = [];
         this._arrPopupContentFunction = [];
@@ -113,20 +129,11 @@ class MapPopupCls extends MapInteractionBase {
         //let a = function($jqueryContent){console.log($jqueryContent)};
         //this._popupChangedLookup = {'a': a};
         this._popupChangedFunctions = [];
-        /**
-         *
-         * @type {Array&lt;LayerEsriMapServer>}
-         * @private
-         */
         this._esriMapServiceLayers = [];
 
         this._popupOpen = false;
         this._popupCoordinate = null;
 
-        /**
-         *
-         * @type {Array.&lt;_FeatureLayerProperties>}
-         */
         this._passThroughLayerFeatureArray = [];
 
         this._currentPopupIndex = -1;
@@ -138,30 +145,36 @@ class MapPopupCls extends MapInteractionBase {
      * map popup initialization
      * @param {ol.Map} theMap - the ol map
      */
-    init(theMap) {
-        if (super.init(theMap)) {
-            return;
+    init(theMap: ol.Map) {
+        super.init(theMap);
+
+        let $map;
+        let target = this.map.getTarget();
+
+        if(typeof target == 'string'){
+            $map = $('#' + target);
+        }
+        else {
+            $map = $(target);
         }
-        let $map = $('#' + this.map.getTarget());
 
         $map.append(
-            '&lt;div class="ol-popup">' +
-            '&lt;span class="ol-popup-closer">X&lt;/span>' +
-            '&lt;div class="popup-content">&lt;/div>' +
-            '&lt;/div>'
+            '<div class="ol-popup">' +
+            '<span class="ol-popup-closer">X</span>' +
+            '<div class="popup-content"></div>' +
+            '</div>'
         );
 
         this._$popupContainer = $map.find('.ol-popup');
         this._$popupContent = $map.find('.popup-content');
         this._$popupCloser = $map.find('.ol-popup-closer');
 
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
+
+        this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,
             autoPanAnimation: {
-                duration: 250
-            }
-        });
+                duration: 250,
+                source: theMap.getView().getCenter()
+            }});
 
         this._map.addOverlay(this._popupOverlay);
 
@@ -172,11 +185,11 @@ class MapPopupCls extends MapInteractionBase {
         // display popup on click
         this._map.on('singleclick', (evt) => {
             this.closePopup();
-            this._popupCoordinate = evt.coordinate;
+            this._popupCoordinate = evt['coordinate'];
 
             if (this._esriMapServiceLayers.length > 0) {
                 let queryParams = {
-                    geometry: evt.coordinate.join(','),
+                    geometry: evt['coordinate'].join(','),
                     geometryType: 'esriGeometryPoint',
                     layers: 'all',
                     sr: this._map.getView().getProjection().getCode().split(':')[1],
@@ -188,20 +201,17 @@ class MapPopupCls extends MapInteractionBase {
                 };
 
                 for (let l of this._esriMapServiceLayers) {
-                    l.getPopupInfo(queryParams, this._selectionLayerLookup[l.id]);
+                    l.getPopupInfo(queryParams);
                 }
             }
 
-            let layerFeatureObjectArray = this._featuresAtPixel(evt.pixel);
+            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);
+
 
-            /**
-             *
-             * @type {Array.&lt;_FeatureLayerProperties>}
-             */
             this._passThroughLayerFeatureArray = [];
             this._currentPopupIndex = -1;
 
-            for (let i = 0; i &lt; layerFeatureObjectArray.length; i++) {
+            for (let i = 0; i < layerFeatureObjectArray.length; i++) {
                 let featObj = layerFeatureObjectArray[i];
 
                 let props = featObj.feature.getProperties();
@@ -212,7 +222,7 @@ class MapPopupCls extends MapInteractionBase {
                 if (popupContentResponse === false) {
                     //continue;
                 } else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
+                    featObj.popupContent = popupContentResponse as string;
                     this._passThroughLayerFeatureArray.push(featObj);
                 } else {
                     featObj.selectionLayer.getSource().addFeature(featObj.feature);
@@ -223,18 +233,18 @@ class MapPopupCls extends MapInteractionBase {
 
             this._currentPopupIndex = -1;
 
-            let popupHtml = '&lt;div class="ol-popup-nav">';
-            popupHtml += '&lt;span class="previous-popup ol-popup-nav-arrow">&amp;#9664;&lt;/span>';
-            popupHtml += '&lt;span class="next-popup ol-popup-nav-arrow">&amp;#9654;&lt;/span>';
-            popupHtml += `&lt;span class="current-popup-item-number" style="font-weight: bold;">&lt;/span>`;
-            popupHtml += `&lt;span>&amp;nbsp;of&amp;nbsp;&lt;/span>`;
-            popupHtml += `&lt;span class="popup-content-length" style="font-weight: bold;">${this._popupContentLength}&lt;/span>`;
-            popupHtml += `&lt;span>&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&lt;/span>`;
-            popupHtml += `&lt;span class="current-popup-layer-name">&lt;/span>`;
-            popupHtml += '&lt;/div>';
-            popupHtml += '&lt;div class="ol-popup-inner">';
+            let popupHtml = '<div class="ol-popup-nav">';
+            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
+            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
+            popupHtml += `<span class="current-popup-item-number" style="font-weight: bold;"></span>`;
+            popupHtml += `<span>&nbsp;of&nbsp;</span>`;
+            popupHtml += `<span class="popup-content-length" style="font-weight: bold;">${this._popupContentLength}</span>`;
+            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;
+            popupHtml += `<span class="current-popup-layer-name"></span>`;
+            popupHtml += '</div>';
+            popupHtml += '<div class="ol-popup-inner">';
 
-            popupHtml += '&lt;/div>';
+            popupHtml += '</div>';
 
             this._$popupContent.html(popupHtml);
 
@@ -254,7 +264,7 @@ class MapPopupCls extends MapInteractionBase {
             let nextPopup = this._$popupContent.find('.next-popup');
 
             nextPopup.click(() => {
-                if (this._popupContentLength == 1 &amp;&amp; this._currentPopupIndex > -1) {
+                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {
                     return;
                 }
 
@@ -276,11 +286,11 @@ class MapPopupCls extends MapInteractionBase {
         });
 
         //change mouse cursor when over marker
-        this._map.on('pointermove', (e) => {
-            if (e.dragging) {
+        this._map.on('pointermove', (evt) => {
+            if (evt['dragging']) {
                 return;
             }
-            let pixel = this.map.getEventPixel(e.originalEvent);
+            let pixel = this.map.getEventPixel(evt['originalEvent']);
             let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {
                 for (let olLayer of this._arrPopupOlLayers) {
                     if (lyrCandidate == olLayer) {
@@ -292,6 +302,8 @@ class MapPopupCls extends MapInteractionBase {
             });
             this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
         });
+
+        return true;
     }
 
     /**
@@ -316,14 +328,14 @@ class MapPopupCls extends MapInteractionBase {
 
     /**
      *
-     * @param {ol.Feature} feature - the ol feature
+     * @param feature - the ol feature
      * @param {LayerEsriMapServer} lyr - the map server layer
      * @param {string} popupContent - popup content
      * @param {string} esriName - esri layer name
      */
-    addMapServicePopupContent(feature, lyr, popupContent, esriName) {
+    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {
 
-        let featLayerObject = new _FeatureLayerProperties(
+        let featLayerObject = new FeatureLayerProperties(
             feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName
         );
         featLayerObject.popupContent = popupContent;
@@ -344,19 +356,20 @@ class MapPopupCls extends MapInteractionBase {
 
     /**
      *
-     * @param {ol.Pixel} pixel - the ol pixel
-     * @returns {Array.&lt;_FeatureLayerProperties>} - feature layer properties
+     * @param  pixel - the ol pixel
+     * @returns  feature layer properties
      * @private
      */
-    _featuresAtPixel(pixel) {
+    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {
         let layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {
+        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) => {
             let lyrIndex = this._arrPopupOlLayers.indexOf(layer);
 
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new _FeatureLayerProperties(
-                    feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));
-            }
+            //TODO fix this
+            // if (lyrIndex > -1) {
+            //     layerFeatureObjectArray.push(new FeatureLayerProperties(
+            //         feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));
+            // }
         });
 
         return layerFeatureObjectArray;
@@ -373,11 +386,12 @@ class MapPopupCls extends MapInteractionBase {
         return false;
     };
 
+
     /**
      *
-     * @param {popupChangedFunction} chgFunction - popup change function
+     * @param chgFunction - popup change function
      */
-    addPopupChangedFunction(chgFunction) {
+    addPopupChangedFunction(chgFunction: popupChangedFunction) {
         this._popupChangedFunctions.push(chgFunction);
     }
 
@@ -388,10 +402,10 @@ class MapPopupCls extends MapInteractionBase {
      * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
      * @param {number} [selectionStyle.width=10] the selection width for linear features
      * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {ol.layer.Vector} the new selection layer
+     * @returns  the new selection layer
      * @private
      */
-    _addPopupLayer(lyr, selectionStyle) {
+    _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {
         this._checkInit();
 
         selectionStyle = selectionStyle || {};
@@ -434,13 +448,7 @@ class MapPopupCls extends MapInteractionBase {
         return selectionLayer;
     }
 
-    /**
-     * The popup callback function
-     * @callback popupCallback
-     * @param {object} featureProperties - the feature properties
-     * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div
-     * @returns {string} the html content to be added to the popup
-     */
+
 
     /**
      * Add popup to the map
@@ -452,7 +460,8 @@ class MapPopupCls extends MapInteractionBase {
      * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
      * @returns {object} a reference to the ol selection layer
      */
-    addVectorPopup(lyr, popupContentFunction, selectionStyle) {
+    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,
+                   selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {
         let selectionLayer = this._addPopupLayer(lyr, selectionStyle);
         this._arrPopupLayerIds.push(lyr.id);
         this._arrPopupLayerNames.push(lyr.name);
@@ -463,6 +472,7 @@ class MapPopupCls extends MapInteractionBase {
         return selectionLayer;
     };
 
+
     /**
      *
      * @param {LayerBase} lyr - layer
@@ -490,7 +500,7 @@ class MapPopupCls extends MapInteractionBase {
      * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
      * @returns {object} a reference to the ol selection layer
      */
-    addMapServicePopup(lyr, selectionStyle) {
+    addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {
         let selectionLayer = this._addPopupLayer(lyr, selectionStyle);
         this._esriMapServiceLayers.push(lyr);
 
@@ -499,7 +509,7 @@ class MapPopupCls extends MapInteractionBase {
 
     clearSelection() {
         this._checkInit();
-        for (let i = 0; i &lt; this._selectionLayers.length; i++) {
+        for (let i = 0; i < this._selectionLayers.length; i++) {
             this._selectionLayers[i].getSource().clear();
         }
         for (let f of this._mapClickFunctions) {
@@ -511,32 +521,9 @@ class MapPopupCls extends MapInteractionBase {
      * Add a function to be called when the map is clicked but before any popups are implemented
      * @param {function} func - the map click function
      */
-    addMapClickFunction(func) {
+    addMapClickFunction(func: Function) {
         this._mapClickFunctions.push(func);
     }
 }
 nm.MapPopupCls = MapPopupCls;
 export default MapPopupCls;
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/olHelpers/propertiesZoomStyle.ts b/src-ts/olHelpers/propertiesZoomStyle.ts
new file mode 100644
index 0000000..263cd69
--- /dev/null
+++ b/src-ts/olHelpers/propertiesZoomStyle.ts
@@ -0,0 +1,35 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+
+import provide from '../util/provide';
+import * as zoomResolutionConvert from './zoomResolutionConvert';
+import {ol} from 'custom-ol'
+const nm = provide('olHelpers');
+
+
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+function propertiesZoomStyle(styleFunc) {
+    if (styleFunc == undefined){
+        return undefined;
+    }
+
+    return function (feature: ol.Feature, resolution) {
+        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
+    };
+}
+
+nm.propertiesZoomStyle = propertiesZoomStyle;
+export default propertiesZoomStyle;
diff --git a/src-ts/olHelpers/quickMap.ts b/src-ts/olHelpers/quickMap.ts
new file mode 100644
index 0000000..aacd60f
--- /dev/null
+++ b/src-ts/olHelpers/quickMap.ts
@@ -0,0 +1,38 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+import {quickMapOptions, quickMapBase} from './quickMapBase';
+import provide from '../util/provide';
+import mapMove from './mapMove';
+import mapPopup from './mapPopup';
+let nm = provide('olHelpers');
+import {ol} from 'custom-ol'
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
+ */
+export function quickMap(options? : quickMapOptions): ol.Map {
+    let m = quickMapBase(options);
+    mapMove.init(m);
+    mapPopup.init(m);
+
+    return m;
+}
+
+
+nm.quickMap = quickMap;
+export default quickMap;
diff --git a/doc/olHelpers_quickMapBase.js.html b/src-ts/olHelpers/quickMapBase.ts
similarity index 55%
rename from doc/olHelpers_quickMapBase.js.html
rename to src-ts/olHelpers/quickMapBase.ts
index da5479e..1dd43e0 100644
--- a/doc/olHelpers_quickMapBase.js.html
+++ b/src-ts/olHelpers/quickMapBase.ts
@@ -1,63 +1,43 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>JSDoc: Source: olHelpers/quickMapBase.js</title>
-
-    <script src="scripts/prettify/prettify.js"> </script>
-    <script src="scripts/prettify/lang-css.js"> </script>
-    <!--[if lt IE 9]>
-      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
-    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
-</head>
-
-<body>
-
-<div id="main">
-
-    <h1 class="page-title">Source: olHelpers/quickMapBase.js</h1>
-
-    
-
-
-
-    
-    <section>
-        <article>
-            <pre class="prettyprint source linenums"><code>
 /**
  * Created by gavorhes on 12/15/2015.
  */
 
-import $ from '../jquery/jquery';
+const $ = require('jquery');
 import provide from '../util/provide';
-import ol from '../ol/ol';
+import {ol} from 'custom-ol';
 const nm = provide('olHelpers');
 
+
+export interface quickMapOptions {
+    divId?: string;
+    center?: {x: number, y: number};
+    zoom?: number;
+    minZoom?: number;
+    maxZoom?: number;
+    baseSwitcher?: boolean;
+    fullScreen?: boolean;
+}
+
 /**
  * Sets up a map with some default parameters and initializes
  * mapMove and mapPopup
  *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
+ * @param [options={}] config options
+ * @param [options.divId=map] map div id
+ * @param [options.center={}] center config object
+ * @param [options.center.x=-10018378] center x, web mercator x or lon
+ * @param [options.center.y=5574910] center y, web mercator y or lat
+ * @param [options.zoom=7] zoom level
+ * @param [options.minZoom=undefined] min zoom
+ * @param [options.maxZoom=undefined] max zoom
+ * @param [options.baseSwitcher=true] if add base map switcher
+ * @param [options.fullScreen=false] if add base map switcher
+ * @returns the ol map
  */
-function quickMapBase(options) {
-    options = options || {};
+export function quickMapBase(options?: quickMapOptions): ol.Map {
+    options = options || {} as quickMapOptions;
     options.divId = options.divId || 'map';
-    options.center = options.center || {};
-    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;
-    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
+    options.center = options.center || {x: -10018378, y: 5574910};
     options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
     options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
     options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
@@ -67,45 +47,47 @@ function quickMapBase(options) {
     $mapDiv.css('position', 'relative');
 
     let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});
-    let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
+    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
 
     let osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
     let aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
 
     if (options.baseSwitcher) {
-       //  let switcherContent = '&lt;div class="base-map-switcher" title="Toggle Base Layer" style="';
-       //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-       //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-       //  switcherContent += '">&lt;/div>';
-       //  $mapDiv.append(switcherContent);
-       //
-       // $mapDiv.find('.base-map-switcher').click(function() {
-       //      "use strict";
-       //      osmLayer.setVisible(!osmLayer.getVisible());
-       //      satLayer.setVisible(!satLayer.getVisible());
-       //
-       //      if (osmLayer.getVisible()){
-       //          $(this).css('background', aerialCss);
-       //      } else {
-       //          $(this).css('background', osmCss);
-       //      }
-       //  });
+        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
+        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
+        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
+        //  switcherContent += '"></div>';
+        //  $mapDiv.append(switcherContent);
+        //
+        // $mapDiv.find('.base-map-switcher').click(function() {
+        //      "use strict";
+        //      osmLayer.setVisible(!osmLayer.getVisible());
+        //      satLayer.setVisible(!satLayer.getVisible());
+        //
+        //      if (osmLayer.getVisible()){
+        //          $(this).css('background', aerialCss);
+        //      } else {
+        //          $(this).css('background', osmCss);
+        //      }
+        //  });
     }
 
-    if (options.zoom &lt; 0 || options.zoom > 28) {
+    if (options.zoom < 0 || options.zoom > 28) {
         throw 'zoom out of range';
     }
 
-    if (options.center.x >= -180 &amp;&amp; options.center.x &lt;= 180 &amp;&amp; options.center.y >= -90 &amp;&amp; options.center.y &lt;= 90) {
+    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
         let p = new ol.geom.Point([options.center.x, options.center.y]);
-        p.transform("EPSG:4326", "EPSG:3857");
+        new ol.proj.Projection({code: "EPSG:4326"});
+
+        p.transform(new ol.proj.Projection({code: "EPSG:4326"}), new ol.proj.Projection({code: "EPSG:3857"}));
         let coordinates = p.getCoordinates();
         options.center.x = coordinates[0];
         options.center.y = coordinates[1];
     }
 
     let map = new ol.Map({
-        layers: [osmLayer, satLayer],
+        layers: [osmLayer],
         target: options.divId,
         controls: ol.control.defaults({
             attributionOptions: {collapsible: false}
@@ -117,9 +99,10 @@ function quickMapBase(options) {
             maxZoom: options.maxZoom
         })
     });
-    
-    if (options.fullScreen){
-        map.addControl(new ol.control.FullScreen());
+
+    if (options.fullScreen) {
+        //TODO add full screen options to ts
+        map.addControl(new ol.control.FullScreen({}));
     }
 
     return map;
@@ -127,27 +110,3 @@ function quickMapBase(options) {
 
 nm.quickMapBase = quickMapBase;
 export default quickMapBase;
-
-</code></pre>
-        </article>
-    </section>
-
-
-
-
-</div>
-
-<nav>
-    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#calculateExtent">calculateExtent</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#fitToMap">fitToMap</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
-</nav>
-
-<br class="clear">
-
-<footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jul 18 2016 20:02:34 GMT-0500 (Central Daylight Time)
-</footer>
-
-<script> prettyPrint(); </script>
-<script src="scripts/linenumber.js"> </script>
-</body>
-</html>
diff --git a/src-ts/olHelpers/quickMapMulti.js b/src-ts/olHelpers/quickMapMulti.js
new file mode 100644
index 0000000..f9e112c
--- /dev/null
+++ b/src-ts/olHelpers/quickMapMulti.js
@@ -0,0 +1,46 @@
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+import quickMapBase from './quickMapBase';
+import provide from '../util/provide';
+import MapMoveCls from './mapMoveCls';
+import MapPopupCls from './mapPopupCls';
+let nm = provide('olHelpers');
+
+
+/**
+ * @typedef {object} quickMapMultiReturn
+ * @property {ol.Map} map The X Coordinate
+ * @property {MapMoveCls} mapMove The Y Coordinate
+ * @property {MapPopupCls} mapPopup The Y Coordinate
+ */
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns {quickMapMultiReturn} return map, map move, and map popup objects
+ */
+function quickMapMulti(options) {
+    let m = quickMapBase(options);
+    let mov = new MapMoveCls();
+    let pop = new MapPopupCls();
+    mov.init(m);
+    pop.init(m);
+
+    return {map: m, mapMove: mov, mapPopup: pop};
+}
+
+nm.quickMapMulti = quickMapMulti;
+export default quickMapMulti;
diff --git a/src-ts/olHelpers/zoomResolutionConvert.ts b/src-ts/olHelpers/zoomResolutionConvert.ts
new file mode 100644
index 0000000..68211e2
--- /dev/null
+++ b/src-ts/olHelpers/zoomResolutionConvert.ts
@@ -0,0 +1,78 @@
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+
+import provide from '../util/provide';
+const nm = provide('olHelpers.zoomResolutionConvert');
+
+let _zoomResLookup = [
+    156543.03392804097, //0
+    78271.51696402048, //1
+    39135.75848201024, //2
+    19567.87924100512, //3
+    9783.93962050256, //4
+    4891.96981025128, //5
+    2445.98490512564, //6
+    1222.99245256282, //7
+    611.49622628141, //8
+    305.748113140705, //9
+    152.8740565703525, //10
+    76.43702828517625, //11
+    38.21851414258813, //12
+    19.109257071294063, //13
+    9.554628535647032, //14
+    4.777314267823516, //15
+    2.388657133911758, //16
+    1.194328566955879, //17
+    0.5971642834779395, //18
+    0.29858214173896974, //19
+    0.14929107086948487, //20
+    0.07464553543474244, //21
+    0.03732276771737122, //22
+    0.01866138385868561, //23
+    0.009330691929342804, //24
+    0.004665345964671402, //25
+    0.002332672982335701, //26
+    0.0011663364911678506, //27
+    0.0005831682455839253 //28
+];
+
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+export function zoomToResolution(zoomLevel) {
+    "use strict";
+
+    if (typeof zoomLevel == 'number') {
+        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
+            return _zoomResLookup[zoomLevel];
+        } else {
+            console.log(`invalid zoom level provided: ${zoomLevel}`);
+
+            return undefined;
+        }
+    } else {
+        return undefined;
+    }
+}
+nm.zoomToResolution = zoomToResolution;
+
+
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+export function resolutionToZoom(resolution){
+    for (let i = 0; i < _zoomResLookup.length; i++){
+        if (resolution >= _zoomResLookup[i] ){
+            return i;
+        }
+    }
+
+    return 0;
+}
+
+nm.resolutionToZoom = resolutionToZoom;
diff --git a/src-ts/util/_index.ts b/src-ts/util/_index.ts
new file mode 100644
index 0000000..9d3abda
--- /dev/null
+++ b/src-ts/util/_index.ts
@@ -0,0 +1,14 @@
+/**
+ * Created by gavorhes on 9/22/2016.
+ */
+
+import * as checkDefinedf from './checkDefined';
+
+
+export namespace checkDefined {
+    export const undefinedOrNull = checkDefinedf.undefinedOrNull;
+    export const definedAndNotNull = checkDefinedf.definedAndNotNull;
+}
+
+
+
diff --git a/src-ts/util/checkDefined.ts b/src-ts/util/checkDefined.ts
new file mode 100644
index 0000000..079456a
--- /dev/null
+++ b/src-ts/util/checkDefined.ts
@@ -0,0 +1,30 @@
+import provide from './provide';
+let nm = provide('util.checkDefined');
+
+/**
+ * check if the input is undefined or null
+ * @param input - input pointer
+ * @returns true undefined or null
+ */
+export function undefinedOrNull (input): boolean{
+    "use strict";
+
+    return (typeof input === 'undefined' || input === null);
+}
+
+nm.undefinedOrNull = undefinedOrNull;
+
+
+/**
+ * check if the input is defined and not null
+ * @param input - input pointer
+ * @returns true defined and not null
+ */
+export function definedAndNotNull (input: any): boolean{
+    "use strict";
+
+    return !(undefinedOrNull(input));
+}
+
+nm.definedAndNotNull = definedAndNotNull;
+
diff --git a/src-ts/util/colors.ts b/src-ts/util/colors.ts
new file mode 100644
index 0000000..93207a8
--- /dev/null
+++ b/src-ts/util/colors.ts
@@ -0,0 +1,176 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+import provide from './provide';
+import * as chk from './checkDefined';
+let nm = provide('util.colors');
+
+
+/**
+ * helper function to convert to hex
+ * @param {number|string} x - the number to convert to hex
+ * @returns {string} number as hex
+ * @private
+ */
+function _hex(x) {
+    let hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+
+    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
+}
+
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+export function rgb2hex(rgb) {
+    let rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+
+    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
+}
+
+nm.rgb2hex = rgb2hex;
+
+
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+export function hexAlphaToRgbOrRgba(hexString, alphaVal) {
+    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
+    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    if (alphaVal) {
+        return `rgba(${r},${g},${b},${alphaVal})`;
+    } else {
+        return `rgba(${r},${g},${b})`;
+    }
+}
+
+nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+
+
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+export function rgbToRgba(rgb, alpha) {
+    let pieces = rgb.split(',');
+    pieces[0] = pieces[0].replace('rgb', 'rgba');
+    pieces[2] = pieces[2].replace(')', '');
+    pieces.push(' ' + alpha.toFixed(1) + ')');
+
+    return pieces.join(',');
+}
+
+nm.rgbToRgba = rgbToRgba;
+
+
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+
+
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
+
+    if (typeof flipColors != "boolean") {
+        flipColors = false;
+    }
+
+    return function (theVal) {
+        let r, g, b;
+        let ratio;
+
+        if (chk.undefinedOrNull(theVal)) {
+            return 'rgb(100,100,100)';
+        }
+
+        let percent = (theVal - minVal) / (maxVal - minVal);
+
+        if (flipColors == true) {
+            percent = 1 - percent;
+        }
+
+        if (percent >= 1) {
+            r = 255;
+            g = 0;
+            b = 0;
+        } else if (percent <= 0) {
+            r = 0;
+            g = 0;
+            b = 255;
+        } else if (percent < .25) {
+            // green up, blue constant
+            r = 0;
+            g = Math.floor(255 * percent / 0.25);
+            b = 255;
+        } else if (percent < 0.50) {
+            //blue down, green constant
+            ratio = (percent - 0.25) / 0.25;
+            r = 0;
+            g = 255;
+            b = 255 - Math.floor(255 * ratio);
+        } else if (percent < 0.75) {
+            // red up, green constant
+            ratio = (percent - 0.5) / 0.25;
+            r = Math.floor(255 * ratio);
+            g = 255;
+            b = 0;
+        } else {
+            // green down, red constant
+            ratio = (percent - 0.75) / 0.25;
+            r = 255;
+            g = 255 - Math.floor(255 * ratio);
+            b = 0;
+        }
+
+        r = r.toFixed();
+        g = g.toFixed();
+        b = b.toFixed();
+
+        return 'rgb(' + r + ',' + g + ',' + b + ')';
+    };
+}
+
+nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+
+
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+export function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
+
+    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+
+    return function (theVal) {
+
+        let zScore;
+        if (theVal == null) {
+            zScore = null;
+        } else {
+            zScore = (theVal - median) / stdDev;
+        }
+
+        return grd(zScore);
+    };
+}
+
+nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
diff --git a/src-ts/util/dateConvert.ts b/src-ts/util/dateConvert.ts
new file mode 100644
index 0000000..c08f635
--- /dev/null
+++ b/src-ts/util/dateConvert.ts
@@ -0,0 +1,52 @@
+/**
+ * Created by gavorhes on 11/4/2015.
+ */
+
+import provide from './provide';
+let nm = provide('util.dateConvert');
+
+function leadingPad(inNum) {
+    let strNum = inNum.toFixed();
+    if (strNum.length < 2) {
+        strNum = '0' + strNum;
+    }
+
+    return strNum;
+}
+
+nm.leadingPad = leadingPad;
+
+/**
+ * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
+ * @param {Date} dte to convert
+ * @returns {string} the formatted date string
+ */
+export function dateToYyyyMmDdHhMmSs(dte) {
+    let yr = dte.getYear() + 1900;
+    let month = leadingPad(dte.getMonth() + 1);
+    let day = leadingPad(dte.getDate());
+    let hrs = leadingPad(dte.getHours());
+    let mns = leadingPad(dte.getMinutes());
+    let secs = leadingPad(dte.getSeconds());
+
+    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;
+}
+
+nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
+
+
+/**
+ * Given a date return a string in the format YYYYmmdd_hh0000
+ * @param {Date} dte the input date
+ * @returns {string} the formatted date string
+ */
+export function dateToYyyyMmDdHh000(dte) {
+    let yr = dte.getYear() + 1900;
+    let month = leadingPad(dte.getMonth() + 1);
+    let day = leadingPad(dte.getDate());
+    let hrs = leadingPad(dte.getHours());
+
+    return `${yr}${month}${day}_${hrs}0000`;
+}
+
+nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
diff --git a/src-ts/util/formatString.ts b/src-ts/util/formatString.ts
new file mode 100644
index 0000000..55d6c15
--- /dev/null
+++ b/src-ts/util/formatString.ts
@@ -0,0 +1,38 @@
+/**
+ * Created by gavorhes on 10/30/2015.
+ */
+
+if (!String.prototype['format']) {
+    /**
+     *  helper function for string replacement to keep code clean
+     * usage
+     * var aString = 'some{0}stuff{1}replaced';
+     * var c = 'cat';
+     * var b = 'bird';
+     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
+     * prettier than
+     * 'some' + c + 'stuff' + b + 'replaced'
+     * but same effect
+     * adapted to take a single array that is used for replacement by position ie
+     * var arrReplacements = [c, b];
+     * aString.format(arrReplacements)
+     * @returns {string} converted string
+     */
+    String.prototype['format'] = function () {
+        let args = arguments;
+        for (let i = 0; i < args.length; i++) {
+            args[i] = (args[i] !== null ? args[i] : '');
+        }
+
+        //if the first argument is an array, use that
+        if (args[0].constructor == Array) {
+            args = args[0];
+        }
+
+        return this.replace(/{(\d+)}/g, function (match, number) {
+            return typeof args[number] != 'undefined' ? args[number] : match;
+        });
+    };
+}
+
+export default undefined;
diff --git a/src-ts/util/getUrlParams.ts b/src-ts/util/getUrlParams.ts
new file mode 100644
index 0000000..2fcf8ef
--- /dev/null
+++ b/src-ts/util/getUrlParams.ts
@@ -0,0 +1,61 @@
+/**
+ * Created by gavorhes on 6/23/2016.
+ */
+import provide from './provide';
+let nm = provide('util');
+
+
+function isNumber(checkVal: any):  boolean{
+    let returnVal = parseFloat(checkVal);
+
+    return !isNaN(returnVal);
+}
+
+/**
+ *
+ * @returns {object} object representation of url params
+ */
+export default function getUrlParams() {
+    "use strict";
+
+    let match;
+    let pl = /\+/g;  // Regex for replacing addition symbol with a space
+    let search = /([^&=]+)=?([^&]*)/g;
+    let decode = function (s) {
+        return decodeURIComponent(s.replace(pl, " "));
+    };
+    let query = window.location.search.substring(1);
+
+    let urlParams = {};
+    while (match = search.exec(query)) {
+        /**
+         * @type {string}
+         */
+        let val =  decode(match[2]).trim();
+
+        let typedVal = null;
+        if (val.length == 0){
+            // pass
+        }
+        else if (isNumber(val)){
+            if (val.indexOf('.') > -1){
+                typedVal = parseFloat(val);
+            } else {
+                typedVal = parseInt(val);
+            }
+        }
+        else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true'){
+            typedVal = val.toLowerCase() == 'true';
+        }
+        else {
+            typedVal = val;
+        }
+        urlParams[decode(match[1])] = typedVal;
+    }
+
+    return urlParams;
+}
+
+nm.getUrlParams = getUrlParams;
+
+
diff --git a/src-ts/util/makeGuid.ts b/src-ts/util/makeGuid.ts
new file mode 100644
index 0000000..128c322
--- /dev/null
+++ b/src-ts/util/makeGuid.ts
@@ -0,0 +1,25 @@
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+import provide from './provide';
+let nm = provide('util');
+
+
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+function makeGuid() {
+        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
+            .replace(/[xy]/g, function (c) {
+                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
+
+                return v.toString(16);
+            });
+
+}
+nm.makeGuid = makeGuid;
+export default makeGuid;
+
+
diff --git a/src-ts/util/objectHelpers.ts b/src-ts/util/objectHelpers.ts
new file mode 100644
index 0000000..abc7770
--- /dev/null
+++ b/src-ts/util/objectHelpers.ts
@@ -0,0 +1,35 @@
+/**
+ * Created by gavorhes on 6/7/2016.
+ */
+
+import provide from './provide';
+let nm = provide('util');
+
+/**
+ * @typedef {object} keyValuePair
+ * @property {string} key
+ * @property {object} value
+ */
+
+
+/**
+ * iterate over the key value pairs of an object
+ * @param {object} obj - the input object
+ * @returns {Array<keyValuePair>} - array of key value pairs
+ */
+export function keyValPairs(obj) {
+    let outArray = [];
+    for (let key of Object.keys(obj)) {
+        outArray.push({'key': key, 'value': obj[key]});
+
+    }
+    outArray.sort(function (a, b) {
+        "use strict";
+
+        return a > b ? 1 : -1;
+    });
+
+    return outArray;
+}
+
+nm.keyValPairs = keyValPairs;
diff --git a/src-ts/util/provide.ts b/src-ts/util/provide.ts
new file mode 100644
index 0000000..0d9801a
--- /dev/null
+++ b/src-ts/util/provide.ts
@@ -0,0 +1,36 @@
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+
+
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+function provide(namespace){
+    "use strict";
+    if (typeof window['gv'] == 'undefined'){
+        window['gv'] = {};
+    }
+
+    let parts = namespace.split('.');
+    let nameSpace = window['gv'];
+
+    for (let i=0; i< parts.length; i++){
+        let newObject = nameSpace[parts[i]];
+
+        if (typeof newObject == 'undefined'){
+            nameSpace[parts[i]] = {};
+        }
+
+        nameSpace = nameSpace[parts[i]];
+    }
+
+    return nameSpace;
+}
+
+provide('util');
+window['gv'].util.provide = provide;
+
+export default provide;
diff --git a/test-html/compare-test.html b/test-html/compare-test.html
index 28e1173..3576ead 100644
--- a/test-html/compare-test.html
+++ b/test-html/compare-test.html
@@ -3,8 +3,8 @@
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
-    <link rel="stylesheet" href="../css/all-ol-style.css">
-    <link rel="stylesheet" href="../css/layer-swipe.css">
+    <link rel="stylesheet" href="css/all-ol-style.css">
+    <link rel="stylesheet" href="css/layer-swipe.css">
     <style>
         body, html{
             height:100%;
@@ -24,7 +24,7 @@
 </head>
 <body>
 <div id="map"></div>
-<script src="../test-build/compare-test.js"></script>
+<script src="test_build/compare-test.js"></script>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/test-html/css/all-ol-style.css b/test-html/css/all-ol-style.css
new file mode 100644
index 0000000..0794795
--- /dev/null
+++ b/test-html/css/all-ol-style.css
@@ -0,0 +1,162 @@
+.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
+.legend-container {
+  list-style: none;
+  border: solid black 1px;
+  border-radius: 5px;
+  background-color: rgba(211, 211, 211, 0.2);
+  margin: 2px;
+  padding: 2px;
+}
+.legend-container ul {
+  list-style: none;
+  padding-left: 17px;
+}
+.legend-container li {
+  border-radius: 7px;
+  margin: 2px;
+  padding: 2px 4px;
+}
+.legend-container hr {
+  display: inline-block;
+  width: 40px;
+  height: 10px;
+  background-color: blue;
+  border: none;
+  margin: 0 0 3px 7px;
+}
+.legend-container > li:first-child {
+  font-weight: bold;
+  min-height: 25px;
+}
+.legend-container > li:first-child input {
+  display: none;
+}
+.legend-container > li:first-child input + label {
+  width: 100px;
+  height: 19px;
+  margin: 5px;
+  display: inline-block;
+}
+.legend-container > li:first-child input + label > span {
+  display: inline-block;
+  width: 59px;
+  height: 19px;
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0;
+}
+.legend-container > li:first-child input:checked + label > span {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0;
+}
+.legend-layer-subitem {
+  display: inline-block;
+  max-width: 148px;
+  overflow: hidden;
+  max-height: 20px;
+}
+.legend-layer-icon {
+  margin-left: 7px;
+}
+.legend-layer-div li {
+  margin: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.layer-not-visible {
+  background-color: gray;
+  display: none;
+}
+.layer-force-show {
+  display: inherit;
+}
+.layer-group-expander,
+.map-server-expander,
+.unique-symbol-expander,
+.legend-items-expander {
+  color: #59AFEE;
+  cursor: pointer;
+  padding-left: 4px;
+  font-size: 14px;
+}
+.esri-popup-table {
+  border-collapse: collapse;
+}
+.esri-popup-table td,
+.esri-popup-table th {
+  border: solid black 1px;
+  padding: 0 4px;
+}
+.esri-popup-table tr:nth-child(even) {
+  background-color: lightblue;
+}
+.legend-layer-name,
+.legend-check {
+  cursor: pointer;
+}
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+.ol-popup:after,
+.ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+.ol-popup-nav-arrow {
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+.ol-inner-inner {
+  height: 300px;
+  overflow-y: auto;
+}
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: solid black 1px;
+  border-right: solid black 1px;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
diff --git a/test-html/css/all-ol-style.less b/test-html/css/all-ol-style.less
new file mode 100644
index 0000000..ed0aa0f
--- /dev/null
+++ b/test-html/css/all-ol-style.less
@@ -0,0 +1,4 @@
+@import (inline) "ol.css";
+@import "legend";
+@import "ol-popup";
+@import "layer-swipe";
diff --git a/test-html/css/layer-swipe.css b/test-html/css/layer-swipe.css
new file mode 100644
index 0000000..59c79c6
--- /dev/null
+++ b/test-html/css/layer-swipe.css
@@ -0,0 +1,11 @@
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: solid black 1px;
+  border-right: solid black 1px;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
diff --git a/test-html/css/layer-swipe.less b/test-html/css/layer-swipe.less
new file mode 100644
index 0000000..baf4e81
--- /dev/null
+++ b/test-html/css/layer-swipe.less
@@ -0,0 +1,14 @@
+@swipe-border: solid black 1px;
+
+
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: @swipe-border;
+  border-right: @swipe-border;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
\ No newline at end of file
diff --git a/test-html/css/legend.less b/test-html/css/legend.less
new file mode 100644
index 0000000..504f281
--- /dev/null
+++ b/test-html/css/legend.less
@@ -0,0 +1,116 @@
+@legendKeyOffset: 7px;
+
+@rectangleImg: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==');
+
+
+.legend-container {
+  list-style: none;
+  border: solid black 1px;
+  border-radius: 5px;
+  background-color: rgba(211, 211, 211, 0.2);
+  margin: 2px;
+  padding: 2px;
+
+  ul {
+    list-style: none;
+    padding-left: 17px;
+  }
+
+  li {
+    border-radius: 7px;
+    margin: 2px;
+    padding: 2px 4px;
+  }
+
+  hr {
+    display: inline-block;
+    width: 40px;
+    height: 10px;
+    background-color: blue;
+    border: none;
+    margin: 0 0 3px @legendKeyOffset;
+  }
+
+  > li:first-child {
+    font-weight: bold;
+    min-height: 25px;
+
+    input {
+      display: none;
+    }
+
+    input + label {
+      width: 100px;
+      height: 19px;
+      margin: 5px;
+      display: inline-block;
+    }
+
+    input + label > span {
+      display: inline-block;
+      width: 59px;
+      height: 19px;
+      background: @rectangleImg no-repeat 0 0;
+    }
+
+
+
+    input:checked + label > span {
+      background: @rectangleImg no-repeat -59px 0;
+    }
+  }
+}
+
+
+.legend-layer-subitem {
+  display: inline-block;
+  max-width: 148px;
+  overflow: hidden;
+  max-height: 20px;
+}
+
+.legend-layer-icon {
+  margin-left: @legendKeyOffset;
+}
+
+.legend-layer-div li {
+  margin: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+
+.layer-not-visible {
+  background-color: gray;
+  display: none;
+}
+
+.layer-force-show {
+  display: inherit;
+}
+
+.layer-group-expander, .map-server-expander, .unique-symbol-expander, .legend-items-expander {
+  color: #59AFEE;
+  cursor: pointer;
+  padding-left: 4px;
+  font-size: 14px;
+}
+
+.esri-popup-table{
+  border-collapse: collapse;
+
+  td, th {
+    border: solid black 1px;
+    padding: 0 4px;
+  }
+
+  tr:nth-child(even){
+    background-color: lightblue;
+  }
+}
+
+.legend-layer-name, .legend-check{
+  cursor: pointer
+}
+
+
+
diff --git a/test-html/css/media-control.less b/test-html/css/media-control.less
new file mode 100644
index 0000000..9233513
--- /dev/null
+++ b/test-html/css/media-control.less
@@ -0,0 +1,68 @@
+@mediaImg: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAAAdCAMAAACddH6yAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAJycmKygmLCknKSkpKSkqLysqLCwsLS0tLi4uLi8vMCwrMi0sMS8tNCwpMTAvNzAvMDAwMTExMTEyMjIxMjIyMzMzMzM0MzQ0NjExNzMxNDQ0NTU1NTY2Njc3OTMxOTc2PDg2OTk5OTo7PTo5Pz4+Pj8/RDs2R0A9REA+QkNDQkRFR0hIS0NBS0VCTUdES0tLTU5NVFRUVVdYYFlXZl9caF9cYWBgZ2Jham1ubGxsc3JycXR2Zn6HaYCIcpSegHx7hIWFjo+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAptsNGgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAIpSURBVFhH7ZdrV9QwEIYriLDgbQsdUfCKchEVBBVUFOH//6c482a627Qz2VVzjl94PiQznZP02TRNz1bhETnUIYRa4wEbXNzUeEAza+S2xgP4ntWqxhb+tEwYaWARGg0sQvaelQYmT7U32dH+z3mmvUktRuu8jgPecmHLK4qNzCuPZ8A7XR+zeMgF+aFm8ZhHNmxkFrER2MgpfohGmvV4JT5ecR9GzrS70cgZGmC0rEmfnBEXmRVN+sBI3hqLOYz8eWcZjTTpk1ujG6PI3Ebj2+g+ob0vTdfomr7EoCUx+jUh5nMa3UO+iraJO6tr1CxI+xw7eemutKlR72clRjAAnbw10qud4sQIbY3WM6rxbtVkGRGNYwyKGBF9lbtJ4hjxAcVG3NpGRA9jxhQyosf4Ul04RhyykbSeEdFlzLlYxojW8O08qA0jKbT4Ru2jK2bUYhh1lXyj5iJeKGY0xhqNrTVawDLNeGrvYyrFMkZ3sI/OvJ29jp3NVxyjzstWyOgIX3SO/+rtxywtRYzQ5s+jcIQTctEyOo+RUsQIeVx4w2h0C91PtHvSJEYPYj8hMerDlalRn6mRQddoSNdowI0R+H9GTvUNjJzij5zRCYyckZ9zRqfRiF5rnsIFNqKXmqbwYSpGLzRN0dP/iaYpXGQj2tY0hQswosZAruOvp+YJM4tA8wS5nh3ZVNMJhuCE90i/zT3+YWSVGft98gAMPuL8d/iWKx7nilfhN6Q1MB5pcaF/AAAAAElFTkSuQmCC');
+
+.media-control-container {
+  padding: 10px;
+  text-align: center;
+
+  input[type=range]{
+    width: 80%;
+  }
+
+  input[type=range]:disabled{
+      cursor: not-allowed;
+      background-color: lightgray;
+  }
+}
+
+.media-player-button {
+  background: @mediaImg no-repeat;
+  height: 29px;
+  width: 30px;
+  display: inline-block;
+  margin: 0 2px;
+  cursor: pointer;
+}
+
+.media-player-button:hover {
+  background-color: lightblue;
+}
+
+.media-pause {
+  background-position: -86px 0;
+}
+
+.media-play {
+  background-position: -28px 0;
+}
+
+.media-stop {
+  background-position: -57px 0;
+}
+
+.media-ahead {
+  background-position: -116px 0;
+}
+
+.media-back {
+  background-position: 1px 0;
+}
+
+.media-disabled {
+  display: none;
+}
+
+.media-locked{
+  background-color: lightgray !important;
+  cursor: not-allowed;
+}
+
+.media-control-value-label-container{
+  display: flex;
+  justify-content: space-between;
+
+  span{
+    display: block;
+    font-size: small;
+  }
+}
+
diff --git a/test-html/css/ol-popup.css b/test-html/css/ol-popup.css
new file mode 100644
index 0000000..471fa85
--- /dev/null
+++ b/test-html/css/ol-popup.css
@@ -0,0 +1,58 @@
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+.ol-popup:after,
+.ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+.ol-popup-nav-arrow {
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+.ol-inner-inner {
+  height: 300px;
+  overflow-y: auto;
+}
diff --git a/test-html/css/ol-popup.less b/test-html/css/ol-popup.less
new file mode 100644
index 0000000..3ffbef4
--- /dev/null
+++ b/test-html/css/ol-popup.less
@@ -0,0 +1,66 @@
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+
+.ol-popup:after, .ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+
+.ol-popup-nav-arrow{
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+
+.ol-inner-inner {
+  height: 300px;
+  //width: 392px;
+  //padding-right: 25px;
+  overflow-y: auto;
+}
diff --git a/test-html/css/ol.css b/test-html/css/ol.css
new file mode 100644
index 0000000..ea50e7e
--- /dev/null
+++ b/test-html/css/ol.css
@@ -0,0 +1 @@
+.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
\ No newline at end of file
diff --git a/test-html/here.html b/test-html/here.html
new file mode 100644
index 0000000..d194948
--- /dev/null
+++ b/test-html/here.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="css/all-ol-style.css">
+    <link rel="stylesheet" href="http://transportal.cee.wisc.edu/gis/webmaps/static/css/jquery-ui-themes/start/jquery-ui.min.css">
+    <link rel="stylesheet" href="http://transportal.cee.wisc.edu/gis/webmaps/static/css/glrtoc/glrtoc-opsmap.css">
+    <style>
+        #map{
+            height:400px;
+            width: 600px;
+        }
+    </style>
+
+</head>
+<body>
+<div id="map">
+
+</div>
+
+
+<script src="test_build/my_little_test.js"></script>
+<script src="test_build/another.js"></script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/test-html/itsMap.html b/test-html/itsMap.html
new file mode 100644
index 0000000..1cf300b
--- /dev/null
+++ b/test-html/itsMap.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>WisDOT ITS Inventory</title>
+    <link rel="icon" type="image/png" href="http://transportal.cee.wisc.edu/gis/webmaps/static/img/favicon.png">
+
+<link rel="stylesheet" href="http://transportal.cee.wisc.edu/gis/webmaps/static/css/itsMap/itsMap.css" type="text/css">
+
+
+
+        <link rel="stylesheet"
+              href="http://transportal.cee.wisc.edu/gis/webmaps/static/css/jquery-ui-themes/cupertino/jquery-ui.min.css">
+
+
+
+</head>
+<body>
+<div id="header">
+    <span>WisDOT ITS Inventory </span>
+    <a title="Traffic Operations and Safety Lab" href="http://www.topslab.wisc.edu/">
+        <img src="http://transportal.cee.wisc.edu/gis/webmaps/static/img/tops-logo.png">
+    </a>
+    <a title="WisDOT" href="http://wisconsindot.gov/Pages/home.aspx">
+        <img src="http://transportal.cee.wisc.edu/gis/webmaps/static/img/wisdot.png">
+    </a>
+</div>
+<div id="container">
+    <div id="left">
+        <div id="legend-container"></div>
+    </div>
+    <div id="map"></div>
+</div>
+
+<script>
+    var glob = {};
+</script>
+
+<script src="test_build/itsMap.js"></script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/test-html/lib/react-dom.js b/test-html/lib/react-dom.js
new file mode 100644
index 0000000..9c8699b
--- /dev/null
+++ b/test-html/lib/react-dom.js
@@ -0,0 +1,42 @@
+/**
+ * ReactDOM v15.3.2
+ *
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+// Based off https://github.com/ForbesLindesay/umd/blob/master/template.js
+;(function(f) {
+  // CommonJS
+  if (typeof exports === "object" && typeof module !== "undefined") {
+    module.exports = f(require('react'));
+
+  // RequireJS
+  } else if (typeof define === "function" && define.amd) {
+    define(['react'], f);
+
+  // <script>
+  } else {
+    var g;
+    if (typeof window !== "undefined") {
+      g = window;
+    } else if (typeof global !== "undefined") {
+      g = global;
+    } else if (typeof self !== "undefined") {
+      g = self;
+    } else {
+      // works providing we're not in "use strict";
+      // needed for Java 8 Nashorn
+      // see https://github.com/facebook/react/issues/3037
+      g = this;
+    }
+    g.ReactDOM = f(g.React);
+  }
+
+})(function(React) {
+  return React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+});
diff --git a/test-html/lib/react.js b/test-html/lib/react.js
new file mode 100644
index 0000000..3affcaa
--- /dev/null
+++ b/test-html/lib/react.js
@@ -0,0 +1,20595 @@
+ /**
+  * React v15.3.2
+  */
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule AutoFocusUtils
+ */
+
+'use strict';
+
+var ReactDOMComponentTree = _dereq_(42);
+
+var focusNode = _dereq_(156);
+
+var AutoFocusUtils = {
+  focusDOMComponent: function () {
+    focusNode(ReactDOMComponentTree.getNodeFromInstance(this));
+  }
+};
+
+module.exports = AutoFocusUtils;
+},{"156":156,"42":42}],2:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule BeforeInputEventPlugin
+ */
+
+'use strict';
+
+var EventConstants = _dereq_(16);
+var EventPropagators = _dereq_(20);
+var ExecutionEnvironment = _dereq_(148);
+var FallbackCompositionState = _dereq_(21);
+var SyntheticCompositionEvent = _dereq_(103);
+var SyntheticInputEvent = _dereq_(107);
+
+var keyOf = _dereq_(166);
+
+var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
+var START_KEYCODE = 229;
+
+var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;
+
+var documentMode = null;
+if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
+  documentMode = document.documentMode;
+}
+
+// Webkit offers a very useful `textInput` event that can be used to
+// directly represent `beforeInput`. The IE `textinput` event is not as
+// useful, so we don't use it.
+var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();
+
+// In IE9+, we have access to composition events, but the data supplied
+// by the native compositionend event may be incorrect. Japanese ideographic
+// spaces, for instance (\u3000) are not recorded correctly.
+var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
+
+/**
+ * Opera <= 12 includes TextEvent in window, but does not fire
+ * text input events. Rely on keypress instead.
+ */
+function isPresto() {
+  var opera = window.opera;
+  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
+}
+
+var SPACEBAR_CODE = 32;
+var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+// Events and their corresponding property names.
+var eventTypes = {
+  beforeInput: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onBeforeInput: null }),
+      captured: keyOf({ onBeforeInputCapture: null })
+    },
+    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
+  },
+  compositionEnd: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCompositionEnd: null }),
+      captured: keyOf({ onCompositionEndCapture: null })
+    },
+    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+  },
+  compositionStart: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCompositionStart: null }),
+      captured: keyOf({ onCompositionStartCapture: null })
+    },
+    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+  },
+  compositionUpdate: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCompositionUpdate: null }),
+      captured: keyOf({ onCompositionUpdateCapture: null })
+    },
+    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+  }
+};
+
+// Track whether we've ever handled a keypress on the space key.
+var hasSpaceKeypress = false;
+
+/**
+ * Return whether a native keypress event is assumed to be a command.
+ * This is required because Firefox fires `keypress` events for key commands
+ * (cut, copy, select-all, etc.) even though no character is inserted.
+ */
+function isKeypressCommand(nativeEvent) {
+  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
+  // ctrlKey && altKey is equivalent to AltGr, and is not a command.
+  !(nativeEvent.ctrlKey && nativeEvent.altKey);
+}
+
+/**
+ * Translate native top level events into event types.
+ *
+ * @param {string} topLevelType
+ * @return {object}
+ */
+function getCompositionEventType(topLevelType) {
+  switch (topLevelType) {
+    case topLevelTypes.topCompositionStart:
+      return eventTypes.compositionStart;
+    case topLevelTypes.topCompositionEnd:
+      return eventTypes.compositionEnd;
+    case topLevelTypes.topCompositionUpdate:
+      return eventTypes.compositionUpdate;
+  }
+}
+
+/**
+ * Does our fallback best-guess model think this event signifies that
+ * composition has begun?
+ *
+ * @param {string} topLevelType
+ * @param {object} nativeEvent
+ * @return {boolean}
+ */
+function isFallbackCompositionStart(topLevelType, nativeEvent) {
+  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
+}
+
+/**
+ * Does our fallback mode think that this event is the end of composition?
+ *
+ * @param {string} topLevelType
+ * @param {object} nativeEvent
+ * @return {boolean}
+ */
+function isFallbackCompositionEnd(topLevelType, nativeEvent) {
+  switch (topLevelType) {
+    case topLevelTypes.topKeyUp:
+      // Command keys insert or clear IME input.
+      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
+    case topLevelTypes.topKeyDown:
+      // Expect IME keyCode on each keydown. If we get any other
+      // code we must have exited earlier.
+      return nativeEvent.keyCode !== START_KEYCODE;
+    case topLevelTypes.topKeyPress:
+    case topLevelTypes.topMouseDown:
+    case topLevelTypes.topBlur:
+      // Events are not possible without cancelling IME.
+      return true;
+    default:
+      return false;
+  }
+}
+
+/**
+ * Google Input Tools provides composition data via a CustomEvent,
+ * with the `data` property populated in the `detail` object. If this
+ * is available on the event object, use it. If not, this is a plain
+ * composition event and we have nothing special to extract.
+ *
+ * @param {object} nativeEvent
+ * @return {?string}
+ */
+function getDataFromCustomEvent(nativeEvent) {
+  var detail = nativeEvent.detail;
+  if (typeof detail === 'object' && 'data' in detail) {
+    return detail.data;
+  }
+  return null;
+}
+
+// Track the current IME composition fallback object, if any.
+var currentComposition = null;
+
+/**
+ * @return {?object} A SyntheticCompositionEvent.
+ */
+function extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+  var eventType;
+  var fallbackData;
+
+  if (canUseCompositionEvent) {
+    eventType = getCompositionEventType(topLevelType);
+  } else if (!currentComposition) {
+    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
+      eventType = eventTypes.compositionStart;
+    }
+  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
+    eventType = eventTypes.compositionEnd;
+  }
+
+  if (!eventType) {
+    return null;
+  }
+
+  if (useFallbackCompositionData) {
+    // The current composition is stored statically and must not be
+    // overwritten while composition continues.
+    if (!currentComposition && eventType === eventTypes.compositionStart) {
+      currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);
+    } else if (eventType === eventTypes.compositionEnd) {
+      if (currentComposition) {
+        fallbackData = currentComposition.getData();
+      }
+    }
+  }
+
+  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);
+
+  if (fallbackData) {
+    // Inject data generated from fallback path into the synthetic event.
+    // This matches the property of native CompositionEventInterface.
+    event.data = fallbackData;
+  } else {
+    var customData = getDataFromCustomEvent(nativeEvent);
+    if (customData !== null) {
+      event.data = customData;
+    }
+  }
+
+  EventPropagators.accumulateTwoPhaseDispatches(event);
+  return event;
+}
+
+/**
+ * @param {string} topLevelType Record from `EventConstants`.
+ * @param {object} nativeEvent Native browser event.
+ * @return {?string} The string corresponding to this `beforeInput` event.
+ */
+function getNativeBeforeInputChars(topLevelType, nativeEvent) {
+  switch (topLevelType) {
+    case topLevelTypes.topCompositionEnd:
+      return getDataFromCustomEvent(nativeEvent);
+    case topLevelTypes.topKeyPress:
+      /**
+       * If native `textInput` events are available, our goal is to make
+       * use of them. However, there is a special case: the spacebar key.
+       * In Webkit, preventing default on a spacebar `textInput` event
+       * cancels character insertion, but it *also* causes the browser
+       * to fall back to its default spacebar behavior of scrolling the
+       * page.
+       *
+       * Tracking at:
+       * https://code.google.com/p/chromium/issues/detail?id=355103
+       *
+       * To avoid this issue, use the keypress event as if no `textInput`
+       * event is available.
+       */
+      var which = nativeEvent.which;
+      if (which !== SPACEBAR_CODE) {
+        return null;
+      }
+
+      hasSpaceKeypress = true;
+      return SPACEBAR_CHAR;
+
+    case topLevelTypes.topTextInput:
+      // Record the characters to be added to the DOM.
+      var chars = nativeEvent.data;
+
+      // If it's a spacebar character, assume that we have already handled
+      // it at the keypress level and bail immediately. Android Chrome
+      // doesn't give us keycodes, so we need to blacklist it.
+      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
+        return null;
+      }
+
+      return chars;
+
+    default:
+      // For other native event types, do nothing.
+      return null;
+  }
+}
+
+/**
+ * For browsers that do not provide the `textInput` event, extract the
+ * appropriate string to use for SyntheticInputEvent.
+ *
+ * @param {string} topLevelType Record from `EventConstants`.
+ * @param {object} nativeEvent Native browser event.
+ * @return {?string} The fallback string for this `beforeInput` event.
+ */
+function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
+  // If we are currently composing (IME) and using a fallback to do so,
+  // try to extract the composed characters from the fallback object.
+  // If composition event is available, we extract a string only at
+  // compositionevent, otherwise extract it at fallback events.
+  if (currentComposition) {
+    if (topLevelType === topLevelTypes.topCompositionEnd || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {
+      var chars = currentComposition.getData();
+      FallbackCompositionState.release(currentComposition);
+      currentComposition = null;
+      return chars;
+    }
+    return null;
+  }
+
+  switch (topLevelType) {
+    case topLevelTypes.topPaste:
+      // If a paste event occurs after a keypress, throw out the input
+      // chars. Paste events should not lead to BeforeInput events.
+      return null;
+    case topLevelTypes.topKeyPress:
+      /**
+       * As of v27, Firefox may fire keypress events even when no character
+       * will be inserted. A few possibilities:
+       *
+       * - `which` is `0`. Arrow keys, Esc key, etc.
+       *
+       * - `which` is the pressed key code, but no char is available.
+       *   Ex: 'AltGr + d` in Polish. There is no modified character for
+       *   this key combination and no character is inserted into the
+       *   document, but FF fires the keypress for char code `100` anyway.
+       *   No `input` event will occur.
+       *
+       * - `which` is the pressed key code, but a command combination is
+       *   being used. Ex: `Cmd+C`. No character is inserted, and no
+       *   `input` event will occur.
+       */
+      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
+        return String.fromCharCode(nativeEvent.which);
+      }
+      return null;
+    case topLevelTypes.topCompositionEnd:
+      return useFallbackCompositionData ? null : nativeEvent.data;
+    default:
+      return null;
+  }
+}
+
+/**
+ * Extract a SyntheticInputEvent for `beforeInput`, based on either native
+ * `textInput` or fallback behavior.
+ *
+ * @return {?object} A SyntheticInputEvent.
+ */
+function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+  var chars;
+
+  if (canUseTextInputEvent) {
+    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
+  } else {
+    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
+  }
+
+  // If no characters are being inserted, no BeforeInput event should
+  // be fired.
+  if (!chars) {
+    return null;
+  }
+
+  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);
+
+  event.data = chars;
+  EventPropagators.accumulateTwoPhaseDispatches(event);
+  return event;
+}
+
+/**
+ * Create an `onBeforeInput` event to match
+ * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
+ *
+ * This event plugin is based on the native `textInput` event
+ * available in Chrome, Safari, Opera, and IE. This event fires after
+ * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
+ *
+ * `beforeInput` is spec'd but not implemented in any browsers, and
+ * the `input` event does not provide any useful information about what has
+ * actually been added, contrary to the spec. Thus, `textInput` is the best
+ * available event to identify the characters that have actually been inserted
+ * into the target node.
+ *
+ * This plugin is also responsible for emitting `composition` events, thus
+ * allowing us to share composition fallback code for both `beforeInput` and
+ * `composition` event types.
+ */
+var BeforeInputEventPlugin = {
+
+  eventTypes: eventTypes,
+
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];
+  }
+};
+
+module.exports = BeforeInputEventPlugin;
+},{"103":103,"107":107,"148":148,"16":16,"166":166,"20":20,"21":21}],3:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule CSSProperty
+ */
+
+'use strict';
+
+/**
+ * CSS properties which accept numbers but are not in units of "px".
+ */
+
+var isUnitlessNumber = {
+  animationIterationCount: true,
+  borderImageOutset: true,
+  borderImageSlice: true,
+  borderImageWidth: true,
+  boxFlex: true,
+  boxFlexGroup: true,
+  boxOrdinalGroup: true,
+  columnCount: true,
+  flex: true,
+  flexGrow: true,
+  flexPositive: true,
+  flexShrink: true,
+  flexNegative: true,
+  flexOrder: true,
+  gridRow: true,
+  gridColumn: true,
+  fontWeight: true,
+  lineClamp: true,
+  lineHeight: true,
+  opacity: true,
+  order: true,
+  orphans: true,
+  tabSize: true,
+  widows: true,
+  zIndex: true,
+  zoom: true,
+
+  // SVG-related properties
+  fillOpacity: true,
+  floodOpacity: true,
+  stopOpacity: true,
+  strokeDasharray: true,
+  strokeDashoffset: true,
+  strokeMiterlimit: true,
+  strokeOpacity: true,
+  strokeWidth: true
+};
+
+/**
+ * @param {string} prefix vendor-specific prefix, eg: Webkit
+ * @param {string} key style name, eg: transitionDuration
+ * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
+ * WebkitTransitionDuration
+ */
+function prefixKey(prefix, key) {
+  return prefix + key.charAt(0).toUpperCase() + key.substring(1);
+}
+
+/**
+ * Support style names that may come passed in prefixed by adding permutations
+ * of vendor prefixes.
+ */
+var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
+
+// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
+// infinite loop, because it iterates over the newly added props too.
+Object.keys(isUnitlessNumber).forEach(function (prop) {
+  prefixes.forEach(function (prefix) {
+    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
+  });
+});
+
+/**
+ * Most style properties can be unset by doing .style[prop] = '' but IE8
+ * doesn't like doing that with shorthand properties so for the properties that
+ * IE8 breaks on, which are listed here, we instead unset each of the
+ * individual properties. See http://bugs.jquery.com/ticket/12385.
+ * The 4-value 'clock' properties like margin, padding, border-width seem to
+ * behave without any problems. Curiously, list-style works too without any
+ * special prodding.
+ */
+var shorthandPropertyExpansions = {
+  background: {
+    backgroundAttachment: true,
+    backgroundColor: true,
+    backgroundImage: true,
+    backgroundPositionX: true,
+    backgroundPositionY: true,
+    backgroundRepeat: true
+  },
+  backgroundPosition: {
+    backgroundPositionX: true,
+    backgroundPositionY: true
+  },
+  border: {
+    borderWidth: true,
+    borderStyle: true,
+    borderColor: true
+  },
+  borderBottom: {
+    borderBottomWidth: true,
+    borderBottomStyle: true,
+    borderBottomColor: true
+  },
+  borderLeft: {
+    borderLeftWidth: true,
+    borderLeftStyle: true,
+    borderLeftColor: true
+  },
+  borderRight: {
+    borderRightWidth: true,
+    borderRightStyle: true,
+    borderRightColor: true
+  },
+  borderTop: {
+    borderTopWidth: true,
+    borderTopStyle: true,
+    borderTopColor: true
+  },
+  font: {
+    fontStyle: true,
+    fontVariant: true,
+    fontWeight: true,
+    fontSize: true,
+    lineHeight: true,
+    fontFamily: true
+  },
+  outline: {
+    outlineWidth: true,
+    outlineStyle: true,
+    outlineColor: true
+  }
+};
+
+var CSSProperty = {
+  isUnitlessNumber: isUnitlessNumber,
+  shorthandPropertyExpansions: shorthandPropertyExpansions
+};
+
+module.exports = CSSProperty;
+},{}],4:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule CSSPropertyOperations
+ */
+
+'use strict';
+
+var CSSProperty = _dereq_(3);
+var ExecutionEnvironment = _dereq_(148);
+var ReactInstrumentation = _dereq_(73);
+
+var camelizeStyleName = _dereq_(150);
+var dangerousStyleValue = _dereq_(121);
+var hyphenateStyleName = _dereq_(161);
+var memoizeStringOnly = _dereq_(167);
+var warning = _dereq_(171);
+
+var processStyleName = memoizeStringOnly(function (styleName) {
+  return hyphenateStyleName(styleName);
+});
+
+var hasShorthandPropertyBug = false;
+var styleFloatAccessor = 'cssFloat';
+if (ExecutionEnvironment.canUseDOM) {
+  var tempStyle = document.createElement('div').style;
+  try {
+    // IE8 throws "Invalid argument." if resetting shorthand style properties.
+    tempStyle.font = '';
+  } catch (e) {
+    hasShorthandPropertyBug = true;
+  }
+  // IE8 only supports accessing cssFloat (standard) as styleFloat
+  if (document.documentElement.style.cssFloat === undefined) {
+    styleFloatAccessor = 'styleFloat';
+  }
+}
+
+if ("development" !== 'production') {
+  // 'msTransform' is correct, but the other prefixes should be capitalized
+  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
+
+  // style values shouldn't contain a semicolon
+  var badStyleValueWithSemicolonPattern = /;\s*$/;
+
+  var warnedStyleNames = {};
+  var warnedStyleValues = {};
+  var warnedForNaNValue = false;
+
+  var warnHyphenatedStyleName = function (name, owner) {
+    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
+      return;
+    }
+
+    warnedStyleNames[name] = true;
+    "development" !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;
+  };
+
+  var warnBadVendoredStyleName = function (name, owner) {
+    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
+      return;
+    }
+
+    warnedStyleNames[name] = true;
+    "development" !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;
+  };
+
+  var warnStyleValueWithSemicolon = function (name, value, owner) {
+    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
+      return;
+    }
+
+    warnedStyleValues[value] = true;
+    "development" !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon.%s ' + 'Try "%s: %s" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;
+  };
+
+  var warnStyleValueIsNaN = function (name, value, owner) {
+    if (warnedForNaNValue) {
+      return;
+    }
+
+    warnedForNaNValue = true;
+    "development" !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;
+  };
+
+  var checkRenderMessage = function (owner) {
+    if (owner) {
+      var name = owner.getName();
+      if (name) {
+        return ' Check the render method of `' + name + '`.';
+      }
+    }
+    return '';
+  };
+
+  /**
+   * @param {string} name
+   * @param {*} value
+   * @param {ReactDOMComponent} component
+   */
+  var warnValidStyle = function (name, value, component) {
+    var owner;
+    if (component) {
+      owner = component._currentElement._owner;
+    }
+    if (name.indexOf('-') > -1) {
+      warnHyphenatedStyleName(name, owner);
+    } else if (badVendoredStyleNamePattern.test(name)) {
+      warnBadVendoredStyleName(name, owner);
+    } else if (badStyleValueWithSemicolonPattern.test(value)) {
+      warnStyleValueWithSemicolon(name, value, owner);
+    }
+
+    if (typeof value === 'number' && isNaN(value)) {
+      warnStyleValueIsNaN(name, value, owner);
+    }
+  };
+}
+
+/**
+ * Operations for dealing with CSS properties.
+ */
+var CSSPropertyOperations = {
+
+  /**
+   * Serializes a mapping of style properties for use as inline styles:
+   *
+   *   > createMarkupForStyles({width: '200px', height: 0})
+   *   "width:200px;height:0;"
+   *
+   * Undefined values are ignored so that declarative programming is easier.
+   * The result should be HTML-escaped before insertion into the DOM.
+   *
+   * @param {object} styles
+   * @param {ReactDOMComponent} component
+   * @return {?string}
+   */
+  createMarkupForStyles: function (styles, component) {
+    var serialized = '';
+    for (var styleName in styles) {
+      if (!styles.hasOwnProperty(styleName)) {
+        continue;
+      }
+      var styleValue = styles[styleName];
+      if ("development" !== 'production') {
+        warnValidStyle(styleName, styleValue, component);
+      }
+      if (styleValue != null) {
+        serialized += processStyleName(styleName) + ':';
+        serialized += dangerousStyleValue(styleName, styleValue, component) + ';';
+      }
+    }
+    return serialized || null;
+  },
+
+  /**
+   * Sets the value for multiple styles on a node.  If a value is specified as
+   * '' (empty string), the corresponding style property will be unset.
+   *
+   * @param {DOMElement} node
+   * @param {object} styles
+   * @param {ReactDOMComponent} component
+   */
+  setValueForStyles: function (node, styles, component) {
+    if ("development" !== 'production') {
+      ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);
+    }
+
+    var style = node.style;
+    for (var styleName in styles) {
+      if (!styles.hasOwnProperty(styleName)) {
+        continue;
+      }
+      if ("development" !== 'production') {
+        warnValidStyle(styleName, styles[styleName], component);
+      }
+      var styleValue = dangerousStyleValue(styleName, styles[styleName], component);
+      if (styleName === 'float' || styleName === 'cssFloat') {
+        styleName = styleFloatAccessor;
+      }
+      if (styleValue) {
+        style[styleName] = styleValue;
+      } else {
+        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];
+        if (expansion) {
+          // Shorthand property that IE8 won't like unsetting, so unset each
+          // component to placate it
+          for (var individualStyleName in expansion) {
+            style[individualStyleName] = '';
+          }
+        } else {
+          style[styleName] = '';
+        }
+      }
+    }
+  }
+
+};
+
+module.exports = CSSPropertyOperations;
+},{"121":121,"148":148,"150":150,"161":161,"167":167,"171":171,"3":3,"73":73}],5:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule CallbackQueue
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var PooledClass = _dereq_(25);
+
+var invariant = _dereq_(162);
+
+/**
+ * A specialized pseudo-event module to help keep track of components waiting to
+ * be notified when their DOM representations are available for use.
+ *
+ * This implements `PooledClass`, so you should never need to instantiate this.
+ * Instead, use `CallbackQueue.getPooled()`.
+ *
+ * @class ReactMountReady
+ * @implements PooledClass
+ * @internal
+ */
+function CallbackQueue() {
+  this._callbacks = null;
+  this._contexts = null;
+}
+
+_assign(CallbackQueue.prototype, {
+
+  /**
+   * Enqueues a callback to be invoked when `notifyAll` is invoked.
+   *
+   * @param {function} callback Invoked when `notifyAll` is invoked.
+   * @param {?object} context Context to call `callback` with.
+   * @internal
+   */
+  enqueue: function (callback, context) {
+    this._callbacks = this._callbacks || [];
+    this._contexts = this._contexts || [];
+    this._callbacks.push(callback);
+    this._contexts.push(context);
+  },
+
+  /**
+   * Invokes all enqueued callbacks and clears the queue. This is invoked after
+   * the DOM representation of a component has been created or updated.
+   *
+   * @internal
+   */
+  notifyAll: function () {
+    var callbacks = this._callbacks;
+    var contexts = this._contexts;
+    if (callbacks) {
+      !(callbacks.length === contexts.length) ? "development" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
+      this._callbacks = null;
+      this._contexts = null;
+      for (var i = 0; i < callbacks.length; i++) {
+        callbacks[i].call(contexts[i]);
+      }
+      callbacks.length = 0;
+      contexts.length = 0;
+    }
+  },
+
+  checkpoint: function () {
+    return this._callbacks ? this._callbacks.length : 0;
+  },
+
+  rollback: function (len) {
+    if (this._callbacks) {
+      this._callbacks.length = len;
+      this._contexts.length = len;
+    }
+  },
+
+  /**
+   * Resets the internal queue.
+   *
+   * @internal
+   */
+  reset: function () {
+    this._callbacks = null;
+    this._contexts = null;
+  },
+
+  /**
+   * `PooledClass` looks for this.
+   */
+  destructor: function () {
+    this.reset();
+  }
+
+});
+
+PooledClass.addPoolingTo(CallbackQueue);
+
+module.exports = CallbackQueue;
+},{"140":140,"162":162,"172":172,"25":25}],6:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ChangeEventPlugin
+ */
+
+'use strict';
+
+var EventConstants = _dereq_(16);
+var EventPluginHub = _dereq_(17);
+var EventPropagators = _dereq_(20);
+var ExecutionEnvironment = _dereq_(148);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactUpdates = _dereq_(96);
+var SyntheticEvent = _dereq_(105);
+
+var getEventTarget = _dereq_(129);
+var isEventSupported = _dereq_(136);
+var isTextInputElement = _dereq_(137);
+var keyOf = _dereq_(166);
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+var eventTypes = {
+  change: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onChange: null }),
+      captured: keyOf({ onChangeCapture: null })
+    },
+    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
+  }
+};
+
+/**
+ * For IE shims
+ */
+var activeElement = null;
+var activeElementInst = null;
+var activeElementValue = null;
+var activeElementValueProp = null;
+
+/**
+ * SECTION: handle `change` event
+ */
+function shouldUseChangeEvent(elem) {
+  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
+  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
+}
+
+var doesChangeEventBubble = false;
+if (ExecutionEnvironment.canUseDOM) {
+  // See `handleChange` comment below
+  doesChangeEventBubble = isEventSupported('change') && (!document.documentMode || document.documentMode > 8);
+}
+
+function manualDispatchChangeEvent(nativeEvent) {
+  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));
+  EventPropagators.accumulateTwoPhaseDispatches(event);
+
+  // If change and propertychange bubbled, we'd just bind to it like all the
+  // other events and have it go through ReactBrowserEventEmitter. Since it
+  // doesn't, we manually listen for the events and so we have to enqueue and
+  // process the abstract event manually.
+  //
+  // Batching is necessary here in order to ensure that all event handlers run
+  // before the next rerender (including event handlers attached to ancestor
+  // elements instead of directly on the input). Without this, controlled
+  // components don't work properly in conjunction with event bubbling because
+  // the component is rerendered and the value reverted before all the event
+  // handlers can run. See https://github.com/facebook/react/issues/708.
+  ReactUpdates.batchedUpdates(runEventInBatch, event);
+}
+
+function runEventInBatch(event) {
+  EventPluginHub.enqueueEvents(event);
+  EventPluginHub.processEventQueue(false);
+}
+
+function startWatchingForChangeEventIE8(target, targetInst) {
+  activeElement = target;
+  activeElementInst = targetInst;
+  activeElement.attachEvent('onchange', manualDispatchChangeEvent);
+}
+
+function stopWatchingForChangeEventIE8() {
+  if (!activeElement) {
+    return;
+  }
+  activeElement.detachEvent('onchange', manualDispatchChangeEvent);
+  activeElement = null;
+  activeElementInst = null;
+}
+
+function getTargetInstForChangeEvent(topLevelType, targetInst) {
+  if (topLevelType === topLevelTypes.topChange) {
+    return targetInst;
+  }
+}
+function handleEventsForChangeEventIE8(topLevelType, target, targetInst) {
+  if (topLevelType === topLevelTypes.topFocus) {
+    // stopWatching() should be a noop here but we call it just in case we
+    // missed a blur event somehow.
+    stopWatchingForChangeEventIE8();
+    startWatchingForChangeEventIE8(target, targetInst);
+  } else if (topLevelType === topLevelTypes.topBlur) {
+    stopWatchingForChangeEventIE8();
+  }
+}
+
+/**
+ * SECTION: handle `input` event
+ */
+var isInputEventSupported = false;
+if (ExecutionEnvironment.canUseDOM) {
+  // IE9 claims to support the input event but fails to trigger it when
+  // deleting text, so we ignore its input events.
+  // IE10+ fire input events to often, such when a placeholder
+  // changes or when an input with a placeholder is focused.
+  isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 11);
+}
+
+/**
+ * (For IE <=11) Replacement getter/setter for the `value` property that gets
+ * set on the active element.
+ */
+var newValueProp = {
+  get: function () {
+    return activeElementValueProp.get.call(this);
+  },
+  set: function (val) {
+    // Cast to a string so we can do equality checks.
+    activeElementValue = '' + val;
+    activeElementValueProp.set.call(this, val);
+  }
+};
+
+/**
+ * (For IE <=11) Starts tracking propertychange events on the passed-in element
+ * and override the value property so that we can distinguish user events from
+ * value changes in JS.
+ */
+function startWatchingForValueChange(target, targetInst) {
+  activeElement = target;
+  activeElementInst = targetInst;
+  activeElementValue = target.value;
+  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');
+
+  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only
+  // on DOM elements
+  Object.defineProperty(activeElement, 'value', newValueProp);
+  if (activeElement.attachEvent) {
+    activeElement.attachEvent('onpropertychange', handlePropertyChange);
+  } else {
+    activeElement.addEventListener('propertychange', handlePropertyChange, false);
+  }
+}
+
+/**
+ * (For IE <=11) Removes the event listeners from the currently-tracked element,
+ * if any exists.
+ */
+function stopWatchingForValueChange() {
+  if (!activeElement) {
+    return;
+  }
+
+  // delete restores the original property definition
+  delete activeElement.value;
+
+  if (activeElement.detachEvent) {
+    activeElement.detachEvent('onpropertychange', handlePropertyChange);
+  } else {
+    activeElement.removeEventListener('propertychange', handlePropertyChange, false);
+  }
+
+  activeElement = null;
+  activeElementInst = null;
+  activeElementValue = null;
+  activeElementValueProp = null;
+}
+
+/**
+ * (For IE <=11) Handles a propertychange event, sending a `change` event if
+ * the value of the active element has changed.
+ */
+function handlePropertyChange(nativeEvent) {
+  if (nativeEvent.propertyName !== 'value') {
+    return;
+  }
+  var value = nativeEvent.srcElement.value;
+  if (value === activeElementValue) {
+    return;
+  }
+  activeElementValue = value;
+
+  manualDispatchChangeEvent(nativeEvent);
+}
+
+/**
+ * If a `change` event should be fired, returns the target's ID.
+ */
+function getTargetInstForInputEvent(topLevelType, targetInst) {
+  if (topLevelType === topLevelTypes.topInput) {
+    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
+    // what we want so fall through here and trigger an abstract event
+    return targetInst;
+  }
+}
+
+function handleEventsForInputEventIE(topLevelType, target, targetInst) {
+  if (topLevelType === topLevelTypes.topFocus) {
+    // In IE8, we can capture almost all .value changes by adding a
+    // propertychange handler and looking for events with propertyName
+    // equal to 'value'
+    // In IE9-11, propertychange fires for most input events but is buggy and
+    // doesn't fire when text is deleted, but conveniently, selectionchange
+    // appears to fire in all of the remaining cases so we catch those and
+    // forward the event if the value has changed
+    // In either case, we don't want to call the event handler if the value
+    // is changed from JS so we redefine a setter for `.value` that updates
+    // our activeElementValue variable, allowing us to ignore those changes
+    //
+    // stopWatching() should be a noop here but we call it just in case we
+    // missed a blur event somehow.
+    stopWatchingForValueChange();
+    startWatchingForValueChange(target, targetInst);
+  } else if (topLevelType === topLevelTypes.topBlur) {
+    stopWatchingForValueChange();
+  }
+}
+
+// For IE8 and IE9.
+function getTargetInstForInputEventIE(topLevelType, targetInst) {
+  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
+    // On the selectionchange event, the target is just document which isn't
+    // helpful for us so just check activeElement instead.
+    //
+    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
+    // propertychange on the first input event after setting `value` from a
+    // script and fires only keydown, keypress, keyup. Catching keyup usually
+    // gets it and catching keydown lets us fire an event for the first
+    // keystroke if user does a key repeat (it'll be a little delayed: right
+    // before the second keystroke). Other input methods (e.g., paste) seem to
+    // fire selectionchange normally.
+    if (activeElement && activeElement.value !== activeElementValue) {
+      activeElementValue = activeElement.value;
+      return activeElementInst;
+    }
+  }
+}
+
+/**
+ * SECTION: handle `click` event
+ */
+function shouldUseClickEvent(elem) {
+  // Use the `click` event to detect changes to checkbox and radio inputs.
+  // This approach works across all browsers, whereas `change` does not fire
+  // until `blur` in IE8.
+  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
+}
+
+function getTargetInstForClickEvent(topLevelType, targetInst) {
+  if (topLevelType === topLevelTypes.topClick) {
+    return targetInst;
+  }
+}
+
+/**
+ * This plugin creates an `onChange` event that normalizes change events
+ * across form elements. This event fires at a time when it's possible to
+ * change the element's value without seeing a flicker.
+ *
+ * Supported elements are:
+ * - input (see `isTextInputElement`)
+ * - textarea
+ * - select
+ */
+var ChangeEventPlugin = {
+
+  eventTypes: eventTypes,
+
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
+
+    var getTargetInstFunc, handleEventFunc;
+    if (shouldUseChangeEvent(targetNode)) {
+      if (doesChangeEventBubble) {
+        getTargetInstFunc = getTargetInstForChangeEvent;
+      } else {
+        handleEventFunc = handleEventsForChangeEventIE8;
+      }
+    } else if (isTextInputElement(targetNode)) {
+      if (isInputEventSupported) {
+        getTargetInstFunc = getTargetInstForInputEvent;
+      } else {
+        getTargetInstFunc = getTargetInstForInputEventIE;
+        handleEventFunc = handleEventsForInputEventIE;
+      }
+    } else if (shouldUseClickEvent(targetNode)) {
+      getTargetInstFunc = getTargetInstForClickEvent;
+    }
+
+    if (getTargetInstFunc) {
+      var inst = getTargetInstFunc(topLevelType, targetInst);
+      if (inst) {
+        var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);
+        event.type = 'change';
+        EventPropagators.accumulateTwoPhaseDispatches(event);
+        return event;
+      }
+    }
+
+    if (handleEventFunc) {
+      handleEventFunc(topLevelType, targetNode, targetInst);
+    }
+  }
+
+};
+
+module.exports = ChangeEventPlugin;
+},{"105":105,"129":129,"136":136,"137":137,"148":148,"16":16,"166":166,"17":17,"20":20,"42":42,"96":96}],7:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DOMChildrenOperations
+ */
+
+'use strict';
+
+var DOMLazyTree = _dereq_(8);
+var Danger = _dereq_(12);
+var ReactMultiChildUpdateTypes = _dereq_(78);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactInstrumentation = _dereq_(73);
+
+var createMicrosoftUnsafeLocalFunction = _dereq_(120);
+var setInnerHTML = _dereq_(142);
+var setTextContent = _dereq_(143);
+
+function getNodeAfter(parentNode, node) {
+  // Special case for text components, which return [open, close] comments
+  // from getHostNode.
+  if (Array.isArray(node)) {
+    node = node[1];
+  }
+  return node ? node.nextSibling : parentNode.firstChild;
+}
+
+/**
+ * Inserts `childNode` as a child of `parentNode` at the `index`.
+ *
+ * @param {DOMElement} parentNode Parent node in which to insert.
+ * @param {DOMElement} childNode Child node to insert.
+ * @param {number} index Index at which to insert the child.
+ * @internal
+ */
+var insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {
+  // We rely exclusively on `insertBefore(node, null)` instead of also using
+  // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so
+  // we are careful to use `null`.)
+  parentNode.insertBefore(childNode, referenceNode);
+});
+
+function insertLazyTreeChildAt(parentNode, childTree, referenceNode) {
+  DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);
+}
+
+function moveChild(parentNode, childNode, referenceNode) {
+  if (Array.isArray(childNode)) {
+    moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);
+  } else {
+    insertChildAt(parentNode, childNode, referenceNode);
+  }
+}
+
+function removeChild(parentNode, childNode) {
+  if (Array.isArray(childNode)) {
+    var closingComment = childNode[1];
+    childNode = childNode[0];
+    removeDelimitedText(parentNode, childNode, closingComment);
+    parentNode.removeChild(closingComment);
+  }
+  parentNode.removeChild(childNode);
+}
+
+function moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {
+  var node = openingComment;
+  while (true) {
+    var nextNode = node.nextSibling;
+    insertChildAt(parentNode, node, referenceNode);
+    if (node === closingComment) {
+      break;
+    }
+    node = nextNode;
+  }
+}
+
+function removeDelimitedText(parentNode, startNode, closingComment) {
+  while (true) {
+    var node = startNode.nextSibling;
+    if (node === closingComment) {
+      // The closing comment is removed by ReactMultiChild.
+      break;
+    } else {
+      parentNode.removeChild(node);
+    }
+  }
+}
+
+function replaceDelimitedText(openingComment, closingComment, stringText) {
+  var parentNode = openingComment.parentNode;
+  var nodeAfterComment = openingComment.nextSibling;
+  if (nodeAfterComment === closingComment) {
+    // There are no text nodes between the opening and closing comments; insert
+    // a new one if stringText isn't empty.
+    if (stringText) {
+      insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);
+    }
+  } else {
+    if (stringText) {
+      // Set the text content of the first node after the opening comment, and
+      // remove all following nodes up until the closing comment.
+      setTextContent(nodeAfterComment, stringText);
+      removeDelimitedText(parentNode, nodeAfterComment, closingComment);
+    } else {
+      removeDelimitedText(parentNode, openingComment, closingComment);
+    }
+  }
+
+  if ("development" !== 'production') {
+    ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
+  }
+}
+
+var dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;
+if ("development" !== 'production') {
+  dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
+    Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
+    if (prevInstance._debugID !== 0) {
+      ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());
+    } else {
+      var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);
+      if (nextInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());
+      }
+    }
+  };
+}
+
+/**
+ * Operations for updating with DOM children.
+ */
+var DOMChildrenOperations = {
+
+  dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,
+
+  replaceDelimitedText: replaceDelimitedText,
+
+  /**
+   * Updates a component's children by processing a series of updates. The
+   * update configurations are each expected to have a `parentNode` property.
+   *
+   * @param {array<object>} updates List of update configurations.
+   * @internal
+   */
+  processUpdates: function (parentNode, updates) {
+    if ("development" !== 'production') {
+      var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;
+    }
+
+    for (var k = 0; k < updates.length; k++) {
+      var update = updates[k];
+      switch (update.type) {
+        case ReactMultiChildUpdateTypes.INSERT_MARKUP:
+          insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
+          if ("development" !== 'production') {
+            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
+          }
+          break;
+        case ReactMultiChildUpdateTypes.MOVE_EXISTING:
+          moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
+          if ("development" !== 'production') {
+            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
+          }
+          break;
+        case ReactMultiChildUpdateTypes.SET_MARKUP:
+          setInnerHTML(parentNode, update.content);
+          if ("development" !== 'production') {
+            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());
+          }
+          break;
+        case ReactMultiChildUpdateTypes.TEXT_CONTENT:
+          setTextContent(parentNode, update.content);
+          if ("development" !== 'production') {
+            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());
+          }
+          break;
+        case ReactMultiChildUpdateTypes.REMOVE_NODE:
+          removeChild(parentNode, update.fromNode);
+          if ("development" !== 'production') {
+            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
+          }
+          break;
+      }
+    }
+  }
+
+};
+
+module.exports = DOMChildrenOperations;
+},{"12":12,"120":120,"142":142,"143":143,"42":42,"73":73,"78":78,"8":8}],8:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DOMLazyTree
+ */
+
+'use strict';
+
+var DOMNamespaces = _dereq_(9);
+var setInnerHTML = _dereq_(142);
+
+var createMicrosoftUnsafeLocalFunction = _dereq_(120);
+var setTextContent = _dereq_(143);
+
+var ELEMENT_NODE_TYPE = 1;
+var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
+
+/**
+ * In IE (8-11) and Edge, appending nodes with no children is dramatically
+ * faster than appending a full subtree, so we essentially queue up the
+ * .appendChild calls here and apply them so each node is added to its parent
+ * before any children are added.
+ *
+ * In other browsers, doing so is slower or neutral compared to the other order
+ * (in Firefox, twice as slow) so we only do this inversion in IE.
+ *
+ * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.
+ */
+var enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\bEdge\/\d/.test(navigator.userAgent);
+
+function insertTreeChildren(tree) {
+  if (!enableLazy) {
+    return;
+  }
+  var node = tree.node;
+  var children = tree.children;
+  if (children.length) {
+    for (var i = 0; i < children.length; i++) {
+      insertTreeBefore(node, children[i], null);
+    }
+  } else if (tree.html != null) {
+    setInnerHTML(node, tree.html);
+  } else if (tree.text != null) {
+    setTextContent(node, tree.text);
+  }
+}
+
+var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {
+  // DocumentFragments aren't actually part of the DOM after insertion so
+  // appending children won't update the DOM. We need to ensure the fragment
+  // is properly populated first, breaking out of our lazy approach for just
+  // this level. Also, some <object> plugins (like Flash Player) will read
+  // <param> nodes immediately upon insertion into the DOM, so <object>
+  // must also be populated prior to insertion into the DOM.
+  if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {
+    insertTreeChildren(tree);
+    parentNode.insertBefore(tree.node, referenceNode);
+  } else {
+    parentNode.insertBefore(tree.node, referenceNode);
+    insertTreeChildren(tree);
+  }
+});
+
+function replaceChildWithTree(oldNode, newTree) {
+  oldNode.parentNode.replaceChild(newTree.node, oldNode);
+  insertTreeChildren(newTree);
+}
+
+function queueChild(parentTree, childTree) {
+  if (enableLazy) {
+    parentTree.children.push(childTree);
+  } else {
+    parentTree.node.appendChild(childTree.node);
+  }
+}
+
+function queueHTML(tree, html) {
+  if (enableLazy) {
+    tree.html = html;
+  } else {
+    setInnerHTML(tree.node, html);
+  }
+}
+
+function queueText(tree, text) {
+  if (enableLazy) {
+    tree.text = text;
+  } else {
+    setTextContent(tree.node, text);
+  }
+}
+
+function toString() {
+  return this.node.nodeName;
+}
+
+function DOMLazyTree(node) {
+  return {
+    node: node,
+    children: [],
+    html: null,
+    text: null,
+    toString: toString
+  };
+}
+
+DOMLazyTree.insertTreeBefore = insertTreeBefore;
+DOMLazyTree.replaceChildWithTree = replaceChildWithTree;
+DOMLazyTree.queueChild = queueChild;
+DOMLazyTree.queueHTML = queueHTML;
+DOMLazyTree.queueText = queueText;
+
+module.exports = DOMLazyTree;
+},{"120":120,"142":142,"143":143,"9":9}],9:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DOMNamespaces
+ */
+
+'use strict';
+
+var DOMNamespaces = {
+  html: 'http://www.w3.org/1999/xhtml',
+  mathml: 'http://www.w3.org/1998/Math/MathML',
+  svg: 'http://www.w3.org/2000/svg'
+};
+
+module.exports = DOMNamespaces;
+},{}],10:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DOMProperty
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+function checkMask(value, bitmask) {
+  return (value & bitmask) === bitmask;
+}
+
+var DOMPropertyInjection = {
+  /**
+   * Mapping from normalized, camelcased property names to a configuration that
+   * specifies how the associated DOM property should be accessed or rendered.
+   */
+  MUST_USE_PROPERTY: 0x1,
+  HAS_BOOLEAN_VALUE: 0x4,
+  HAS_NUMERIC_VALUE: 0x8,
+  HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,
+  HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,
+
+  /**
+   * Inject some specialized knowledge about the DOM. This takes a config object
+   * with the following properties:
+   *
+   * isCustomAttribute: function that given an attribute name will return true
+   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
+   * attributes where it's impossible to enumerate all of the possible
+   * attribute names,
+   *
+   * Properties: object mapping DOM property name to one of the
+   * DOMPropertyInjection constants or null. If your attribute isn't in here,
+   * it won't get written to the DOM.
+   *
+   * DOMAttributeNames: object mapping React attribute name to the DOM
+   * attribute name. Attribute names not specified use the **lowercase**
+   * normalized name.
+   *
+   * DOMAttributeNamespaces: object mapping React attribute name to the DOM
+   * attribute namespace URL. (Attribute names not specified use no namespace.)
+   *
+   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
+   * Property names not specified use the normalized name.
+   *
+   * DOMMutationMethods: Properties that require special mutation methods. If
+   * `value` is undefined, the mutation method should unset the property.
+   *
+   * @param {object} domPropertyConfig the config as described above.
+   */
+  injectDOMPropertyConfig: function (domPropertyConfig) {
+    var Injection = DOMPropertyInjection;
+    var Properties = domPropertyConfig.Properties || {};
+    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
+    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
+    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
+    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
+
+    if (domPropertyConfig.isCustomAttribute) {
+      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
+    }
+
+    for (var propName in Properties) {
+      !!DOMProperty.properties.hasOwnProperty(propName) ? "development" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property \'%s\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;
+
+      var lowerCased = propName.toLowerCase();
+      var propConfig = Properties[propName];
+
+      var propertyInfo = {
+        attributeName: lowerCased,
+        attributeNamespace: null,
+        propertyName: propName,
+        mutationMethod: null,
+
+        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
+        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
+        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
+        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
+        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
+      };
+      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;
+
+      if ("development" !== 'production') {
+        DOMProperty.getPossibleStandardName[lowerCased] = propName;
+      }
+
+      if (DOMAttributeNames.hasOwnProperty(propName)) {
+        var attributeName = DOMAttributeNames[propName];
+        propertyInfo.attributeName = attributeName;
+        if ("development" !== 'production') {
+          DOMProperty.getPossibleStandardName[attributeName] = propName;
+        }
+      }
+
+      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
+        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
+      }
+
+      if (DOMPropertyNames.hasOwnProperty(propName)) {
+        propertyInfo.propertyName = DOMPropertyNames[propName];
+      }
+
+      if (DOMMutationMethods.hasOwnProperty(propName)) {
+        propertyInfo.mutationMethod = DOMMutationMethods[propName];
+      }
+
+      DOMProperty.properties[propName] = propertyInfo;
+    }
+  }
+};
+
+/* eslint-disable max-len */
+var ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
+/* eslint-enable max-len */
+
+/**
+ * DOMProperty exports lookup objects that can be used like functions:
+ *
+ *   > DOMProperty.isValid['id']
+ *   true
+ *   > DOMProperty.isValid['foobar']
+ *   undefined
+ *
+ * Although this may be confusing, it performs better in general.
+ *
+ * @see http://jsperf.com/key-exists
+ * @see http://jsperf.com/key-missing
+ */
+var DOMProperty = {
+
+  ID_ATTRIBUTE_NAME: 'data-reactid',
+  ROOT_ATTRIBUTE_NAME: 'data-reactroot',
+
+  ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
+  ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
+
+  /**
+   * Map from property "standard name" to an object with info about how to set
+   * the property in the DOM. Each object contains:
+   *
+   * attributeName:
+   *   Used when rendering markup or with `*Attribute()`.
+   * attributeNamespace
+   * propertyName:
+   *   Used on DOM node instances. (This includes properties that mutate due to
+   *   external factors.)
+   * mutationMethod:
+   *   If non-null, used instead of the property or `setAttribute()` after
+   *   initial render.
+   * mustUseProperty:
+   *   Whether the property must be accessed and mutated as an object property.
+   * hasBooleanValue:
+   *   Whether the property should be removed when set to a falsey value.
+   * hasNumericValue:
+   *   Whether the property must be numeric or parse as a numeric and should be
+   *   removed when set to a falsey value.
+   * hasPositiveNumericValue:
+   *   Whether the property must be positive numeric or parse as a positive
+   *   numeric and should be removed when set to a falsey value.
+   * hasOverloadedBooleanValue:
+   *   Whether the property can be used as a flag as well as with a value.
+   *   Removed when strictly equal to false; present without a value when
+   *   strictly equal to true; present with a value otherwise.
+   */
+  properties: {},
+
+  /**
+   * Mapping from lowercase property names to the properly cased version, used
+   * to warn in the case of missing properties. Available only in __DEV__.
+   * @type {Object}
+   */
+  getPossibleStandardName: "development" !== 'production' ? {} : null,
+
+  /**
+   * All of the isCustomAttribute() functions that have been injected.
+   */
+  _isCustomAttributeFunctions: [],
+
+  /**
+   * Checks whether a property name is a custom attribute.
+   * @method
+   */
+  isCustomAttribute: function (attributeName) {
+    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
+      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
+      if (isCustomAttributeFn(attributeName)) {
+        return true;
+      }
+    }
+    return false;
+  },
+
+  injection: DOMPropertyInjection
+};
+
+module.exports = DOMProperty;
+},{"140":140,"162":162}],11:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DOMPropertyOperations
+ */
+
+'use strict';
+
+var DOMProperty = _dereq_(10);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactInstrumentation = _dereq_(73);
+
+var quoteAttributeValueForBrowser = _dereq_(139);
+var warning = _dereq_(171);
+
+var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
+var illegalAttributeNameCache = {};
+var validatedAttributeNameCache = {};
+
+function isAttributeNameSafe(attributeName) {
+  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {
+    return true;
+  }
+  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {
+    return false;
+  }
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
+    validatedAttributeNameCache[attributeName] = true;
+    return true;
+  }
+  illegalAttributeNameCache[attributeName] = true;
+  "development" !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;
+  return false;
+}
+
+function shouldIgnoreValue(propertyInfo, value) {
+  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;
+}
+
+/**
+ * Operations for dealing with DOM properties.
+ */
+var DOMPropertyOperations = {
+
+  /**
+   * Creates markup for the ID property.
+   *
+   * @param {string} id Unescaped ID.
+   * @return {string} Markup string.
+   */
+  createMarkupForID: function (id) {
+    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
+  },
+
+  setAttributeForID: function (node, id) {
+    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);
+  },
+
+  createMarkupForRoot: function () {
+    return DOMProperty.ROOT_ATTRIBUTE_NAME + '=""';
+  },
+
+  setAttributeForRoot: function (node) {
+    node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');
+  },
+
+  /**
+   * Creates markup for a property.
+   *
+   * @param {string} name
+   * @param {*} value
+   * @return {?string} Markup string, or null if the property was invalid.
+   */
+  createMarkupForProperty: function (name, value) {
+    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+    if (propertyInfo) {
+      if (shouldIgnoreValue(propertyInfo, value)) {
+        return '';
+      }
+      var attributeName = propertyInfo.attributeName;
+      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
+        return attributeName + '=""';
+      }
+      return attributeName + '=' + quoteAttributeValueForBrowser(value);
+    } else if (DOMProperty.isCustomAttribute(name)) {
+      if (value == null) {
+        return '';
+      }
+      return name + '=' + quoteAttributeValueForBrowser(value);
+    }
+    return null;
+  },
+
+  /**
+   * Creates markup for a custom property.
+   *
+   * @param {string} name
+   * @param {*} value
+   * @return {string} Markup string, or empty string if the property was invalid.
+   */
+  createMarkupForCustomAttribute: function (name, value) {
+    if (!isAttributeNameSafe(name) || value == null) {
+      return '';
+    }
+    return name + '=' + quoteAttributeValueForBrowser(value);
+  },
+
+  /**
+   * Sets the value for a property on a node.
+   *
+   * @param {DOMElement} node
+   * @param {string} name
+   * @param {*} value
+   */
+  setValueForProperty: function (node, name, value) {
+    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+    if (propertyInfo) {
+      var mutationMethod = propertyInfo.mutationMethod;
+      if (mutationMethod) {
+        mutationMethod(node, value);
+      } else if (shouldIgnoreValue(propertyInfo, value)) {
+        this.deleteValueForProperty(node, name);
+        return;
+      } else if (propertyInfo.mustUseProperty) {
+        // Contrary to `setAttribute`, object properties are properly
+        // `toString`ed by IE8/9.
+        node[propertyInfo.propertyName] = value;
+      } else {
+        var attributeName = propertyInfo.attributeName;
+        var namespace = propertyInfo.attributeNamespace;
+        // `setAttribute` with objects becomes only `[object]` in IE8/9,
+        // ('' + value) makes it output the correct toString()-value.
+        if (namespace) {
+          node.setAttributeNS(namespace, attributeName, '' + value);
+        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
+          node.setAttribute(attributeName, '');
+        } else {
+          node.setAttribute(attributeName, '' + value);
+        }
+      }
+    } else if (DOMProperty.isCustomAttribute(name)) {
+      DOMPropertyOperations.setValueForAttribute(node, name, value);
+      return;
+    }
+
+    if ("development" !== 'production') {
+      var payload = {};
+      payload[name] = value;
+      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
+    }
+  },
+
+  setValueForAttribute: function (node, name, value) {
+    if (!isAttributeNameSafe(name)) {
+      return;
+    }
+    if (value == null) {
+      node.removeAttribute(name);
+    } else {
+      node.setAttribute(name, '' + value);
+    }
+
+    if ("development" !== 'production') {
+      var payload = {};
+      payload[name] = value;
+      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
+    }
+  },
+
+  /**
+   * Deletes an attributes from a node.
+   *
+   * @param {DOMElement} node
+   * @param {string} name
+   */
+  deleteValueForAttribute: function (node, name) {
+    node.removeAttribute(name);
+    if ("development" !== 'production') {
+      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
+    }
+  },
+
+  /**
+   * Deletes the value for a property on a node.
+   *
+   * @param {DOMElement} node
+   * @param {string} name
+   */
+  deleteValueForProperty: function (node, name) {
+    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+    if (propertyInfo) {
+      var mutationMethod = propertyInfo.mutationMethod;
+      if (mutationMethod) {
+        mutationMethod(node, undefined);
+      } else if (propertyInfo.mustUseProperty) {
+        var propName = propertyInfo.propertyName;
+        if (propertyInfo.hasBooleanValue) {
+          node[propName] = false;
+        } else {
+          node[propName] = '';
+        }
+      } else {
+        node.removeAttribute(propertyInfo.attributeName);
+      }
+    } else if (DOMProperty.isCustomAttribute(name)) {
+      node.removeAttribute(name);
+    }
+
+    if ("development" !== 'production') {
+      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
+    }
+  }
+
+};
+
+module.exports = DOMPropertyOperations;
+},{"10":10,"139":139,"171":171,"42":42,"73":73}],12:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule Danger
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var DOMLazyTree = _dereq_(8);
+var ExecutionEnvironment = _dereq_(148);
+
+var createNodesFromMarkup = _dereq_(153);
+var emptyFunction = _dereq_(154);
+var invariant = _dereq_(162);
+
+var Danger = {
+
+  /**
+   * Replaces a node with a string of markup at its current position within its
+   * parent. The markup must render into a single root node.
+   *
+   * @param {DOMElement} oldChild Child node to replace.
+   * @param {string} markup Markup to render in place of the child node.
+   * @internal
+   */
+  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
+    !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;
+    !markup ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;
+    !(oldChild.nodeName !== 'HTML') ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;
+
+    if (typeof markup === 'string') {
+      var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
+      oldChild.parentNode.replaceChild(newChild, oldChild);
+    } else {
+      DOMLazyTree.replaceChildWithTree(oldChild, markup);
+    }
+  }
+
+};
+
+module.exports = Danger;
+},{"140":140,"148":148,"153":153,"154":154,"162":162,"8":8}],13:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DefaultEventPluginOrder
+ */
+
+'use strict';
+
+var keyOf = _dereq_(166);
+
+/**
+ * Module that is injectable into `EventPluginHub`, that specifies a
+ * deterministic ordering of `EventPlugin`s. A convenient way to reason about
+ * plugins, without having to package every one of them. This is better than
+ * having plugins be ordered in the same order that they are injected because
+ * that ordering would be influenced by the packaging order.
+ * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
+ * preventing default on events is convenient in `SimpleEventPlugin` handlers.
+ */
+var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
+
+module.exports = DefaultEventPluginOrder;
+},{"166":166}],14:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule DisabledInputUtils
+ */
+
+'use strict';
+
+var disableableMouseListenerNames = {
+  onClick: true,
+  onDoubleClick: true,
+  onMouseDown: true,
+  onMouseMove: true,
+  onMouseUp: true,
+
+  onClickCapture: true,
+  onDoubleClickCapture: true,
+  onMouseDownCapture: true,
+  onMouseMoveCapture: true,
+  onMouseUpCapture: true
+};
+
+/**
+ * Implements a host component that does not receive mouse events
+ * when `disabled` is set.
+ */
+var DisabledInputUtils = {
+  getHostProps: function (inst, props) {
+    if (!props.disabled) {
+      return props;
+    }
+
+    // Copy the props, except the mouse listeners
+    var hostProps = {};
+    for (var key in props) {
+      if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {
+        hostProps[key] = props[key];
+      }
+    }
+
+    return hostProps;
+  }
+};
+
+module.exports = DisabledInputUtils;
+},{}],15:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EnterLeaveEventPlugin
+ */
+
+'use strict';
+
+var EventConstants = _dereq_(16);
+var EventPropagators = _dereq_(20);
+var ReactDOMComponentTree = _dereq_(42);
+var SyntheticMouseEvent = _dereq_(109);
+
+var keyOf = _dereq_(166);
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+var eventTypes = {
+  mouseEnter: {
+    registrationName: keyOf({ onMouseEnter: null }),
+    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
+  },
+  mouseLeave: {
+    registrationName: keyOf({ onMouseLeave: null }),
+    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
+  }
+};
+
+var EnterLeaveEventPlugin = {
+
+  eventTypes: eventTypes,
+
+  /**
+   * For almost every interaction we care about, there will be both a top-level
+   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
+   * we do not extract duplicate events. However, moving the mouse into the
+   * browser from outside will not fire a `mouseout` event. In this case, we use
+   * the `mouseover` top-level event.
+   */
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
+      return null;
+    }
+    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
+      // Must not be a mouse in or mouse out - ignoring.
+      return null;
+    }
+
+    var win;
+    if (nativeEventTarget.window === nativeEventTarget) {
+      // `nativeEventTarget` is probably a window object.
+      win = nativeEventTarget;
+    } else {
+      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
+      var doc = nativeEventTarget.ownerDocument;
+      if (doc) {
+        win = doc.defaultView || doc.parentWindow;
+      } else {
+        win = window;
+      }
+    }
+
+    var from;
+    var to;
+    if (topLevelType === topLevelTypes.topMouseOut) {
+      from = targetInst;
+      var related = nativeEvent.relatedTarget || nativeEvent.toElement;
+      to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;
+    } else {
+      // Moving to a node from outside the window.
+      from = null;
+      to = targetInst;
+    }
+
+    if (from === to) {
+      // Nothing pertains to our managed components.
+      return null;
+    }
+
+    var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);
+    var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);
+
+    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);
+    leave.type = 'mouseleave';
+    leave.target = fromNode;
+    leave.relatedTarget = toNode;
+
+    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);
+    enter.type = 'mouseenter';
+    enter.target = toNode;
+    enter.relatedTarget = fromNode;
+
+    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);
+
+    return [leave, enter];
+  }
+
+};
+
+module.exports = EnterLeaveEventPlugin;
+},{"109":109,"16":16,"166":166,"20":20,"42":42}],16:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EventConstants
+ */
+
+'use strict';
+
+var keyMirror = _dereq_(165);
+
+var PropagationPhases = keyMirror({ bubbled: null, captured: null });
+
+/**
+ * Types of raw signals from the browser caught at the top level.
+ */
+var topLevelTypes = keyMirror({
+  topAbort: null,
+  topAnimationEnd: null,
+  topAnimationIteration: null,
+  topAnimationStart: null,
+  topBlur: null,
+  topCanPlay: null,
+  topCanPlayThrough: null,
+  topChange: null,
+  topClick: null,
+  topCompositionEnd: null,
+  topCompositionStart: null,
+  topCompositionUpdate: null,
+  topContextMenu: null,
+  topCopy: null,
+  topCut: null,
+  topDoubleClick: null,
+  topDrag: null,
+  topDragEnd: null,
+  topDragEnter: null,
+  topDragExit: null,
+  topDragLeave: null,
+  topDragOver: null,
+  topDragStart: null,
+  topDrop: null,
+  topDurationChange: null,
+  topEmptied: null,
+  topEncrypted: null,
+  topEnded: null,
+  topError: null,
+  topFocus: null,
+  topInput: null,
+  topInvalid: null,
+  topKeyDown: null,
+  topKeyPress: null,
+  topKeyUp: null,
+  topLoad: null,
+  topLoadedData: null,
+  topLoadedMetadata: null,
+  topLoadStart: null,
+  topMouseDown: null,
+  topMouseMove: null,
+  topMouseOut: null,
+  topMouseOver: null,
+  topMouseUp: null,
+  topPaste: null,
+  topPause: null,
+  topPlay: null,
+  topPlaying: null,
+  topProgress: null,
+  topRateChange: null,
+  topReset: null,
+  topScroll: null,
+  topSeeked: null,
+  topSeeking: null,
+  topSelectionChange: null,
+  topStalled: null,
+  topSubmit: null,
+  topSuspend: null,
+  topTextInput: null,
+  topTimeUpdate: null,
+  topTouchCancel: null,
+  topTouchEnd: null,
+  topTouchMove: null,
+  topTouchStart: null,
+  topTransitionEnd: null,
+  topVolumeChange: null,
+  topWaiting: null,
+  topWheel: null
+});
+
+var EventConstants = {
+  topLevelTypes: topLevelTypes,
+  PropagationPhases: PropagationPhases
+};
+
+module.exports = EventConstants;
+},{"165":165}],17:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EventPluginHub
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var EventPluginRegistry = _dereq_(18);
+var EventPluginUtils = _dereq_(19);
+var ReactErrorUtils = _dereq_(64);
+
+var accumulateInto = _dereq_(116);
+var forEachAccumulated = _dereq_(125);
+var invariant = _dereq_(162);
+
+/**
+ * Internal store for event listeners
+ */
+var listenerBank = {};
+
+/**
+ * Internal queue of events that have accumulated their dispatches and are
+ * waiting to have their dispatches executed.
+ */
+var eventQueue = null;
+
+/**
+ * Dispatches an event and releases it back into the pool, unless persistent.
+ *
+ * @param {?object} event Synthetic event to be dispatched.
+ * @param {boolean} simulated If the event is simulated (changes exn behavior)
+ * @private
+ */
+var executeDispatchesAndRelease = function (event, simulated) {
+  if (event) {
+    EventPluginUtils.executeDispatchesInOrder(event, simulated);
+
+    if (!event.isPersistent()) {
+      event.constructor.release(event);
+    }
+  }
+};
+var executeDispatchesAndReleaseSimulated = function (e) {
+  return executeDispatchesAndRelease(e, true);
+};
+var executeDispatchesAndReleaseTopLevel = function (e) {
+  return executeDispatchesAndRelease(e, false);
+};
+
+var getDictionaryKey = function (inst) {
+  // Prevents V8 performance issue:
+  // https://github.com/facebook/react/pull/7232
+  return '.' + inst._rootNodeID;
+};
+
+/**
+ * This is a unified interface for event plugins to be installed and configured.
+ *
+ * Event plugins can implement the following properties:
+ *
+ *   `extractEvents` {function(string, DOMEventTarget, string, object): *}
+ *     Required. When a top-level event is fired, this method is expected to
+ *     extract synthetic events that will in turn be queued and dispatched.
+ *
+ *   `eventTypes` {object}
+ *     Optional, plugins that fire events must publish a mapping of registration
+ *     names that are used to register listeners. Values of this mapping must
+ *     be objects that contain `registrationName` or `phasedRegistrationNames`.
+ *
+ *   `executeDispatch` {function(object, function, string)}
+ *     Optional, allows plugins to override how an event gets dispatched. By
+ *     default, the listener is simply invoked.
+ *
+ * Each plugin that is injected into `EventsPluginHub` is immediately operable.
+ *
+ * @public
+ */
+var EventPluginHub = {
+
+  /**
+   * Methods for injecting dependencies.
+   */
+  injection: {
+
+    /**
+     * @param {array} InjectedEventPluginOrder
+     * @public
+     */
+    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
+
+    /**
+     * @param {object} injectedNamesToPlugins Map from names to plugin modules.
+     */
+    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
+
+  },
+
+  /**
+   * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.
+   *
+   * @param {object} inst The instance, which is the source of events.
+   * @param {string} registrationName Name of listener (e.g. `onClick`).
+   * @param {function} listener The callback to store.
+   */
+  putListener: function (inst, registrationName, listener) {
+    !(typeof listener === 'function') ? "development" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;
+
+    var key = getDictionaryKey(inst);
+    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
+    bankForRegistrationName[key] = listener;
+
+    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+    if (PluginModule && PluginModule.didPutListener) {
+      PluginModule.didPutListener(inst, registrationName, listener);
+    }
+  },
+
+  /**
+   * @param {object} inst The instance, which is the source of events.
+   * @param {string} registrationName Name of listener (e.g. `onClick`).
+   * @return {?function} The stored callback.
+   */
+  getListener: function (inst, registrationName) {
+    var bankForRegistrationName = listenerBank[registrationName];
+    var key = getDictionaryKey(inst);
+    return bankForRegistrationName && bankForRegistrationName[key];
+  },
+
+  /**
+   * Deletes a listener from the registration bank.
+   *
+   * @param {object} inst The instance, which is the source of events.
+   * @param {string} registrationName Name of listener (e.g. `onClick`).
+   */
+  deleteListener: function (inst, registrationName) {
+    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+    if (PluginModule && PluginModule.willDeleteListener) {
+      PluginModule.willDeleteListener(inst, registrationName);
+    }
+
+    var bankForRegistrationName = listenerBank[registrationName];
+    // TODO: This should never be null -- when is it?
+    if (bankForRegistrationName) {
+      var key = getDictionaryKey(inst);
+      delete bankForRegistrationName[key];
+    }
+  },
+
+  /**
+   * Deletes all listeners for the DOM element with the supplied ID.
+   *
+   * @param {object} inst The instance, which is the source of events.
+   */
+  deleteAllListeners: function (inst) {
+    var key = getDictionaryKey(inst);
+    for (var registrationName in listenerBank) {
+      if (!listenerBank.hasOwnProperty(registrationName)) {
+        continue;
+      }
+
+      if (!listenerBank[registrationName][key]) {
+        continue;
+      }
+
+      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+      if (PluginModule && PluginModule.willDeleteListener) {
+        PluginModule.willDeleteListener(inst, registrationName);
+      }
+
+      delete listenerBank[registrationName][key];
+    }
+  },
+
+  /**
+   * Allows registered plugins an opportunity to extract events from top-level
+   * native browser events.
+   *
+   * @return {*} An accumulation of synthetic events.
+   * @internal
+   */
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    var events;
+    var plugins = EventPluginRegistry.plugins;
+    for (var i = 0; i < plugins.length; i++) {
+      // Not every plugin in the ordering may be loaded at runtime.
+      var possiblePlugin = plugins[i];
+      if (possiblePlugin) {
+        var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
+        if (extractedEvents) {
+          events = accumulateInto(events, extractedEvents);
+        }
+      }
+    }
+    return events;
+  },
+
+  /**
+   * Enqueues a synthetic event that should be dispatched when
+   * `processEventQueue` is invoked.
+   *
+   * @param {*} events An accumulation of synthetic events.
+   * @internal
+   */
+  enqueueEvents: function (events) {
+    if (events) {
+      eventQueue = accumulateInto(eventQueue, events);
+    }
+  },
+
+  /**
+   * Dispatches all synthetic events on the event queue.
+   *
+   * @internal
+   */
+  processEventQueue: function (simulated) {
+    // Set `eventQueue` to null before processing it so that we can tell if more
+    // events get enqueued while processing.
+    var processingEventQueue = eventQueue;
+    eventQueue = null;
+    if (simulated) {
+      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);
+    } else {
+      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
+    }
+    !!eventQueue ? "development" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;
+    // This would be a good time to rethrow if any of the event handlers threw.
+    ReactErrorUtils.rethrowCaughtError();
+  },
+
+  /**
+   * These are needed for tests only. Do not use!
+   */
+  __purge: function () {
+    listenerBank = {};
+  },
+
+  __getListenerBank: function () {
+    return listenerBank;
+  }
+
+};
+
+module.exports = EventPluginHub;
+},{"116":116,"125":125,"140":140,"162":162,"18":18,"19":19,"64":64}],18:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EventPluginRegistry
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * Injectable ordering of event plugins.
+ */
+var EventPluginOrder = null;
+
+/**
+ * Injectable mapping from names to event plugin modules.
+ */
+var namesToPlugins = {};
+
+/**
+ * Recomputes the plugin list using the injected plugins and plugin ordering.
+ *
+ * @private
+ */
+function recomputePluginOrdering() {
+  if (!EventPluginOrder) {
+    // Wait until an `EventPluginOrder` is injected.
+    return;
+  }
+  for (var pluginName in namesToPlugins) {
+    var PluginModule = namesToPlugins[pluginName];
+    var pluginIndex = EventPluginOrder.indexOf(pluginName);
+    !(pluginIndex > -1) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;
+    if (EventPluginRegistry.plugins[pluginIndex]) {
+      continue;
+    }
+    !PluginModule.extractEvents ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;
+    EventPluginRegistry.plugins[pluginIndex] = PluginModule;
+    var publishedEvents = PluginModule.eventTypes;
+    for (var eventName in publishedEvents) {
+      !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;
+    }
+  }
+}
+
+/**
+ * Publishes an event so that it can be dispatched by the supplied plugin.
+ *
+ * @param {object} dispatchConfig Dispatch configuration for the event.
+ * @param {object} PluginModule Plugin publishing the event.
+ * @return {boolean} True if the event was successfully published.
+ * @private
+ */
+function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
+  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;
+  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
+
+  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
+  if (phasedRegistrationNames) {
+    for (var phaseName in phasedRegistrationNames) {
+      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
+        var phasedRegistrationName = phasedRegistrationNames[phaseName];
+        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
+      }
+    }
+    return true;
+  } else if (dispatchConfig.registrationName) {
+    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
+    return true;
+  }
+  return false;
+}
+
+/**
+ * Publishes a registration name that is used to identify dispatched events and
+ * can be used with `EventPluginHub.putListener` to register listeners.
+ *
+ * @param {string} registrationName Registration name to add.
+ * @param {object} PluginModule Plugin publishing the event.
+ * @private
+ */
+function publishRegistrationName(registrationName, PluginModule, eventName) {
+  !!EventPluginRegistry.registrationNameModules[registrationName] ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;
+  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
+  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
+
+  if ("development" !== 'production') {
+    var lowerCasedName = registrationName.toLowerCase();
+    EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
+
+    if (registrationName === 'onDoubleClick') {
+      EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
+    }
+  }
+}
+
+/**
+ * Registers plugins so that they can extract and dispatch events.
+ *
+ * @see {EventPluginHub}
+ */
+var EventPluginRegistry = {
+
+  /**
+   * Ordered list of injected plugins.
+   */
+  plugins: [],
+
+  /**
+   * Mapping from event name to dispatch config
+   */
+  eventNameDispatchConfigs: {},
+
+  /**
+   * Mapping from registration name to plugin module
+   */
+  registrationNameModules: {},
+
+  /**
+   * Mapping from registration name to event name
+   */
+  registrationNameDependencies: {},
+
+  /**
+   * Mapping from lowercase registration names to the properly cased version,
+   * used to warn in the case of missing event handlers. Available
+   * only in __DEV__.
+   * @type {Object}
+   */
+  possibleRegistrationNames: "development" !== 'production' ? {} : null,
+
+  /**
+   * Injects an ordering of plugins (by plugin name). This allows the ordering
+   * to be decoupled from injection of the actual plugins so that ordering is
+   * always deterministic regardless of packaging, on-the-fly injection, etc.
+   *
+   * @param {array} InjectedEventPluginOrder
+   * @internal
+   * @see {EventPluginHub.injection.injectEventPluginOrder}
+   */
+  injectEventPluginOrder: function (InjectedEventPluginOrder) {
+    !!EventPluginOrder ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;
+    // Clone the ordering so it cannot be dynamically mutated.
+    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
+    recomputePluginOrdering();
+  },
+
+  /**
+   * Injects plugins to be used by `EventPluginHub`. The plugin names must be
+   * in the ordering injected by `injectEventPluginOrder`.
+   *
+   * Plugins can be injected as part of page initialization or on-the-fly.
+   *
+   * @param {object} injectedNamesToPlugins Map from names to plugin modules.
+   * @internal
+   * @see {EventPluginHub.injection.injectEventPluginsByName}
+   */
+  injectEventPluginsByName: function (injectedNamesToPlugins) {
+    var isOrderingDirty = false;
+    for (var pluginName in injectedNamesToPlugins) {
+      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
+        continue;
+      }
+      var PluginModule = injectedNamesToPlugins[pluginName];
+      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
+        !!namesToPlugins[pluginName] ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;
+        namesToPlugins[pluginName] = PluginModule;
+        isOrderingDirty = true;
+      }
+    }
+    if (isOrderingDirty) {
+      recomputePluginOrdering();
+    }
+  },
+
+  /**
+   * Looks up the plugin for the supplied event.
+   *
+   * @param {object} event A synthetic event.
+   * @return {?object} The plugin that created the supplied event.
+   * @internal
+   */
+  getPluginModuleForEvent: function (event) {
+    var dispatchConfig = event.dispatchConfig;
+    if (dispatchConfig.registrationName) {
+      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
+    }
+    for (var phase in dispatchConfig.phasedRegistrationNames) {
+      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
+        continue;
+      }
+      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
+      if (PluginModule) {
+        return PluginModule;
+      }
+    }
+    return null;
+  },
+
+  /**
+   * Exposed for unit testing.
+   * @private
+   */
+  _resetEventPlugins: function () {
+    EventPluginOrder = null;
+    for (var pluginName in namesToPlugins) {
+      if (namesToPlugins.hasOwnProperty(pluginName)) {
+        delete namesToPlugins[pluginName];
+      }
+    }
+    EventPluginRegistry.plugins.length = 0;
+
+    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
+    for (var eventName in eventNameDispatchConfigs) {
+      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
+        delete eventNameDispatchConfigs[eventName];
+      }
+    }
+
+    var registrationNameModules = EventPluginRegistry.registrationNameModules;
+    for (var registrationName in registrationNameModules) {
+      if (registrationNameModules.hasOwnProperty(registrationName)) {
+        delete registrationNameModules[registrationName];
+      }
+    }
+
+    if ("development" !== 'production') {
+      var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;
+      for (var lowerCasedName in possibleRegistrationNames) {
+        if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {
+          delete possibleRegistrationNames[lowerCasedName];
+        }
+      }
+    }
+  }
+
+};
+
+module.exports = EventPluginRegistry;
+},{"140":140,"162":162}],19:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EventPluginUtils
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var EventConstants = _dereq_(16);
+var ReactErrorUtils = _dereq_(64);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+/**
+ * Injected dependencies:
+ */
+
+/**
+ * - `ComponentTree`: [required] Module that can convert between React instances
+ *   and actual node references.
+ */
+var ComponentTree;
+var TreeTraversal;
+var injection = {
+  injectComponentTree: function (Injected) {
+    ComponentTree = Injected;
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;
+    }
+  },
+  injectTreeTraversal: function (Injected) {
+    TreeTraversal = Injected;
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;
+    }
+  }
+};
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+function isEndish(topLevelType) {
+  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
+}
+
+function isMoveish(topLevelType) {
+  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
+}
+function isStartish(topLevelType) {
+  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
+}
+
+var validateEventDispatches;
+if ("development" !== 'production') {
+  validateEventDispatches = function (event) {
+    var dispatchListeners = event._dispatchListeners;
+    var dispatchInstances = event._dispatchInstances;
+
+    var listenersIsArr = Array.isArray(dispatchListeners);
+    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
+
+    var instancesIsArr = Array.isArray(dispatchInstances);
+    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;
+
+    "development" !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;
+  };
+}
+
+/**
+ * Dispatch the event to the listener.
+ * @param {SyntheticEvent} event SyntheticEvent to handle
+ * @param {boolean} simulated If the event is simulated (changes exn behavior)
+ * @param {function} listener Application-level callback
+ * @param {*} inst Internal component instance
+ */
+function executeDispatch(event, simulated, listener, inst) {
+  var type = event.type || 'unknown-event';
+  event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);
+  if (simulated) {
+    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);
+  } else {
+    ReactErrorUtils.invokeGuardedCallback(type, listener, event);
+  }
+  event.currentTarget = null;
+}
+
+/**
+ * Standard/simple iteration through an event's collected dispatches.
+ */
+function executeDispatchesInOrder(event, simulated) {
+  var dispatchListeners = event._dispatchListeners;
+  var dispatchInstances = event._dispatchInstances;
+  if ("development" !== 'production') {
+    validateEventDispatches(event);
+  }
+  if (Array.isArray(dispatchListeners)) {
+    for (var i = 0; i < dispatchListeners.length; i++) {
+      if (event.isPropagationStopped()) {
+        break;
+      }
+      // Listeners and Instances are two parallel arrays that are always in sync.
+      executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);
+    }
+  } else if (dispatchListeners) {
+    executeDispatch(event, simulated, dispatchListeners, dispatchInstances);
+  }
+  event._dispatchListeners = null;
+  event._dispatchInstances = null;
+}
+
+/**
+ * Standard/simple iteration through an event's collected dispatches, but stops
+ * at the first dispatch execution returning true, and returns that id.
+ *
+ * @return {?string} id of the first dispatch execution who's listener returns
+ * true, or null if no listener returned true.
+ */
+function executeDispatchesInOrderStopAtTrueImpl(event) {
+  var dispatchListeners = event._dispatchListeners;
+  var dispatchInstances = event._dispatchInstances;
+  if ("development" !== 'production') {
+    validateEventDispatches(event);
+  }
+  if (Array.isArray(dispatchListeners)) {
+    for (var i = 0; i < dispatchListeners.length; i++) {
+      if (event.isPropagationStopped()) {
+        break;
+      }
+      // Listeners and Instances are two parallel arrays that are always in sync.
+      if (dispatchListeners[i](event, dispatchInstances[i])) {
+        return dispatchInstances[i];
+      }
+    }
+  } else if (dispatchListeners) {
+    if (dispatchListeners(event, dispatchInstances)) {
+      return dispatchInstances;
+    }
+  }
+  return null;
+}
+
+/**
+ * @see executeDispatchesInOrderStopAtTrueImpl
+ */
+function executeDispatchesInOrderStopAtTrue(event) {
+  var ret = executeDispatchesInOrderStopAtTrueImpl(event);
+  event._dispatchInstances = null;
+  event._dispatchListeners = null;
+  return ret;
+}
+
+/**
+ * Execution of a "direct" dispatch - there must be at most one dispatch
+ * accumulated on the event or it is considered an error. It doesn't really make
+ * sense for an event with multiple dispatches (bubbled) to keep track of the
+ * return values at each dispatch execution, but it does tend to make sense when
+ * dealing with "direct" dispatches.
+ *
+ * @return {*} The return value of executing the single dispatch.
+ */
+function executeDirectDispatch(event) {
+  if ("development" !== 'production') {
+    validateEventDispatches(event);
+  }
+  var dispatchListener = event._dispatchListeners;
+  var dispatchInstance = event._dispatchInstances;
+  !!Array.isArray(dispatchListener) ? "development" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;
+  event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
+  var res = dispatchListener ? dispatchListener(event) : null;
+  event.currentTarget = null;
+  event._dispatchListeners = null;
+  event._dispatchInstances = null;
+  return res;
+}
+
+/**
+ * @param {SyntheticEvent} event
+ * @return {boolean} True iff number of dispatches accumulated is greater than 0.
+ */
+function hasDispatches(event) {
+  return !!event._dispatchListeners;
+}
+
+/**
+ * General utilities that are useful in creating custom Event Plugins.
+ */
+var EventPluginUtils = {
+  isEndish: isEndish,
+  isMoveish: isMoveish,
+  isStartish: isStartish,
+
+  executeDirectDispatch: executeDirectDispatch,
+  executeDispatchesInOrder: executeDispatchesInOrder,
+  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
+  hasDispatches: hasDispatches,
+
+  getInstanceFromNode: function (node) {
+    return ComponentTree.getInstanceFromNode(node);
+  },
+  getNodeFromInstance: function (node) {
+    return ComponentTree.getNodeFromInstance(node);
+  },
+  isAncestor: function (a, b) {
+    return TreeTraversal.isAncestor(a, b);
+  },
+  getLowestCommonAncestor: function (a, b) {
+    return TreeTraversal.getLowestCommonAncestor(a, b);
+  },
+  getParentInstance: function (inst) {
+    return TreeTraversal.getParentInstance(inst);
+  },
+  traverseTwoPhase: function (target, fn, arg) {
+    return TreeTraversal.traverseTwoPhase(target, fn, arg);
+  },
+  traverseEnterLeave: function (from, to, fn, argFrom, argTo) {
+    return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);
+  },
+
+  injection: injection
+};
+
+module.exports = EventPluginUtils;
+},{"140":140,"16":16,"162":162,"171":171,"64":64}],20:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule EventPropagators
+ */
+
+'use strict';
+
+var EventConstants = _dereq_(16);
+var EventPluginHub = _dereq_(17);
+var EventPluginUtils = _dereq_(19);
+
+var accumulateInto = _dereq_(116);
+var forEachAccumulated = _dereq_(125);
+var warning = _dereq_(171);
+
+var PropagationPhases = EventConstants.PropagationPhases;
+var getListener = EventPluginHub.getListener;
+
+/**
+ * Some event types have a notion of different registration names for different
+ * "phases" of propagation. This finds listeners by a given phase.
+ */
+function listenerAtPhase(inst, event, propagationPhase) {
+  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
+  return getListener(inst, registrationName);
+}
+
+/**
+ * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
+ * here, allows us to not have to bind or create functions for each event.
+ * Mutating the event's members allows us to not have to create a wrapping
+ * "dispatch" object that pairs the event with the listener.
+ */
+function accumulateDirectionalDispatches(inst, upwards, event) {
+  if ("development" !== 'production') {
+    "development" !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;
+  }
+  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
+  var listener = listenerAtPhase(inst, event, phase);
+  if (listener) {
+    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
+    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
+  }
+}
+
+/**
+ * Collect dispatches (must be entirely collected before dispatching - see unit
+ * tests). Lazily allocate the array to conserve memory.  We must loop through
+ * each event and perform the traversal for each one. We cannot perform a
+ * single traversal for the entire collection of events because each event may
+ * have a different target.
+ */
+function accumulateTwoPhaseDispatchesSingle(event) {
+  if (event && event.dispatchConfig.phasedRegistrationNames) {
+    EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);
+  }
+}
+
+/**
+ * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.
+ */
+function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
+  if (event && event.dispatchConfig.phasedRegistrationNames) {
+    var targetInst = event._targetInst;
+    var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;
+    EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);
+  }
+}
+
+/**
+ * Accumulates without regard to direction, does not look for phased
+ * registration names. Same as `accumulateDirectDispatchesSingle` but without
+ * requiring that the `dispatchMarker` be the same as the dispatched ID.
+ */
+function accumulateDispatches(inst, ignoredDirection, event) {
+  if (event && event.dispatchConfig.registrationName) {
+    var registrationName = event.dispatchConfig.registrationName;
+    var listener = getListener(inst, registrationName);
+    if (listener) {
+      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
+      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
+    }
+  }
+}
+
+/**
+ * Accumulates dispatches on an `SyntheticEvent`, but only for the
+ * `dispatchMarker`.
+ * @param {SyntheticEvent} event
+ */
+function accumulateDirectDispatchesSingle(event) {
+  if (event && event.dispatchConfig.registrationName) {
+    accumulateDispatches(event._targetInst, null, event);
+  }
+}
+
+function accumulateTwoPhaseDispatches(events) {
+  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
+}
+
+function accumulateTwoPhaseDispatchesSkipTarget(events) {
+  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);
+}
+
+function accumulateEnterLeaveDispatches(leave, enter, from, to) {
+  EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);
+}
+
+function accumulateDirectDispatches(events) {
+  forEachAccumulated(events, accumulateDirectDispatchesSingle);
+}
+
+/**
+ * A small set of propagation patterns, each of which will accept a small amount
+ * of information, and generate a set of "dispatch ready event objects" - which
+ * are sets of events that have already been annotated with a set of dispatched
+ * listener functions/ids. The API is designed this way to discourage these
+ * propagation strategies from actually executing the dispatches, since we
+ * always want to collect the entire set of dispatches before executing event a
+ * single one.
+ *
+ * @constructor EventPropagators
+ */
+var EventPropagators = {
+  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
+  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,
+  accumulateDirectDispatches: accumulateDirectDispatches,
+  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
+};
+
+module.exports = EventPropagators;
+},{"116":116,"125":125,"16":16,"17":17,"171":171,"19":19}],21:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule FallbackCompositionState
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var PooledClass = _dereq_(25);
+
+var getTextContentAccessor = _dereq_(133);
+
+/**
+ * This helper class stores information about text content of a target node,
+ * allowing comparison of content before and after a given event.
+ *
+ * Identify the node where selection currently begins, then observe
+ * both its text content and its current position in the DOM. Since the
+ * browser may natively replace the target node during composition, we can
+ * use its position to find its replacement.
+ *
+ * @param {DOMEventTarget} root
+ */
+function FallbackCompositionState(root) {
+  this._root = root;
+  this._startText = this.getText();
+  this._fallbackText = null;
+}
+
+_assign(FallbackCompositionState.prototype, {
+  destructor: function () {
+    this._root = null;
+    this._startText = null;
+    this._fallbackText = null;
+  },
+
+  /**
+   * Get current text of input.
+   *
+   * @return {string}
+   */
+  getText: function () {
+    if ('value' in this._root) {
+      return this._root.value;
+    }
+    return this._root[getTextContentAccessor()];
+  },
+
+  /**
+   * Determine the differing substring between the initially stored
+   * text content and the current content.
+   *
+   * @return {string}
+   */
+  getData: function () {
+    if (this._fallbackText) {
+      return this._fallbackText;
+    }
+
+    var start;
+    var startValue = this._startText;
+    var startLength = startValue.length;
+    var end;
+    var endValue = this.getText();
+    var endLength = endValue.length;
+
+    for (start = 0; start < startLength; start++) {
+      if (startValue[start] !== endValue[start]) {
+        break;
+      }
+    }
+
+    var minEnd = startLength - start;
+    for (end = 1; end <= minEnd; end++) {
+      if (startValue[startLength - end] !== endValue[endLength - end]) {
+        break;
+      }
+    }
+
+    var sliceTail = end > 1 ? 1 - end : undefined;
+    this._fallbackText = endValue.slice(start, sliceTail);
+    return this._fallbackText;
+  }
+});
+
+PooledClass.addPoolingTo(FallbackCompositionState);
+
+module.exports = FallbackCompositionState;
+},{"133":133,"172":172,"25":25}],22:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule HTMLDOMPropertyConfig
+ */
+
+'use strict';
+
+var DOMProperty = _dereq_(10);
+
+var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
+var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
+var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
+var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
+var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
+
+var HTMLDOMPropertyConfig = {
+  isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),
+  Properties: {
+    /**
+     * Standard Properties
+     */
+    accept: 0,
+    acceptCharset: 0,
+    accessKey: 0,
+    action: 0,
+    allowFullScreen: HAS_BOOLEAN_VALUE,
+    allowTransparency: 0,
+    alt: 0,
+    // specifies target context for links with `preload` type
+    as: 0,
+    async: HAS_BOOLEAN_VALUE,
+    autoComplete: 0,
+    // autoFocus is polyfilled/normalized by AutoFocusUtils
+    // autoFocus: HAS_BOOLEAN_VALUE,
+    autoPlay: HAS_BOOLEAN_VALUE,
+    capture: HAS_BOOLEAN_VALUE,
+    cellPadding: 0,
+    cellSpacing: 0,
+    charSet: 0,
+    challenge: 0,
+    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+    cite: 0,
+    classID: 0,
+    className: 0,
+    cols: HAS_POSITIVE_NUMERIC_VALUE,
+    colSpan: 0,
+    content: 0,
+    contentEditable: 0,
+    contextMenu: 0,
+    controls: HAS_BOOLEAN_VALUE,
+    coords: 0,
+    crossOrigin: 0,
+    data: 0, // For `<object />` acts as `src`.
+    dateTime: 0,
+    'default': HAS_BOOLEAN_VALUE,
+    defer: HAS_BOOLEAN_VALUE,
+    dir: 0,
+    disabled: HAS_BOOLEAN_VALUE,
+    download: HAS_OVERLOADED_BOOLEAN_VALUE,
+    draggable: 0,
+    encType: 0,
+    form: 0,
+    formAction: 0,
+    formEncType: 0,
+    formMethod: 0,
+    formNoValidate: HAS_BOOLEAN_VALUE,
+    formTarget: 0,
+    frameBorder: 0,
+    headers: 0,
+    height: 0,
+    hidden: HAS_BOOLEAN_VALUE,
+    high: 0,
+    href: 0,
+    hrefLang: 0,
+    htmlFor: 0,
+    httpEquiv: 0,
+    icon: 0,
+    id: 0,
+    inputMode: 0,
+    integrity: 0,
+    is: 0,
+    keyParams: 0,
+    keyType: 0,
+    kind: 0,
+    label: 0,
+    lang: 0,
+    list: 0,
+    loop: HAS_BOOLEAN_VALUE,
+    low: 0,
+    manifest: 0,
+    marginHeight: 0,
+    marginWidth: 0,
+    max: 0,
+    maxLength: 0,
+    media: 0,
+    mediaGroup: 0,
+    method: 0,
+    min: 0,
+    minLength: 0,
+    // Caution; `option.selected` is not updated if `select.multiple` is
+    // disabled with `removeAttribute`.
+    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+    name: 0,
+    nonce: 0,
+    noValidate: HAS_BOOLEAN_VALUE,
+    open: HAS_BOOLEAN_VALUE,
+    optimum: 0,
+    pattern: 0,
+    placeholder: 0,
+    playsInline: HAS_BOOLEAN_VALUE,
+    poster: 0,
+    preload: 0,
+    profile: 0,
+    radioGroup: 0,
+    readOnly: HAS_BOOLEAN_VALUE,
+    referrerPolicy: 0,
+    rel: 0,
+    required: HAS_BOOLEAN_VALUE,
+    reversed: HAS_BOOLEAN_VALUE,
+    role: 0,
+    rows: HAS_POSITIVE_NUMERIC_VALUE,
+    rowSpan: HAS_NUMERIC_VALUE,
+    sandbox: 0,
+    scope: 0,
+    scoped: HAS_BOOLEAN_VALUE,
+    scrolling: 0,
+    seamless: HAS_BOOLEAN_VALUE,
+    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+    shape: 0,
+    size: HAS_POSITIVE_NUMERIC_VALUE,
+    sizes: 0,
+    span: HAS_POSITIVE_NUMERIC_VALUE,
+    spellCheck: 0,
+    src: 0,
+    srcDoc: 0,
+    srcLang: 0,
+    srcSet: 0,
+    start: HAS_NUMERIC_VALUE,
+    step: 0,
+    style: 0,
+    summary: 0,
+    tabIndex: 0,
+    target: 0,
+    title: 0,
+    // Setting .type throws on non-<input> tags
+    type: 0,
+    useMap: 0,
+    value: 0,
+    width: 0,
+    wmode: 0,
+    wrap: 0,
+
+    /**
+     * RDFa Properties
+     */
+    about: 0,
+    datatype: 0,
+    inlist: 0,
+    prefix: 0,
+    // property is also supported for OpenGraph in meta tags.
+    property: 0,
+    resource: 0,
+    'typeof': 0,
+    vocab: 0,
+
+    /**
+     * Non-standard Properties
+     */
+    // autoCapitalize and autoCorrect are supported in Mobile Safari for
+    // keyboard hints.
+    autoCapitalize: 0,
+    autoCorrect: 0,
+    // autoSave allows WebKit/Blink to persist values of input fields on page reloads
+    autoSave: 0,
+    // color is for Safari mask-icon link
+    color: 0,
+    // itemProp, itemScope, itemType are for
+    // Microdata support. See http://schema.org/docs/gs.html
+    itemProp: 0,
+    itemScope: HAS_BOOLEAN_VALUE,
+    itemType: 0,
+    // itemID and itemRef are for Microdata support as well but
+    // only specified in the WHATWG spec document. See
+    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
+    itemID: 0,
+    itemRef: 0,
+    // results show looking glass icon and recent searches on input
+    // search fields in WebKit/Blink
+    results: 0,
+    // IE-only attribute that specifies security restrictions on an iframe
+    // as an alternative to the sandbox attribute on IE<10
+    security: 0,
+    // IE-only attribute that controls focus behavior
+    unselectable: 0
+  },
+  DOMAttributeNames: {
+    acceptCharset: 'accept-charset',
+    className: 'class',
+    htmlFor: 'for',
+    httpEquiv: 'http-equiv'
+  },
+  DOMPropertyNames: {}
+};
+
+module.exports = HTMLDOMPropertyConfig;
+},{"10":10}],23:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule KeyEscapeUtils
+ * 
+ */
+
+'use strict';
+
+/**
+ * Escape and wrap key so it is safe to use as a reactid
+ *
+ * @param {string} key to be escaped.
+ * @return {string} the escaped key.
+ */
+
+function escape(key) {
+  var escapeRegex = /[=:]/g;
+  var escaperLookup = {
+    '=': '=0',
+    ':': '=2'
+  };
+  var escapedString = ('' + key).replace(escapeRegex, function (match) {
+    return escaperLookup[match];
+  });
+
+  return '$' + escapedString;
+}
+
+/**
+ * Unescape and unwrap key for human-readable display
+ *
+ * @param {string} key to unescape.
+ * @return {string} the unescaped key.
+ */
+function unescape(key) {
+  var unescapeRegex = /(=0|=2)/g;
+  var unescaperLookup = {
+    '=0': '=',
+    '=2': ':'
+  };
+  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);
+
+  return ('' + keySubstring).replace(unescapeRegex, function (match) {
+    return unescaperLookup[match];
+  });
+}
+
+var KeyEscapeUtils = {
+  escape: escape,
+  unescape: unescape
+};
+
+module.exports = KeyEscapeUtils;
+},{}],24:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule LinkedValueUtils
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactPropTypes = _dereq_(84);
+var ReactPropTypeLocations = _dereq_(83);
+var ReactPropTypesSecret = _dereq_(85);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+var hasReadOnlyValue = {
+  'button': true,
+  'checkbox': true,
+  'image': true,
+  'hidden': true,
+  'radio': true,
+  'reset': true,
+  'submit': true
+};
+
+function _assertSingleLink(inputProps) {
+  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;
+}
+function _assertValueLink(inputProps) {
+  _assertSingleLink(inputProps);
+  !(inputProps.value == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\'t want to use valueLink.') : _prodInvariant('88') : void 0;
+}
+
+function _assertCheckedLink(inputProps) {
+  _assertSingleLink(inputProps);
+  !(inputProps.checked == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\'t want to use checkedLink') : _prodInvariant('89') : void 0;
+}
+
+var propTypes = {
+  value: function (props, propName, componentName) {
+    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
+      return null;
+    }
+    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
+  },
+  checked: function (props, propName, componentName) {
+    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
+      return null;
+    }
+    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
+  },
+  onChange: ReactPropTypes.func
+};
+
+var loggedTypeFailures = {};
+function getDeclarationErrorAddendum(owner) {
+  if (owner) {
+    var name = owner.getName();
+    if (name) {
+      return ' Check the render method of `' + name + '`.';
+    }
+  }
+  return '';
+}
+
+/**
+ * Provide a linked `value` attribute for controlled forms. You should not use
+ * this outside of the ReactDOM controlled form components.
+ */
+var LinkedValueUtils = {
+  checkPropTypes: function (tagName, props, owner) {
+    for (var propName in propTypes) {
+      if (propTypes.hasOwnProperty(propName)) {
+        var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop, null, ReactPropTypesSecret);
+      }
+      if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+        // Only monitor this failure once because there tends to be a lot of the
+        // same error.
+        loggedTypeFailures[error.message] = true;
+
+        var addendum = getDeclarationErrorAddendum(owner);
+        "development" !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;
+      }
+    }
+  },
+
+  /**
+   * @param {object} inputProps Props for form component
+   * @return {*} current value of the input either from value prop or link.
+   */
+  getValue: function (inputProps) {
+    if (inputProps.valueLink) {
+      _assertValueLink(inputProps);
+      return inputProps.valueLink.value;
+    }
+    return inputProps.value;
+  },
+
+  /**
+   * @param {object} inputProps Props for form component
+   * @return {*} current checked status of the input either from checked prop
+   *             or link.
+   */
+  getChecked: function (inputProps) {
+    if (inputProps.checkedLink) {
+      _assertCheckedLink(inputProps);
+      return inputProps.checkedLink.value;
+    }
+    return inputProps.checked;
+  },
+
+  /**
+   * @param {object} inputProps Props for form component
+   * @param {SyntheticEvent} event change event to handle
+   */
+  executeOnChange: function (inputProps, event) {
+    if (inputProps.valueLink) {
+      _assertValueLink(inputProps);
+      return inputProps.valueLink.requestChange(event.target.value);
+    } else if (inputProps.checkedLink) {
+      _assertCheckedLink(inputProps);
+      return inputProps.checkedLink.requestChange(event.target.checked);
+    } else if (inputProps.onChange) {
+      return inputProps.onChange.call(undefined, event);
+    }
+  }
+};
+
+module.exports = LinkedValueUtils;
+},{"140":140,"162":162,"171":171,"83":83,"84":84,"85":85}],25:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule PooledClass
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * Static poolers. Several custom versions for each potential number of
+ * arguments. A completely generic pooler is easy to implement, but would
+ * require accessing the `arguments` object. In each of these, `this` refers to
+ * the Class itself, not an instance. If any others are needed, simply add them
+ * here, or in their own files.
+ */
+var oneArgumentPooler = function (copyFieldsFrom) {
+  var Klass = this;
+  if (Klass.instancePool.length) {
+    var instance = Klass.instancePool.pop();
+    Klass.call(instance, copyFieldsFrom);
+    return instance;
+  } else {
+    return new Klass(copyFieldsFrom);
+  }
+};
+
+var twoArgumentPooler = function (a1, a2) {
+  var Klass = this;
+  if (Klass.instancePool.length) {
+    var instance = Klass.instancePool.pop();
+    Klass.call(instance, a1, a2);
+    return instance;
+  } else {
+    return new Klass(a1, a2);
+  }
+};
+
+var threeArgumentPooler = function (a1, a2, a3) {
+  var Klass = this;
+  if (Klass.instancePool.length) {
+    var instance = Klass.instancePool.pop();
+    Klass.call(instance, a1, a2, a3);
+    return instance;
+  } else {
+    return new Klass(a1, a2, a3);
+  }
+};
+
+var fourArgumentPooler = function (a1, a2, a3, a4) {
+  var Klass = this;
+  if (Klass.instancePool.length) {
+    var instance = Klass.instancePool.pop();
+    Klass.call(instance, a1, a2, a3, a4);
+    return instance;
+  } else {
+    return new Klass(a1, a2, a3, a4);
+  }
+};
+
+var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
+  var Klass = this;
+  if (Klass.instancePool.length) {
+    var instance = Klass.instancePool.pop();
+    Klass.call(instance, a1, a2, a3, a4, a5);
+    return instance;
+  } else {
+    return new Klass(a1, a2, a3, a4, a5);
+  }
+};
+
+var standardReleaser = function (instance) {
+  var Klass = this;
+  !(instance instanceof Klass) ? "development" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
+  instance.destructor();
+  if (Klass.instancePool.length < Klass.poolSize) {
+    Klass.instancePool.push(instance);
+  }
+};
+
+var DEFAULT_POOL_SIZE = 10;
+var DEFAULT_POOLER = oneArgumentPooler;
+
+/**
+ * Augments `CopyConstructor` to be a poolable class, augmenting only the class
+ * itself (statically) not adding any prototypical fields. Any CopyConstructor
+ * you give this may have a `poolSize` property, and will look for a
+ * prototypical `destructor` on instances.
+ *
+ * @param {Function} CopyConstructor Constructor that can be used to reset.
+ * @param {Function} pooler Customizable pooler.
+ */
+var addPoolingTo = function (CopyConstructor, pooler) {
+  var NewKlass = CopyConstructor;
+  NewKlass.instancePool = [];
+  NewKlass.getPooled = pooler || DEFAULT_POOLER;
+  if (!NewKlass.poolSize) {
+    NewKlass.poolSize = DEFAULT_POOL_SIZE;
+  }
+  NewKlass.release = standardReleaser;
+  return NewKlass;
+};
+
+var PooledClass = {
+  addPoolingTo: addPoolingTo,
+  oneArgumentPooler: oneArgumentPooler,
+  twoArgumentPooler: twoArgumentPooler,
+  threeArgumentPooler: threeArgumentPooler,
+  fourArgumentPooler: fourArgumentPooler,
+  fiveArgumentPooler: fiveArgumentPooler
+};
+
+module.exports = PooledClass;
+},{"140":140,"162":162}],26:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule React
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactChildren = _dereq_(29);
+var ReactComponent = _dereq_(32);
+var ReactPureComponent = _dereq_(86);
+var ReactClass = _dereq_(31);
+var ReactDOMFactories = _dereq_(45);
+var ReactElement = _dereq_(61);
+var ReactPropTypes = _dereq_(84);
+var ReactVersion = _dereq_(97);
+
+var onlyChild = _dereq_(138);
+var warning = _dereq_(171);
+
+var createElement = ReactElement.createElement;
+var createFactory = ReactElement.createFactory;
+var cloneElement = ReactElement.cloneElement;
+
+if ("development" !== 'production') {
+  var ReactElementValidator = _dereq_(62);
+  createElement = ReactElementValidator.createElement;
+  createFactory = ReactElementValidator.createFactory;
+  cloneElement = ReactElementValidator.cloneElement;
+}
+
+var __spread = _assign;
+
+if ("development" !== 'production') {
+  var warned = false;
+  __spread = function () {
+    "development" !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;
+    warned = true;
+    return _assign.apply(null, arguments);
+  };
+}
+
+var React = {
+
+  // Modern
+
+  Children: {
+    map: ReactChildren.map,
+    forEach: ReactChildren.forEach,
+    count: ReactChildren.count,
+    toArray: ReactChildren.toArray,
+    only: onlyChild
+  },
+
+  Component: ReactComponent,
+  PureComponent: ReactPureComponent,
+
+  createElement: createElement,
+  cloneElement: cloneElement,
+  isValidElement: ReactElement.isValidElement,
+
+  // Classic
+
+  PropTypes: ReactPropTypes,
+  createClass: ReactClass.createClass,
+  createFactory: createFactory,
+  createMixin: function (mixin) {
+    // Currently a noop. Will be used to validate and trace mixins.
+    return mixin;
+  },
+
+  // This looks DOM specific but these are actually isomorphic helpers
+  // since they are just generating DOM strings.
+  DOM: ReactDOMFactories,
+
+  version: ReactVersion,
+
+  // Deprecated hook for JSX spread, don't use this for anything.
+  __spread: __spread
+};
+
+module.exports = React;
+},{"138":138,"171":171,"172":172,"29":29,"31":31,"32":32,"45":45,"61":61,"62":62,"84":84,"86":86,"97":97}],27:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactBrowserEventEmitter
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var EventConstants = _dereq_(16);
+var EventPluginRegistry = _dereq_(18);
+var ReactEventEmitterMixin = _dereq_(65);
+var ViewportMetrics = _dereq_(115);
+
+var getVendorPrefixedEventName = _dereq_(134);
+var isEventSupported = _dereq_(136);
+
+/**
+ * Summary of `ReactBrowserEventEmitter` event handling:
+ *
+ *  - Top-level delegation is used to trap most native browser events. This
+ *    may only occur in the main thread and is the responsibility of
+ *    ReactEventListener, which is injected and can therefore support pluggable
+ *    event sources. This is the only work that occurs in the main thread.
+ *
+ *  - We normalize and de-duplicate events to account for browser quirks. This
+ *    may be done in the worker thread.
+ *
+ *  - Forward these native events (with the associated top-level type used to
+ *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
+ *    to extract any synthetic events.
+ *
+ *  - The `EventPluginHub` will then process each event by annotating them with
+ *    "dispatches", a sequence of listeners and IDs that care about that event.
+ *
+ *  - The `EventPluginHub` then dispatches the events.
+ *
+ * Overview of React and the event system:
+ *
+ * +------------+    .
+ * |    DOM     |    .
+ * +------------+    .
+ *       |           .
+ *       v           .
+ * +------------+    .
+ * | ReactEvent |    .
+ * |  Listener  |    .
+ * +------------+    .                         +-----------+
+ *       |           .               +--------+|SimpleEvent|
+ *       |           .               |         |Plugin     |
+ * +-----|------+    .               v         +-----------+
+ * |     |      |    .    +--------------+                    +------------+
+ * |     +-----------.--->|EventPluginHub|                    |    Event   |
+ * |            |    .    |              |     +-----------+  | Propagators|
+ * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
+ * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
+ * |            |    .    |              |     +-----------+  |  utilities |
+ * |     +-----------.--->|              |                    +------------+
+ * |     |      |    .    +--------------+
+ * +-----|------+    .                ^        +-----------+
+ *       |           .                |        |Enter/Leave|
+ *       +           .                +-------+|Plugin     |
+ * +-------------+   .                         +-----------+
+ * | application |   .
+ * |-------------|   .
+ * |             |   .
+ * |             |   .
+ * +-------------+   .
+ *                   .
+ *    React Core     .  General Purpose Event Plugin System
+ */
+
+var hasEventPageXY;
+var alreadyListeningTo = {};
+var isMonitoringScrollValue = false;
+var reactTopListenersCounter = 0;
+
+// For events like 'submit' which don't consistently bubble (which we trap at a
+// lower node than `document`), binding at `document` would cause duplicate
+// events so we don't include them here
+var topEventMapping = {
+  topAbort: 'abort',
+  topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',
+  topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',
+  topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',
+  topBlur: 'blur',
+  topCanPlay: 'canplay',
+  topCanPlayThrough: 'canplaythrough',
+  topChange: 'change',
+  topClick: 'click',
+  topCompositionEnd: 'compositionend',
+  topCompositionStart: 'compositionstart',
+  topCompositionUpdate: 'compositionupdate',
+  topContextMenu: 'contextmenu',
+  topCopy: 'copy',
+  topCut: 'cut',
+  topDoubleClick: 'dblclick',
+  topDrag: 'drag',
+  topDragEnd: 'dragend',
+  topDragEnter: 'dragenter',
+  topDragExit: 'dragexit',
+  topDragLeave: 'dragleave',
+  topDragOver: 'dragover',
+  topDragStart: 'dragstart',
+  topDrop: 'drop',
+  topDurationChange: 'durationchange',
+  topEmptied: 'emptied',
+  topEncrypted: 'encrypted',
+  topEnded: 'ended',
+  topError: 'error',
+  topFocus: 'focus',
+  topInput: 'input',
+  topKeyDown: 'keydown',
+  topKeyPress: 'keypress',
+  topKeyUp: 'keyup',
+  topLoadedData: 'loadeddata',
+  topLoadedMetadata: 'loadedmetadata',
+  topLoadStart: 'loadstart',
+  topMouseDown: 'mousedown',
+  topMouseMove: 'mousemove',
+  topMouseOut: 'mouseout',
+  topMouseOver: 'mouseover',
+  topMouseUp: 'mouseup',
+  topPaste: 'paste',
+  topPause: 'pause',
+  topPlay: 'play',
+  topPlaying: 'playing',
+  topProgress: 'progress',
+  topRateChange: 'ratechange',
+  topScroll: 'scroll',
+  topSeeked: 'seeked',
+  topSeeking: 'seeking',
+  topSelectionChange: 'selectionchange',
+  topStalled: 'stalled',
+  topSuspend: 'suspend',
+  topTextInput: 'textInput',
+  topTimeUpdate: 'timeupdate',
+  topTouchCancel: 'touchcancel',
+  topTouchEnd: 'touchend',
+  topTouchMove: 'touchmove',
+  topTouchStart: 'touchstart',
+  topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',
+  topVolumeChange: 'volumechange',
+  topWaiting: 'waiting',
+  topWheel: 'wheel'
+};
+
+/**
+ * To ensure no conflicts with other potential React instances on the page
+ */
+var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);
+
+function getListeningForDocument(mountAt) {
+  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
+  // directly.
+  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
+    mountAt[topListenersIDKey] = reactTopListenersCounter++;
+    alreadyListeningTo[mountAt[topListenersIDKey]] = {};
+  }
+  return alreadyListeningTo[mountAt[topListenersIDKey]];
+}
+
+/**
+ * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
+ * example:
+ *
+ *   EventPluginHub.putListener('myID', 'onClick', myFunction);
+ *
+ * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
+ *
+ * @internal
+ */
+var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
+
+  /**
+   * Injectable event backend
+   */
+  ReactEventListener: null,
+
+  injection: {
+    /**
+     * @param {object} ReactEventListener
+     */
+    injectReactEventListener: function (ReactEventListener) {
+      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
+      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
+    }
+  },
+
+  /**
+   * Sets whether or not any created callbacks should be enabled.
+   *
+   * @param {boolean} enabled True if callbacks should be enabled.
+   */
+  setEnabled: function (enabled) {
+    if (ReactBrowserEventEmitter.ReactEventListener) {
+      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
+    }
+  },
+
+  /**
+   * @return {boolean} True if callbacks are enabled.
+   */
+  isEnabled: function () {
+    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
+  },
+
+  /**
+   * We listen for bubbled touch events on the document object.
+   *
+   * Firefox v8.01 (and possibly others) exhibited strange behavior when
+   * mounting `onmousemove` events at some node that was not the document
+   * element. The symptoms were that if your mouse is not moving over something
+   * contained within that mount point (for example on the background) the
+   * top-level listeners for `onmousemove` won't be called. However, if you
+   * register the `mousemove` on the document object, then it will of course
+   * catch all `mousemove`s. This along with iOS quirks, justifies restricting
+   * top-level listeners to the document object only, at least for these
+   * movement types of events and possibly all events.
+   *
+   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
+   *
+   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
+   * they bubble to document.
+   *
+   * @param {string} registrationName Name of listener (e.g. `onClick`).
+   * @param {object} contentDocumentHandle Document which owns the container
+   */
+  listenTo: function (registrationName, contentDocumentHandle) {
+    var mountAt = contentDocumentHandle;
+    var isListening = getListeningForDocument(mountAt);
+    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];
+
+    var topLevelTypes = EventConstants.topLevelTypes;
+    for (var i = 0; i < dependencies.length; i++) {
+      var dependency = dependencies[i];
+      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
+        if (dependency === topLevelTypes.topWheel) {
+          if (isEventSupported('wheel')) {
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
+          } else if (isEventSupported('mousewheel')) {
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
+          } else {
+            // Firefox needs to capture a different mouse scroll event.
+            // @see http://www.quirksmode.org/dom/events/tests/scroll.html
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
+          }
+        } else if (dependency === topLevelTypes.topScroll) {
+
+          if (isEventSupported('scroll', true)) {
+            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
+          } else {
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
+          }
+        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
+
+          if (isEventSupported('focus', true)) {
+            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
+            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
+          } else if (isEventSupported('focusin')) {
+            // IE has `focusin` and `focusout` events which bubble.
+            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
+            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
+          }
+
+          // to make sure blur and focus event listeners are only attached once
+          isListening[topLevelTypes.topBlur] = true;
+          isListening[topLevelTypes.topFocus] = true;
+        } else if (topEventMapping.hasOwnProperty(dependency)) {
+          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
+        }
+
+        isListening[dependency] = true;
+      }
+    }
+  },
+
+  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
+    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
+  },
+
+  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
+    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
+  },
+
+  /**
+   * Protect against document.createEvent() returning null
+   * Some popup blocker extensions appear to do this:
+   * https://github.com/facebook/react/issues/6887
+   */
+  supportsEventPageXY: function () {
+    if (!document.createEvent) {
+      return false;
+    }
+    var ev = document.createEvent('MouseEvent');
+    return ev != null && 'pageX' in ev;
+  },
+
+  /**
+   * Listens to window scroll and resize events. We cache scroll values so that
+   * application code can access them without triggering reflows.
+   *
+   * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when
+   * pageX/pageY isn't supported (legacy browsers).
+   *
+   * NOTE: Scroll events do not bubble.
+   *
+   * @see http://www.quirksmode.org/dom/events/scroll.html
+   */
+  ensureScrollValueMonitoring: function () {
+    if (hasEventPageXY === undefined) {
+      hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
+    }
+    if (!hasEventPageXY && !isMonitoringScrollValue) {
+      var refresh = ViewportMetrics.refreshScrollValues;
+      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
+      isMonitoringScrollValue = true;
+    }
+  }
+
+});
+
+module.exports = ReactBrowserEventEmitter;
+},{"115":115,"134":134,"136":136,"16":16,"172":172,"18":18,"65":65}],28:[function(_dereq_,module,exports){
+(function (process){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactChildReconciler
+ */
+
+'use strict';
+
+var ReactReconciler = _dereq_(88);
+
+var instantiateReactComponent = _dereq_(135);
+var KeyEscapeUtils = _dereq_(23);
+var shouldUpdateReactComponent = _dereq_(144);
+var traverseAllChildren = _dereq_(145);
+var warning = _dereq_(171);
+
+var ReactComponentTreeHook;
+
+if (typeof process !== 'undefined' && process.env && "development" === 'test') {
+  // Temporary hack.
+  // Inline requires don't work well with Jest:
+  // https://github.com/facebook/react/issues/7240
+  // Remove the inline requires when we don't need them anymore:
+  // https://github.com/facebook/react/pull/7178
+  ReactComponentTreeHook = _dereq_(35);
+}
+
+function instantiateChild(childInstances, child, name, selfDebugID) {
+  // We found a component instance.
+  var keyUnique = childInstances[name] === undefined;
+  if ("development" !== 'production') {
+    if (!ReactComponentTreeHook) {
+      ReactComponentTreeHook = _dereq_(35);
+    }
+    if (!keyUnique) {
+      "development" !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
+    }
+  }
+  if (child != null && keyUnique) {
+    childInstances[name] = instantiateReactComponent(child, true);
+  }
+}
+
+/**
+ * ReactChildReconciler provides helpers for initializing or updating a set of
+ * children. Its output is suitable for passing it onto ReactMultiChild which
+ * does diffed reordering and insertion.
+ */
+var ReactChildReconciler = {
+  /**
+   * Generates a "mount image" for each of the supplied children. In the case
+   * of `ReactDOMComponent`, a mount image is a string of markup.
+   *
+   * @param {?object} nestedChildNodes Nested child maps.
+   * @return {?object} A set of child instances.
+   * @internal
+   */
+  instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // 0 in production and for roots
+  ) {
+    if (nestedChildNodes == null) {
+      return null;
+    }
+    var childInstances = {};
+
+    if ("development" !== 'production') {
+      traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {
+        return instantiateChild(childInsts, child, name, selfDebugID);
+      }, childInstances);
+    } else {
+      traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
+    }
+    return childInstances;
+  },
+
+  /**
+   * Updates the rendered children and returns a new set of children.
+   *
+   * @param {?object} prevChildren Previously initialized set of children.
+   * @param {?object} nextChildren Flat child element maps.
+   * @param {ReactReconcileTransaction} transaction
+   * @param {object} context
+   * @return {?object} A new set of child instances.
+   * @internal
+   */
+  updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID // 0 in production and for roots
+  ) {
+    // We currently don't have a way to track moves here but if we use iterators
+    // instead of for..in we can zip the iterators and check if an item has
+    // moved.
+    // TODO: If nothing has changed, return the prevChildren object so that we
+    // can quickly bailout if nothing has changed.
+    if (!nextChildren && !prevChildren) {
+      return;
+    }
+    var name;
+    var prevChild;
+    for (name in nextChildren) {
+      if (!nextChildren.hasOwnProperty(name)) {
+        continue;
+      }
+      prevChild = prevChildren && prevChildren[name];
+      var prevElement = prevChild && prevChild._currentElement;
+      var nextElement = nextChildren[name];
+      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {
+        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);
+        nextChildren[name] = prevChild;
+      } else {
+        if (prevChild) {
+          removedNodes[name] = ReactReconciler.getHostNode(prevChild);
+          ReactReconciler.unmountComponent(prevChild, false);
+        }
+        // The child must be instantiated before it's mounted.
+        var nextChildInstance = instantiateReactComponent(nextElement, true);
+        nextChildren[name] = nextChildInstance;
+        // Creating mount image now ensures refs are resolved in right order
+        // (see https://github.com/facebook/react/pull/7101 for explanation).
+        var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID);
+        mountImages.push(nextChildMountImage);
+      }
+    }
+    // Unmount children that are no longer present.
+    for (name in prevChildren) {
+      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
+        prevChild = prevChildren[name];
+        removedNodes[name] = ReactReconciler.getHostNode(prevChild);
+        ReactReconciler.unmountComponent(prevChild, false);
+      }
+    }
+  },
+
+  /**
+   * Unmounts all rendered children. This should be used to clean up children
+   * when this component is unmounted.
+   *
+   * @param {?object} renderedChildren Previously initialized set of children.
+   * @internal
+   */
+  unmountChildren: function (renderedChildren, safely) {
+    for (var name in renderedChildren) {
+      if (renderedChildren.hasOwnProperty(name)) {
+        var renderedChild = renderedChildren[name];
+        ReactReconciler.unmountComponent(renderedChild, safely);
+      }
+    }
+  }
+
+};
+
+module.exports = ReactChildReconciler;
+}).call(this,undefined)
+},{"135":135,"144":144,"145":145,"171":171,"23":23,"35":35,"88":88}],29:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactChildren
+ */
+
+'use strict';
+
+var PooledClass = _dereq_(25);
+var ReactElement = _dereq_(61);
+
+var emptyFunction = _dereq_(154);
+var traverseAllChildren = _dereq_(145);
+
+var twoArgumentPooler = PooledClass.twoArgumentPooler;
+var fourArgumentPooler = PooledClass.fourArgumentPooler;
+
+var userProvidedKeyEscapeRegex = /\/+/g;
+function escapeUserProvidedKey(text) {
+  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
+}
+
+/**
+ * PooledClass representing the bookkeeping associated with performing a child
+ * traversal. Allows avoiding binding callbacks.
+ *
+ * @constructor ForEachBookKeeping
+ * @param {!function} forEachFunction Function to perform traversal with.
+ * @param {?*} forEachContext Context to perform context with.
+ */
+function ForEachBookKeeping(forEachFunction, forEachContext) {
+  this.func = forEachFunction;
+  this.context = forEachContext;
+  this.count = 0;
+}
+ForEachBookKeeping.prototype.destructor = function () {
+  this.func = null;
+  this.context = null;
+  this.count = 0;
+};
+PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
+
+function forEachSingleChild(bookKeeping, child, name) {
+  var func = bookKeeping.func;
+  var context = bookKeeping.context;
+
+  func.call(context, child, bookKeeping.count++);
+}
+
+/**
+ * Iterates through children that are typically specified as `props.children`.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach
+ *
+ * The provided forEachFunc(child, index) will be called for each
+ * leaf child.
+ *
+ * @param {?*} children Children tree container.
+ * @param {function(*, int)} forEachFunc
+ * @param {*} forEachContext Context for forEachContext.
+ */
+function forEachChildren(children, forEachFunc, forEachContext) {
+  if (children == null) {
+    return children;
+  }
+  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
+  traverseAllChildren(children, forEachSingleChild, traverseContext);
+  ForEachBookKeeping.release(traverseContext);
+}
+
+/**
+ * PooledClass representing the bookkeeping associated with performing a child
+ * mapping. Allows avoiding binding callbacks.
+ *
+ * @constructor MapBookKeeping
+ * @param {!*} mapResult Object containing the ordered map of results.
+ * @param {!function} mapFunction Function to perform mapping with.
+ * @param {?*} mapContext Context to perform mapping with.
+ */
+function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
+  this.result = mapResult;
+  this.keyPrefix = keyPrefix;
+  this.func = mapFunction;
+  this.context = mapContext;
+  this.count = 0;
+}
+MapBookKeeping.prototype.destructor = function () {
+  this.result = null;
+  this.keyPrefix = null;
+  this.func = null;
+  this.context = null;
+  this.count = 0;
+};
+PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);
+
+function mapSingleChildIntoContext(bookKeeping, child, childKey) {
+  var result = bookKeeping.result;
+  var keyPrefix = bookKeeping.keyPrefix;
+  var func = bookKeeping.func;
+  var context = bookKeeping.context;
+
+
+  var mappedChild = func.call(context, child, bookKeeping.count++);
+  if (Array.isArray(mappedChild)) {
+    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
+  } else if (mappedChild != null) {
+    if (ReactElement.isValidElement(mappedChild)) {
+      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,
+      // Keep both the (mapped) and old keys if they differ, just as
+      // traverseAllChildren used to do for objects as children
+      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
+    }
+    result.push(mappedChild);
+  }
+}
+
+function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
+  var escapedPrefix = '';
+  if (prefix != null) {
+    escapedPrefix = escapeUserProvidedKey(prefix) + '/';
+  }
+  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);
+  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
+  MapBookKeeping.release(traverseContext);
+}
+
+/**
+ * Maps children that are typically specified as `props.children`.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map
+ *
+ * The provided mapFunction(child, key, index) will be called for each
+ * leaf child.
+ *
+ * @param {?*} children Children tree container.
+ * @param {function(*, int)} func The map function.
+ * @param {*} context Context for mapFunction.
+ * @return {object} Object containing the ordered map of results.
+ */
+function mapChildren(children, func, context) {
+  if (children == null) {
+    return children;
+  }
+  var result = [];
+  mapIntoWithKeyPrefixInternal(children, result, null, func, context);
+  return result;
+}
+
+function forEachSingleChildDummy(traverseContext, child, name) {
+  return null;
+}
+
+/**
+ * Count the number of children that are typically specified as
+ * `props.children`.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count
+ *
+ * @param {?*} children Children tree container.
+ * @return {number} The number of children.
+ */
+function countChildren(children, context) {
+  return traverseAllChildren(children, forEachSingleChildDummy, null);
+}
+
+/**
+ * Flatten a children object (typically specified as `props.children`) and
+ * return an array with appropriately re-keyed children.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray
+ */
+function toArray(children) {
+  var result = [];
+  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
+  return result;
+}
+
+var ReactChildren = {
+  forEach: forEachChildren,
+  map: mapChildren,
+  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,
+  count: countChildren,
+  toArray: toArray
+};
+
+module.exports = ReactChildren;
+},{"145":145,"154":154,"25":25,"61":61}],30:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactChildrenMutationWarningHook
+ */
+
+'use strict';
+
+var ReactComponentTreeHook = _dereq_(35);
+
+var warning = _dereq_(171);
+
+function handleElement(debugID, element) {
+  if (element == null) {
+    return;
+  }
+  if (element._shadowChildren === undefined) {
+    return;
+  }
+  if (element._shadowChildren === element.props.children) {
+    return;
+  }
+  var isMutated = false;
+  if (Array.isArray(element._shadowChildren)) {
+    if (element._shadowChildren.length === element.props.children.length) {
+      for (var i = 0; i < element._shadowChildren.length; i++) {
+        if (element._shadowChildren[i] !== element.props.children[i]) {
+          isMutated = true;
+        }
+      }
+    } else {
+      isMutated = true;
+    }
+  }
+  if (!Array.isArray(element._shadowChildren) || isMutated) {
+    "development" !== 'production' ? warning(false, 'Component\'s children should not be mutated.%s', ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+  }
+}
+
+var ReactChildrenMutationWarningHook = {
+  onMountComponent: function (debugID) {
+    handleElement(debugID, ReactComponentTreeHook.getElement(debugID));
+  },
+  onUpdateComponent: function (debugID) {
+    handleElement(debugID, ReactComponentTreeHook.getElement(debugID));
+  }
+};
+
+module.exports = ReactChildrenMutationWarningHook;
+},{"171":171,"35":35}],31:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactClass
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var ReactComponent = _dereq_(32);
+var ReactElement = _dereq_(61);
+var ReactPropTypeLocations = _dereq_(83);
+var ReactPropTypeLocationNames = _dereq_(82);
+var ReactNoopUpdateQueue = _dereq_(80);
+
+var emptyObject = _dereq_(155);
+var invariant = _dereq_(162);
+var keyMirror = _dereq_(165);
+var keyOf = _dereq_(166);
+var warning = _dereq_(171);
+
+var MIXINS_KEY = keyOf({ mixins: null });
+
+/**
+ * Policies that describe methods in `ReactClassInterface`.
+ */
+var SpecPolicy = keyMirror({
+  /**
+   * These methods may be defined only once by the class specification or mixin.
+   */
+  DEFINE_ONCE: null,
+  /**
+   * These methods may be defined by both the class specification and mixins.
+   * Subsequent definitions will be chained. These methods must return void.
+   */
+  DEFINE_MANY: null,
+  /**
+   * These methods are overriding the base class.
+   */
+  OVERRIDE_BASE: null,
+  /**
+   * These methods are similar to DEFINE_MANY, except we assume they return
+   * objects. We try to merge the keys of the return values of all the mixed in
+   * functions. If there is a key conflict we throw.
+   */
+  DEFINE_MANY_MERGED: null
+});
+
+var injectedMixins = [];
+
+/**
+ * Composite components are higher-level components that compose other composite
+ * or host components.
+ *
+ * To create a new type of `ReactClass`, pass a specification of
+ * your new class to `React.createClass`. The only requirement of your class
+ * specification is that you implement a `render` method.
+ *
+ *   var MyComponent = React.createClass({
+ *     render: function() {
+ *       return <div>Hello World</div>;
+ *     }
+ *   });
+ *
+ * The class specification supports a specific protocol of methods that have
+ * special meaning (e.g. `render`). See `ReactClassInterface` for
+ * more the comprehensive protocol. Any other properties and methods in the
+ * class specification will be available on the prototype.
+ *
+ * @interface ReactClassInterface
+ * @internal
+ */
+var ReactClassInterface = {
+
+  /**
+   * An array of Mixin objects to include when defining your component.
+   *
+   * @type {array}
+   * @optional
+   */
+  mixins: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * An object containing properties and methods that should be defined on
+   * the component's constructor instead of its prototype (static methods).
+   *
+   * @type {object}
+   * @optional
+   */
+  statics: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Definition of prop types for this component.
+   *
+   * @type {object}
+   * @optional
+   */
+  propTypes: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Definition of context types for this component.
+   *
+   * @type {object}
+   * @optional
+   */
+  contextTypes: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Definition of context types this component sets for its children.
+   *
+   * @type {object}
+   * @optional
+   */
+  childContextTypes: SpecPolicy.DEFINE_MANY,
+
+  // ==== Definition methods ====
+
+  /**
+   * Invoked when the component is mounted. Values in the mapping will be set on
+   * `this.props` if that prop is not specified (i.e. using an `in` check).
+   *
+   * This method is invoked before `getInitialState` and therefore cannot rely
+   * on `this.state` or use `this.setState`.
+   *
+   * @return {object}
+   * @optional
+   */
+  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
+
+  /**
+   * Invoked once before the component is mounted. The return value will be used
+   * as the initial value of `this.state`.
+   *
+   *   getInitialState: function() {
+   *     return {
+   *       isOn: false,
+   *       fooBaz: new BazFoo()
+   *     }
+   *   }
+   *
+   * @return {object}
+   * @optional
+   */
+  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
+
+  /**
+   * @return {object}
+   * @optional
+   */
+  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
+
+  /**
+   * Uses props from `this.props` and state from `this.state` to render the
+   * structure of the component.
+   *
+   * No guarantees are made about when or how often this method is invoked, so
+   * it must not have side effects.
+   *
+   *   render: function() {
+   *     var name = this.props.name;
+   *     return <div>Hello, {name}!</div>;
+   *   }
+   *
+   * @return {ReactComponent}
+   * @nosideeffects
+   * @required
+   */
+  render: SpecPolicy.DEFINE_ONCE,
+
+  // ==== Delegate methods ====
+
+  /**
+   * Invoked when the component is initially created and about to be mounted.
+   * This may have side effects, but any external subscriptions or data created
+   * by this method must be cleaned up in `componentWillUnmount`.
+   *
+   * @optional
+   */
+  componentWillMount: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Invoked when the component has been mounted and has a DOM representation.
+   * However, there is no guarantee that the DOM node is in the document.
+   *
+   * Use this as an opportunity to operate on the DOM when the component has
+   * been mounted (initialized and rendered) for the first time.
+   *
+   * @param {DOMElement} rootNode DOM element representing the component.
+   * @optional
+   */
+  componentDidMount: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Invoked before the component receives new props.
+   *
+   * Use this as an opportunity to react to a prop transition by updating the
+   * state using `this.setState`. Current props are accessed via `this.props`.
+   *
+   *   componentWillReceiveProps: function(nextProps, nextContext) {
+   *     this.setState({
+   *       likesIncreasing: nextProps.likeCount > this.props.likeCount
+   *     });
+   *   }
+   *
+   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
+   * transition may cause a state change, but the opposite is not true. If you
+   * need it, you are probably looking for `componentWillUpdate`.
+   *
+   * @param {object} nextProps
+   * @optional
+   */
+  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Invoked while deciding if the component should be updated as a result of
+   * receiving new props, state and/or context.
+   *
+   * Use this as an opportunity to `return false` when you're certain that the
+   * transition to the new props/state/context will not require a component
+   * update.
+   *
+   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
+   *     return !equal(nextProps, this.props) ||
+   *       !equal(nextState, this.state) ||
+   *       !equal(nextContext, this.context);
+   *   }
+   *
+   * @param {object} nextProps
+   * @param {?object} nextState
+   * @param {?object} nextContext
+   * @return {boolean} True if the component should update.
+   * @optional
+   */
+  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
+
+  /**
+   * Invoked when the component is about to update due to a transition from
+   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
+   * and `nextContext`.
+   *
+   * Use this as an opportunity to perform preparation before an update occurs.
+   *
+   * NOTE: You **cannot** use `this.setState()` in this method.
+   *
+   * @param {object} nextProps
+   * @param {?object} nextState
+   * @param {?object} nextContext
+   * @param {ReactReconcileTransaction} transaction
+   * @optional
+   */
+  componentWillUpdate: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Invoked when the component's DOM representation has been updated.
+   *
+   * Use this as an opportunity to operate on the DOM when the component has
+   * been updated.
+   *
+   * @param {object} prevProps
+   * @param {?object} prevState
+   * @param {?object} prevContext
+   * @param {DOMElement} rootNode DOM element representing the component.
+   * @optional
+   */
+  componentDidUpdate: SpecPolicy.DEFINE_MANY,
+
+  /**
+   * Invoked when the component is about to be removed from its parent and have
+   * its DOM representation destroyed.
+   *
+   * Use this as an opportunity to deallocate any external resources.
+   *
+   * NOTE: There is no `componentDidUnmount` since your component will have been
+   * destroyed by that point.
+   *
+   * @optional
+   */
+  componentWillUnmount: SpecPolicy.DEFINE_MANY,
+
+  // ==== Advanced methods ====
+
+  /**
+   * Updates the component's currently mounted DOM representation.
+   *
+   * By default, this implements React's rendering and reconciliation algorithm.
+   * Sophisticated clients may wish to override this.
+   *
+   * @param {ReactReconcileTransaction} transaction
+   * @internal
+   * @overridable
+   */
+  updateComponent: SpecPolicy.OVERRIDE_BASE
+
+};
+
+/**
+ * Mapping from class specification keys to special processing functions.
+ *
+ * Although these are declared like instance properties in the specification
+ * when defining classes using `React.createClass`, they are actually static
+ * and are accessible on the constructor instead of the prototype. Despite
+ * being static, they must be defined outside of the "statics" key under
+ * which all other static methods are defined.
+ */
+var RESERVED_SPEC_KEYS = {
+  displayName: function (Constructor, displayName) {
+    Constructor.displayName = displayName;
+  },
+  mixins: function (Constructor, mixins) {
+    if (mixins) {
+      for (var i = 0; i < mixins.length; i++) {
+        mixSpecIntoComponent(Constructor, mixins[i]);
+      }
+    }
+  },
+  childContextTypes: function (Constructor, childContextTypes) {
+    if ("development" !== 'production') {
+      validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
+    }
+    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);
+  },
+  contextTypes: function (Constructor, contextTypes) {
+    if ("development" !== 'production') {
+      validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
+    }
+    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);
+  },
+  /**
+   * Special case getDefaultProps which should move into statics but requires
+   * automatic merging.
+   */
+  getDefaultProps: function (Constructor, getDefaultProps) {
+    if (Constructor.getDefaultProps) {
+      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
+    } else {
+      Constructor.getDefaultProps = getDefaultProps;
+    }
+  },
+  propTypes: function (Constructor, propTypes) {
+    if ("development" !== 'production') {
+      validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
+    }
+    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);
+  },
+  statics: function (Constructor, statics) {
+    mixStaticSpecIntoComponent(Constructor, statics);
+  },
+  autobind: function () {} };
+
+// noop
+function validateTypeDef(Constructor, typeDef, location) {
+  for (var propName in typeDef) {
+    if (typeDef.hasOwnProperty(propName)) {
+      // use a warning instead of an invariant so components
+      // don't show up in prod but only in __DEV__
+      "development" !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;
+    }
+  }
+}
+
+function validateMethodOverride(isAlreadyDefined, name) {
+  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
+
+  // Disallow overriding of base class methods unless explicitly allowed.
+  if (ReactClassMixin.hasOwnProperty(name)) {
+    !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;
+  }
+
+  // Disallow defining methods more than once unless explicitly allowed.
+  if (isAlreadyDefined) {
+    !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;
+  }
+}
+
+/**
+ * Mixin helper which handles policy validation and reserved
+ * specification keys when building React classes.
+ */
+function mixSpecIntoComponent(Constructor, spec) {
+  if (!spec) {
+    if ("development" !== 'production') {
+      var typeofSpec = typeof spec;
+      var isMixinValid = typeofSpec === 'object' && spec !== null;
+
+      "development" !== 'production' ? warning(isMixinValid, '%s: You\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;
+    }
+
+    return;
+  }
+
+  !(typeof spec !== 'function') ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;
+  !!ReactElement.isValidElement(spec) ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;
+
+  var proto = Constructor.prototype;
+  var autoBindPairs = proto.__reactAutoBindPairs;
+
+  // By handling mixins before any other properties, we ensure the same
+  // chaining order is applied to methods with DEFINE_MANY policy, whether
+  // mixins are listed before or after these methods in the spec.
+  if (spec.hasOwnProperty(MIXINS_KEY)) {
+    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
+  }
+
+  for (var name in spec) {
+    if (!spec.hasOwnProperty(name)) {
+      continue;
+    }
+
+    if (name === MIXINS_KEY) {
+      // We have already handled mixins in a special case above.
+      continue;
+    }
+
+    var property = spec[name];
+    var isAlreadyDefined = proto.hasOwnProperty(name);
+    validateMethodOverride(isAlreadyDefined, name);
+
+    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
+      RESERVED_SPEC_KEYS[name](Constructor, property);
+    } else {
+      // Setup methods on prototype:
+      // The following member methods should not be automatically bound:
+      // 1. Expected ReactClass methods (in the "interface").
+      // 2. Overridden methods (that were mixed in).
+      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
+      var isFunction = typeof property === 'function';
+      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
+
+      if (shouldAutoBind) {
+        autoBindPairs.push(name, property);
+        proto[name] = property;
+      } else {
+        if (isAlreadyDefined) {
+          var specPolicy = ReactClassInterface[name];
+
+          // These cases should already be caught by validateMethodOverride.
+          !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? "development" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;
+
+          // For methods which are defined more than once, call the existing
+          // methods before calling the new property, merging if appropriate.
+          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
+            proto[name] = createMergedResultFunction(proto[name], property);
+          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
+            proto[name] = createChainedFunction(proto[name], property);
+          }
+        } else {
+          proto[name] = property;
+          if ("development" !== 'production') {
+            // Add verbose displayName to the function, which helps when looking
+            // at profiling tools.
+            if (typeof property === 'function' && spec.displayName) {
+              proto[name].displayName = spec.displayName + '_' + name;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+function mixStaticSpecIntoComponent(Constructor, statics) {
+  if (!statics) {
+    return;
+  }
+  for (var name in statics) {
+    var property = statics[name];
+    if (!statics.hasOwnProperty(name)) {
+      continue;
+    }
+
+    var isReserved = name in RESERVED_SPEC_KEYS;
+    !!isReserved ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;
+
+    var isInherited = name in Constructor;
+    !!isInherited ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;
+    Constructor[name] = property;
+  }
+}
+
+/**
+ * Merge two objects, but throw if both contain the same key.
+ *
+ * @param {object} one The first object, which is mutated.
+ * @param {object} two The second object
+ * @return {object} one after it has been mutated to contain everything in two.
+ */
+function mergeIntoWithNoDuplicateKeys(one, two) {
+  !(one && two && typeof one === 'object' && typeof two === 'object') ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;
+
+  for (var key in two) {
+    if (two.hasOwnProperty(key)) {
+      !(one[key] === undefined) ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;
+      one[key] = two[key];
+    }
+  }
+  return one;
+}
+
+/**
+ * Creates a function that invokes two functions and merges their return values.
+ *
+ * @param {function} one Function to invoke first.
+ * @param {function} two Function to invoke second.
+ * @return {function} Function that invokes the two argument functions.
+ * @private
+ */
+function createMergedResultFunction(one, two) {
+  return function mergedResult() {
+    var a = one.apply(this, arguments);
+    var b = two.apply(this, arguments);
+    if (a == null) {
+      return b;
+    } else if (b == null) {
+      return a;
+    }
+    var c = {};
+    mergeIntoWithNoDuplicateKeys(c, a);
+    mergeIntoWithNoDuplicateKeys(c, b);
+    return c;
+  };
+}
+
+/**
+ * Creates a function that invokes two functions and ignores their return vales.
+ *
+ * @param {function} one Function to invoke first.
+ * @param {function} two Function to invoke second.
+ * @return {function} Function that invokes the two argument functions.
+ * @private
+ */
+function createChainedFunction(one, two) {
+  return function chainedFunction() {
+    one.apply(this, arguments);
+    two.apply(this, arguments);
+  };
+}
+
+/**
+ * Binds a method to the component.
+ *
+ * @param {object} component Component whose method is going to be bound.
+ * @param {function} method Method to be bound.
+ * @return {function} The bound method.
+ */
+function bindAutoBindMethod(component, method) {
+  var boundMethod = method.bind(component);
+  if ("development" !== 'production') {
+    boundMethod.__reactBoundContext = component;
+    boundMethod.__reactBoundMethod = method;
+    boundMethod.__reactBoundArguments = null;
+    var componentName = component.constructor.displayName;
+    var _bind = boundMethod.bind;
+    boundMethod.bind = function (newThis) {
+      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        args[_key - 1] = arguments[_key];
+      }
+
+      // User is trying to bind() an autobound method; we effectively will
+      // ignore the value of "this" that the user is trying to use, so
+      // let's warn.
+      if (newThis !== component && newThis !== null) {
+        "development" !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;
+      } else if (!args.length) {
+        "development" !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;
+        return boundMethod;
+      }
+      var reboundMethod = _bind.apply(boundMethod, arguments);
+      reboundMethod.__reactBoundContext = component;
+      reboundMethod.__reactBoundMethod = method;
+      reboundMethod.__reactBoundArguments = args;
+      return reboundMethod;
+    };
+  }
+  return boundMethod;
+}
+
+/**
+ * Binds all auto-bound methods in a component.
+ *
+ * @param {object} component Component whose method is going to be bound.
+ */
+function bindAutoBindMethods(component) {
+  var pairs = component.__reactAutoBindPairs;
+  for (var i = 0; i < pairs.length; i += 2) {
+    var autoBindKey = pairs[i];
+    var method = pairs[i + 1];
+    component[autoBindKey] = bindAutoBindMethod(component, method);
+  }
+}
+
+/**
+ * Add more to the ReactClass base class. These are all legacy features and
+ * therefore not already part of the modern ReactComponent.
+ */
+var ReactClassMixin = {
+
+  /**
+   * TODO: This will be deprecated because state should always keep a consistent
+   * type signature and the only use case for this, is to avoid that.
+   */
+  replaceState: function (newState, callback) {
+    this.updater.enqueueReplaceState(this, newState);
+    if (callback) {
+      this.updater.enqueueCallback(this, callback, 'replaceState');
+    }
+  },
+
+  /**
+   * Checks whether or not this composite component is mounted.
+   * @return {boolean} True if mounted, false otherwise.
+   * @protected
+   * @final
+   */
+  isMounted: function () {
+    return this.updater.isMounted(this);
+  }
+};
+
+var ReactClassComponent = function () {};
+_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
+
+/**
+ * Module for creating composite components.
+ *
+ * @class ReactClass
+ */
+var ReactClass = {
+
+  /**
+   * Creates a composite component class given a class specification.
+   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
+   *
+   * @param {object} spec Class specification (which must define `render`).
+   * @return {function} Component constructor function.
+   * @public
+   */
+  createClass: function (spec) {
+    var Constructor = function (props, context, updater) {
+      // This constructor gets overridden by mocks. The argument is used
+      // by mocks to assert on what gets mounted.
+
+      if ("development" !== 'production') {
+        "development" !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;
+      }
+
+      // Wire up auto-binding
+      if (this.__reactAutoBindPairs.length) {
+        bindAutoBindMethods(this);
+      }
+
+      this.props = props;
+      this.context = context;
+      this.refs = emptyObject;
+      this.updater = updater || ReactNoopUpdateQueue;
+
+      this.state = null;
+
+      // ReactClasses doesn't have constructors. Instead, they use the
+      // getInitialState and componentWillMount methods for initialization.
+
+      var initialState = this.getInitialState ? this.getInitialState() : null;
+      if ("development" !== 'production') {
+        // We allow auto-mocks to proceed as if they're returning null.
+        if (initialState === undefined && this.getInitialState._isMockFunction) {
+          // This is probably bad practice. Consider warning here and
+          // deprecating this convenience.
+          initialState = null;
+        }
+      }
+      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;
+
+      this.state = initialState;
+    };
+    Constructor.prototype = new ReactClassComponent();
+    Constructor.prototype.constructor = Constructor;
+    Constructor.prototype.__reactAutoBindPairs = [];
+
+    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
+
+    mixSpecIntoComponent(Constructor, spec);
+
+    // Initialize the defaultProps property after all mixins have been merged.
+    if (Constructor.getDefaultProps) {
+      Constructor.defaultProps = Constructor.getDefaultProps();
+    }
+
+    if ("development" !== 'production') {
+      // This is a tag to indicate that the use of these method names is ok,
+      // since it's used with createClass. If it's not, then it's likely a
+      // mistake so we'll warn you to use the static property, property
+      // initializer or constructor respectively.
+      if (Constructor.getDefaultProps) {
+        Constructor.getDefaultProps.isReactClassApproved = {};
+      }
+      if (Constructor.prototype.getInitialState) {
+        Constructor.prototype.getInitialState.isReactClassApproved = {};
+      }
+    }
+
+    !Constructor.prototype.render ? "development" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;
+
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
+      "development" !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;
+    }
+
+    // Reduce time spent doing lookups by setting these on the prototype.
+    for (var methodName in ReactClassInterface) {
+      if (!Constructor.prototype[methodName]) {
+        Constructor.prototype[methodName] = null;
+      }
+    }
+
+    return Constructor;
+  },
+
+  injection: {
+    injectMixin: function (mixin) {
+      injectedMixins.push(mixin);
+    }
+  }
+
+};
+
+module.exports = ReactClass;
+},{"140":140,"155":155,"162":162,"165":165,"166":166,"171":171,"172":172,"32":32,"61":61,"80":80,"82":82,"83":83}],32:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactComponent
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactNoopUpdateQueue = _dereq_(80);
+
+var canDefineProperty = _dereq_(118);
+var emptyObject = _dereq_(155);
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+/**
+ * Base class helpers for the updating state of a component.
+ */
+function ReactComponent(props, context, updater) {
+  this.props = props;
+  this.context = context;
+  this.refs = emptyObject;
+  // We initialize the default updater but the real one gets injected by the
+  // renderer.
+  this.updater = updater || ReactNoopUpdateQueue;
+}
+
+ReactComponent.prototype.isReactComponent = {};
+
+/**
+ * Sets a subset of the state. Always use this to mutate
+ * state. You should treat `this.state` as immutable.
+ *
+ * There is no guarantee that `this.state` will be immediately updated, so
+ * accessing `this.state` after calling this method may return the old value.
+ *
+ * There is no guarantee that calls to `setState` will run synchronously,
+ * as they may eventually be batched together.  You can provide an optional
+ * callback that will be executed when the call to setState is actually
+ * completed.
+ *
+ * When a function is provided to setState, it will be called at some point in
+ * the future (not synchronously). It will be called with the up to date
+ * component arguments (state, props, context). These values can be different
+ * from this.* because your function may be called after receiveProps but before
+ * shouldComponentUpdate, and this new state, props, and context will not yet be
+ * assigned to this.
+ *
+ * @param {object|function} partialState Next partial state or function to
+ *        produce next partial state to be merged with current state.
+ * @param {?function} callback Called after state is updated.
+ * @final
+ * @protected
+ */
+ReactComponent.prototype.setState = function (partialState, callback) {
+  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? "development" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;
+  this.updater.enqueueSetState(this, partialState);
+  if (callback) {
+    this.updater.enqueueCallback(this, callback, 'setState');
+  }
+};
+
+/**
+ * Forces an update. This should only be invoked when it is known with
+ * certainty that we are **not** in a DOM transaction.
+ *
+ * You may want to call this when you know that some deeper aspect of the
+ * component's state has changed but `setState` was not called.
+ *
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
+ * `componentWillUpdate` and `componentDidUpdate`.
+ *
+ * @param {?function} callback Called after update is complete.
+ * @final
+ * @protected
+ */
+ReactComponent.prototype.forceUpdate = function (callback) {
+  this.updater.enqueueForceUpdate(this);
+  if (callback) {
+    this.updater.enqueueCallback(this, callback, 'forceUpdate');
+  }
+};
+
+/**
+ * Deprecated APIs. These APIs used to exist on classic React classes but since
+ * we would like to deprecate them, we're not going to move them over to this
+ * modern base class. Instead, we define a getter that warns if it's accessed.
+ */
+if ("development" !== 'production') {
+  var deprecatedAPIs = {
+    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
+    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
+  };
+  var defineDeprecationWarning = function (methodName, info) {
+    if (canDefineProperty) {
+      Object.defineProperty(ReactComponent.prototype, methodName, {
+        get: function () {
+          "development" !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;
+          return undefined;
+        }
+      });
+    }
+  };
+  for (var fnName in deprecatedAPIs) {
+    if (deprecatedAPIs.hasOwnProperty(fnName)) {
+      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
+    }
+  }
+}
+
+module.exports = ReactComponent;
+},{"118":118,"140":140,"155":155,"162":162,"171":171,"80":80}],33:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactComponentBrowserEnvironment
+ */
+
+'use strict';
+
+var DOMChildrenOperations = _dereq_(7);
+var ReactDOMIDOperations = _dereq_(47);
+
+/**
+ * Abstracts away all functionality of the reconciler that requires knowledge of
+ * the browser context. TODO: These callers should be refactored to avoid the
+ * need for this injection.
+ */
+var ReactComponentBrowserEnvironment = {
+
+  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,
+
+  replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup
+
+};
+
+module.exports = ReactComponentBrowserEnvironment;
+},{"47":47,"7":7}],34:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactComponentEnvironment
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+var injected = false;
+
+var ReactComponentEnvironment = {
+
+  /**
+   * Optionally injectable hook for swapping out mount images in the middle of
+   * the tree.
+   */
+  replaceNodeWithMarkup: null,
+
+  /**
+   * Optionally injectable hook for processing a queue of child updates. Will
+   * later move into MultiChildComponents.
+   */
+  processChildrenUpdates: null,
+
+  injection: {
+    injectEnvironment: function (environment) {
+      !!injected ? "development" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;
+      ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;
+      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
+      injected = true;
+    }
+  }
+
+};
+
+module.exports = ReactComponentEnvironment;
+},{"140":140,"162":162}],35:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactComponentTreeHook
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactCurrentOwner = _dereq_(37);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+function isNative(fn) {
+  // Based on isNative() from Lodash
+  var funcToString = Function.prototype.toString;
+  var hasOwnProperty = Object.prototype.hasOwnProperty;
+  var reIsNative = RegExp('^' + funcToString
+  // Take an example native function source for comparison
+  .call(hasOwnProperty)
+  // Strip regex characters so we can use it for regex
+  .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+  // Remove hasOwnProperty from the template to make it generic
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
+  try {
+    var source = funcToString.call(fn);
+    return reIsNative.test(source);
+  } catch (err) {
+    return false;
+  }
+}
+
+var canUseCollections =
+// Array.from
+typeof Array.from === 'function' &&
+// Map
+typeof Map === 'function' && isNative(Map) &&
+// Map.prototype.keys
+Map.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&
+// Set
+typeof Set === 'function' && isNative(Set) &&
+// Set.prototype.keys
+Set.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);
+
+var itemMap;
+var rootIDSet;
+
+var itemByKey;
+var rootByKey;
+
+if (canUseCollections) {
+  itemMap = new Map();
+  rootIDSet = new Set();
+} else {
+  itemByKey = {};
+  rootByKey = {};
+}
+
+var unmountedIDs = [];
+
+// Use non-numeric keys to prevent V8 performance issues:
+// https://github.com/facebook/react/pull/7232
+function getKeyFromID(id) {
+  return '.' + id;
+}
+function getIDFromKey(key) {
+  return parseInt(key.substr(1), 10);
+}
+
+function get(id) {
+  if (canUseCollections) {
+    return itemMap.get(id);
+  } else {
+    var key = getKeyFromID(id);
+    return itemByKey[key];
+  }
+}
+
+function remove(id) {
+  if (canUseCollections) {
+    itemMap['delete'](id);
+  } else {
+    var key = getKeyFromID(id);
+    delete itemByKey[key];
+  }
+}
+
+function create(id, element, parentID) {
+  var item = {
+    element: element,
+    parentID: parentID,
+    text: null,
+    childIDs: [],
+    isMounted: false,
+    updateCount: 0
+  };
+
+  if (canUseCollections) {
+    itemMap.set(id, item);
+  } else {
+    var key = getKeyFromID(id);
+    itemByKey[key] = item;
+  }
+}
+
+function addRoot(id) {
+  if (canUseCollections) {
+    rootIDSet.add(id);
+  } else {
+    var key = getKeyFromID(id);
+    rootByKey[key] = true;
+  }
+}
+
+function removeRoot(id) {
+  if (canUseCollections) {
+    rootIDSet['delete'](id);
+  } else {
+    var key = getKeyFromID(id);
+    delete rootByKey[key];
+  }
+}
+
+function getRegisteredIDs() {
+  if (canUseCollections) {
+    return Array.from(itemMap.keys());
+  } else {
+    return Object.keys(itemByKey).map(getIDFromKey);
+  }
+}
+
+function getRootIDs() {
+  if (canUseCollections) {
+    return Array.from(rootIDSet.keys());
+  } else {
+    return Object.keys(rootByKey).map(getIDFromKey);
+  }
+}
+
+function purgeDeep(id) {
+  var item = get(id);
+  if (item) {
+    var childIDs = item.childIDs;
+
+    remove(id);
+    childIDs.forEach(purgeDeep);
+  }
+}
+
+function describeComponentFrame(name, source, ownerName) {
+  return '\n    in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
+}
+
+function getDisplayName(element) {
+  if (element == null) {
+    return '#empty';
+  } else if (typeof element === 'string' || typeof element === 'number') {
+    return '#text';
+  } else if (typeof element.type === 'string') {
+    return element.type;
+  } else {
+    return element.type.displayName || element.type.name || 'Unknown';
+  }
+}
+
+function describeID(id) {
+  var name = ReactComponentTreeHook.getDisplayName(id);
+  var element = ReactComponentTreeHook.getElement(id);
+  var ownerID = ReactComponentTreeHook.getOwnerID(id);
+  var ownerName;
+  if (ownerID) {
+    ownerName = ReactComponentTreeHook.getDisplayName(ownerID);
+  }
+  "development" !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;
+  return describeComponentFrame(name, element && element._source, ownerName);
+}
+
+var ReactComponentTreeHook = {
+  onSetChildren: function (id, nextChildIDs) {
+    var item = get(id);
+    item.childIDs = nextChildIDs;
+
+    for (var i = 0; i < nextChildIDs.length; i++) {
+      var nextChildID = nextChildIDs[i];
+      var nextChild = get(nextChildID);
+      !nextChild ? "development" !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;
+      !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? "development" !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;
+      !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;
+      if (nextChild.parentID == null) {
+        nextChild.parentID = id;
+        // TODO: This shouldn't be necessary but mounting a new root during in
+        // componentWillMount currently causes not-yet-mounted components to
+        // be purged from our tree data so their parent ID is missing.
+      }
+      !(nextChild.parentID === id) ? "development" !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;
+    }
+  },
+  onBeforeMountComponent: function (id, element, parentID) {
+    create(id, element, parentID);
+  },
+  onBeforeUpdateComponent: function (id, element) {
+    var item = get(id);
+    if (!item || !item.isMounted) {
+      // We may end up here as a result of setState() in componentWillUnmount().
+      // In this case, ignore the element.
+      return;
+    }
+    item.element = element;
+  },
+  onMountComponent: function (id) {
+    var item = get(id);
+    item.isMounted = true;
+    var isRoot = item.parentID === 0;
+    if (isRoot) {
+      addRoot(id);
+    }
+  },
+  onUpdateComponent: function (id) {
+    var item = get(id);
+    if (!item || !item.isMounted) {
+      // We may end up here as a result of setState() in componentWillUnmount().
+      // In this case, ignore the element.
+      return;
+    }
+    item.updateCount++;
+  },
+  onUnmountComponent: function (id) {
+    var item = get(id);
+    if (item) {
+      // We need to check if it exists.
+      // `item` might not exist if it is inside an error boundary, and a sibling
+      // error boundary child threw while mounting. Then this instance never
+      // got a chance to mount, but it still gets an unmounting event during
+      // the error boundary cleanup.
+      item.isMounted = false;
+      var isRoot = item.parentID === 0;
+      if (isRoot) {
+        removeRoot(id);
+      }
+    }
+    unmountedIDs.push(id);
+  },
+  purgeUnmountedComponents: function () {
+    if (ReactComponentTreeHook._preventPurging) {
+      // Should only be used for testing.
+      return;
+    }
+
+    for (var i = 0; i < unmountedIDs.length; i++) {
+      var id = unmountedIDs[i];
+      purgeDeep(id);
+    }
+    unmountedIDs.length = 0;
+  },
+  isMounted: function (id) {
+    var item = get(id);
+    return item ? item.isMounted : false;
+  },
+  getCurrentStackAddendum: function (topElement) {
+    var info = '';
+    if (topElement) {
+      var type = topElement.type;
+      var name = typeof type === 'function' ? type.displayName || type.name : type;
+      var owner = topElement._owner;
+      info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());
+    }
+
+    var currentOwner = ReactCurrentOwner.current;
+    var id = currentOwner && currentOwner._debugID;
+
+    info += ReactComponentTreeHook.getStackAddendumByID(id);
+    return info;
+  },
+  getStackAddendumByID: function (id) {
+    var info = '';
+    while (id) {
+      info += describeID(id);
+      id = ReactComponentTreeHook.getParentID(id);
+    }
+    return info;
+  },
+  getChildIDs: function (id) {
+    var item = get(id);
+    return item ? item.childIDs : [];
+  },
+  getDisplayName: function (id) {
+    var element = ReactComponentTreeHook.getElement(id);
+    if (!element) {
+      return null;
+    }
+    return getDisplayName(element);
+  },
+  getElement: function (id) {
+    var item = get(id);
+    return item ? item.element : null;
+  },
+  getOwnerID: function (id) {
+    var element = ReactComponentTreeHook.getElement(id);
+    if (!element || !element._owner) {
+      return null;
+    }
+    return element._owner._debugID;
+  },
+  getParentID: function (id) {
+    var item = get(id);
+    return item ? item.parentID : null;
+  },
+  getSource: function (id) {
+    var item = get(id);
+    var element = item ? item.element : null;
+    var source = element != null ? element._source : null;
+    return source;
+  },
+  getText: function (id) {
+    var element = ReactComponentTreeHook.getElement(id);
+    if (typeof element === 'string') {
+      return element;
+    } else if (typeof element === 'number') {
+      return '' + element;
+    } else {
+      return null;
+    }
+  },
+  getUpdateCount: function (id) {
+    var item = get(id);
+    return item ? item.updateCount : 0;
+  },
+
+
+  getRegisteredIDs: getRegisteredIDs,
+
+  getRootIDs: getRootIDs
+};
+
+module.exports = ReactComponentTreeHook;
+},{"140":140,"162":162,"171":171,"37":37}],36:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactCompositeComponent
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var ReactComponentEnvironment = _dereq_(34);
+var ReactCurrentOwner = _dereq_(37);
+var ReactElement = _dereq_(61);
+var ReactErrorUtils = _dereq_(64);
+var ReactInstanceMap = _dereq_(72);
+var ReactInstrumentation = _dereq_(73);
+var ReactNodeTypes = _dereq_(79);
+var ReactPropTypeLocations = _dereq_(83);
+var ReactReconciler = _dereq_(88);
+
+var checkReactTypeSpec = _dereq_(119);
+var emptyObject = _dereq_(155);
+var invariant = _dereq_(162);
+var shallowEqual = _dereq_(170);
+var shouldUpdateReactComponent = _dereq_(144);
+var warning = _dereq_(171);
+
+var CompositeTypes = {
+  ImpureClass: 0,
+  PureClass: 1,
+  StatelessFunctional: 2
+};
+
+function StatelessComponent(Component) {}
+StatelessComponent.prototype.render = function () {
+  var Component = ReactInstanceMap.get(this)._currentElement.type;
+  var element = Component(this.props, this.context, this.updater);
+  warnIfInvalidElement(Component, element);
+  return element;
+};
+
+function warnIfInvalidElement(Component, element) {
+  if ("development" !== 'production') {
+    "development" !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;
+    "development" !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;
+  }
+}
+
+function shouldConstruct(Component) {
+  return !!(Component.prototype && Component.prototype.isReactComponent);
+}
+
+function isPureComponent(Component) {
+  return !!(Component.prototype && Component.prototype.isPureReactComponent);
+}
+
+// Separated into a function to contain deoptimizations caused by try/finally.
+function measureLifeCyclePerf(fn, debugID, timerType) {
+  if (debugID === 0) {
+    // Top-level wrappers (see ReactMount) and empty components (see
+    // ReactDOMEmptyComponent) are invisible to hooks and devtools.
+    // Both are implementation details that should go away in the future.
+    return fn();
+  }
+
+  ReactInstrumentation.debugTool.onBeginLifeCycleTimer(debugID, timerType);
+  try {
+    return fn();
+  } finally {
+    ReactInstrumentation.debugTool.onEndLifeCycleTimer(debugID, timerType);
+  }
+}
+
+/**
+ * ------------------ The Life-Cycle of a Composite Component ------------------
+ *
+ * - constructor: Initialization of state. The instance is now retained.
+ *   - componentWillMount
+ *   - render
+ *   - [children's constructors]
+ *     - [children's componentWillMount and render]
+ *     - [children's componentDidMount]
+ *     - componentDidMount
+ *
+ *       Update Phases:
+ *       - componentWillReceiveProps (only called if parent updated)
+ *       - shouldComponentUpdate
+ *         - componentWillUpdate
+ *           - render
+ *           - [children's constructors or receive props phases]
+ *         - componentDidUpdate
+ *
+ *     - componentWillUnmount
+ *     - [children's componentWillUnmount]
+ *   - [children destroyed]
+ * - (destroyed): The instance is now blank, released by React and ready for GC.
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+/**
+ * An incrementing ID assigned to each component when it is mounted. This is
+ * used to enforce the order in which `ReactUpdates` updates dirty components.
+ *
+ * @private
+ */
+var nextMountID = 1;
+
+/**
+ * @lends {ReactCompositeComponent.prototype}
+ */
+var ReactCompositeComponentMixin = {
+
+  /**
+   * Base constructor for all composite component.
+   *
+   * @param {ReactElement} element
+   * @final
+   * @internal
+   */
+  construct: function (element) {
+    this._currentElement = element;
+    this._rootNodeID = 0;
+    this._compositeType = null;
+    this._instance = null;
+    this._hostParent = null;
+    this._hostContainerInfo = null;
+
+    // See ReactUpdateQueue
+    this._updateBatchNumber = null;
+    this._pendingElement = null;
+    this._pendingStateQueue = null;
+    this._pendingReplaceState = false;
+    this._pendingForceUpdate = false;
+
+    this._renderedNodeType = null;
+    this._renderedComponent = null;
+    this._context = null;
+    this._mountOrder = 0;
+    this._topLevelWrapper = null;
+
+    // See ReactUpdates and ReactUpdateQueue.
+    this._pendingCallbacks = null;
+
+    // ComponentWillUnmount shall only be called once
+    this._calledComponentWillUnmount = false;
+
+    if ("development" !== 'production') {
+      this._warnedAboutRefsInRender = false;
+    }
+  },
+
+  /**
+   * Initializes the component, renders markup, and registers event listeners.
+   *
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {?object} hostParent
+   * @param {?object} hostContainerInfo
+   * @param {?object} context
+   * @return {?string} Rendered markup to be inserted into the DOM.
+   * @final
+   * @internal
+   */
+  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+    var _this = this;
+
+    this._context = context;
+    this._mountOrder = nextMountID++;
+    this._hostParent = hostParent;
+    this._hostContainerInfo = hostContainerInfo;
+
+    var publicProps = this._currentElement.props;
+    var publicContext = this._processContext(context);
+
+    var Component = this._currentElement.type;
+
+    var updateQueue = transaction.getUpdateQueue();
+
+    // Initialize the public class
+    var doConstruct = shouldConstruct(Component);
+    var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);
+    var renderedElement;
+
+    // Support functional components
+    if (!doConstruct && (inst == null || inst.render == null)) {
+      renderedElement = inst;
+      warnIfInvalidElement(Component, renderedElement);
+      !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? "development" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;
+      inst = new StatelessComponent(Component);
+      this._compositeType = CompositeTypes.StatelessFunctional;
+    } else {
+      if (isPureComponent(Component)) {
+        this._compositeType = CompositeTypes.PureClass;
+      } else {
+        this._compositeType = CompositeTypes.ImpureClass;
+      }
+    }
+
+    if ("development" !== 'production') {
+      // This will throw later in _renderValidatedComponent, but add an early
+      // warning now to help debugging
+      if (inst.render == null) {
+        "development" !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;
+      }
+
+      var propsMutated = inst.props !== publicProps;
+      var componentName = Component.displayName || Component.name || 'Component';
+
+      "development" !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\'s constructor was passed.', componentName, componentName) : void 0;
+    }
+
+    // These should be set up in the constructor, but as a convenience for
+    // simpler class abstractions, we set them up after the fact.
+    inst.props = publicProps;
+    inst.context = publicContext;
+    inst.refs = emptyObject;
+    inst.updater = updateQueue;
+
+    this._instance = inst;
+
+    // Store a reference from the instance back to the internal representation
+    ReactInstanceMap.set(inst, this);
+
+    if ("development" !== 'production') {
+      // Since plain JS classes are defined without any special initialization
+      // logic, we can not catch common errors early. Therefore, we have to
+      // catch them here, at initialization time, instead.
+      "development" !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
+      "development" !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
+      "development" !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
+      "development" !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
+      "development" !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;
+      "development" !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;
+      "development" !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;
+    }
+
+    var initialState = inst.state;
+    if (initialState === undefined) {
+      inst.state = initialState = null;
+    }
+    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;
+
+    this._pendingStateQueue = null;
+    this._pendingReplaceState = false;
+    this._pendingForceUpdate = false;
+
+    var markup;
+    if (inst.unstable_handleError) {
+      markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);
+    } else {
+      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+    }
+
+    if (inst.componentDidMount) {
+      if ("development" !== 'production') {
+        transaction.getReactMountReady().enqueue(function () {
+          measureLifeCyclePerf(function () {
+            return inst.componentDidMount();
+          }, _this._debugID, 'componentDidMount');
+        });
+      } else {
+        transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
+      }
+    }
+
+    return markup;
+  },
+
+  _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {
+    if ("development" !== 'production') {
+      ReactCurrentOwner.current = this;
+      try {
+        return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
+      } finally {
+        ReactCurrentOwner.current = null;
+      }
+    } else {
+      return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
+    }
+  },
+
+  _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {
+    var Component = this._currentElement.type;
+
+    if (doConstruct) {
+      if ("development" !== 'production') {
+        return measureLifeCyclePerf(function () {
+          return new Component(publicProps, publicContext, updateQueue);
+        }, this._debugID, 'ctor');
+      } else {
+        return new Component(publicProps, publicContext, updateQueue);
+      }
+    }
+
+    // This can still be an instance in case of factory components
+    // but we'll count this as time spent rendering as the more common case.
+    if ("development" !== 'production') {
+      return measureLifeCyclePerf(function () {
+        return Component(publicProps, publicContext, updateQueue);
+      }, this._debugID, 'render');
+    } else {
+      return Component(publicProps, publicContext, updateQueue);
+    }
+  },
+
+  performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
+    var markup;
+    var checkpoint = transaction.checkpoint();
+    try {
+      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+    } catch (e) {
+      // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint
+      transaction.rollback(checkpoint);
+      this._instance.unstable_handleError(e);
+      if (this._pendingStateQueue) {
+        this._instance.state = this._processPendingState(this._instance.props, this._instance.context);
+      }
+      checkpoint = transaction.checkpoint();
+
+      this._renderedComponent.unmountComponent(true);
+      transaction.rollback(checkpoint);
+
+      // Try again - we've informed the component about the error, so they can render an error message this time.
+      // If this throws again, the error will bubble up (and can be caught by a higher error boundary).
+      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+    }
+    return markup;
+  },
+
+  performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
+    var inst = this._instance;
+
+    var debugID = 0;
+    if ("development" !== 'production') {
+      debugID = this._debugID;
+    }
+
+    if (inst.componentWillMount) {
+      if ("development" !== 'production') {
+        measureLifeCyclePerf(function () {
+          return inst.componentWillMount();
+        }, debugID, 'componentWillMount');
+      } else {
+        inst.componentWillMount();
+      }
+      // When mounting, calls to `setState` by `componentWillMount` will set
+      // `this._pendingStateQueue` without triggering a re-render.
+      if (this._pendingStateQueue) {
+        inst.state = this._processPendingState(inst.props, inst.context);
+      }
+    }
+
+    // If not a stateless component, we now render
+    if (renderedElement === undefined) {
+      renderedElement = this._renderValidatedComponent();
+    }
+
+    var nodeType = ReactNodeTypes.getType(renderedElement);
+    this._renderedNodeType = nodeType;
+    var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
+    );
+    this._renderedComponent = child;
+
+    var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context), debugID);
+
+    if ("development" !== 'production') {
+      if (debugID !== 0) {
+        var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];
+        ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);
+      }
+    }
+
+    return markup;
+  },
+
+  getHostNode: function () {
+    return ReactReconciler.getHostNode(this._renderedComponent);
+  },
+
+  /**
+   * Releases any resources allocated by `mountComponent`.
+   *
+   * @final
+   * @internal
+   */
+  unmountComponent: function (safely) {
+    if (!this._renderedComponent) {
+      return;
+    }
+
+    var inst = this._instance;
+
+    if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {
+      inst._calledComponentWillUnmount = true;
+
+      if (safely) {
+        var name = this.getName() + '.componentWillUnmount()';
+        ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));
+      } else {
+        if ("development" !== 'production') {
+          measureLifeCyclePerf(function () {
+            return inst.componentWillUnmount();
+          }, this._debugID, 'componentWillUnmount');
+        } else {
+          inst.componentWillUnmount();
+        }
+      }
+    }
+
+    if (this._renderedComponent) {
+      ReactReconciler.unmountComponent(this._renderedComponent, safely);
+      this._renderedNodeType = null;
+      this._renderedComponent = null;
+      this._instance = null;
+    }
+
+    // Reset pending fields
+    // Even if this component is scheduled for another update in ReactUpdates,
+    // it would still be ignored because these fields are reset.
+    this._pendingStateQueue = null;
+    this._pendingReplaceState = false;
+    this._pendingForceUpdate = false;
+    this._pendingCallbacks = null;
+    this._pendingElement = null;
+
+    // These fields do not really need to be reset since this object is no
+    // longer accessible.
+    this._context = null;
+    this._rootNodeID = 0;
+    this._topLevelWrapper = null;
+
+    // Delete the reference from the instance to this internal representation
+    // which allow the internals to be properly cleaned up even if the user
+    // leaks a reference to the public instance.
+    ReactInstanceMap.remove(inst);
+
+    // Some existing components rely on inst.props even after they've been
+    // destroyed (in event handlers).
+    // TODO: inst.props = null;
+    // TODO: inst.state = null;
+    // TODO: inst.context = null;
+  },
+
+  /**
+   * Filters the context object to only contain keys specified in
+   * `contextTypes`
+   *
+   * @param {object} context
+   * @return {?object}
+   * @private
+   */
+  _maskContext: function (context) {
+    var Component = this._currentElement.type;
+    var contextTypes = Component.contextTypes;
+    if (!contextTypes) {
+      return emptyObject;
+    }
+    var maskedContext = {};
+    for (var contextName in contextTypes) {
+      maskedContext[contextName] = context[contextName];
+    }
+    return maskedContext;
+  },
+
+  /**
+   * Filters the context object to only contain keys specified in
+   * `contextTypes`, and asserts that they are valid.
+   *
+   * @param {object} context
+   * @return {?object}
+   * @private
+   */
+  _processContext: function (context) {
+    var maskedContext = this._maskContext(context);
+    if ("development" !== 'production') {
+      var Component = this._currentElement.type;
+      if (Component.contextTypes) {
+        this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
+      }
+    }
+    return maskedContext;
+  },
+
+  /**
+   * @param {object} currentContext
+   * @return {object}
+   * @private
+   */
+  _processChildContext: function (currentContext) {
+    var Component = this._currentElement.type;
+    var inst = this._instance;
+    var childContext;
+
+    if (inst.getChildContext) {
+      if ("development" !== 'production') {
+        ReactInstrumentation.debugTool.onBeginProcessingChildContext();
+        try {
+          childContext = inst.getChildContext();
+        } finally {
+          ReactInstrumentation.debugTool.onEndProcessingChildContext();
+        }
+      } else {
+        childContext = inst.getChildContext();
+      }
+    }
+
+    if (childContext) {
+      !(typeof Component.childContextTypes === 'object') ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;
+      if ("development" !== 'production') {
+        this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
+      }
+      for (var name in childContext) {
+        !(name in Component.childContextTypes) ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;
+      }
+      return _assign({}, currentContext, childContext);
+    }
+    return currentContext;
+  },
+
+  /**
+   * Assert that the context types are valid
+   *
+   * @param {object} typeSpecs Map of context field to a ReactPropType
+   * @param {object} values Runtime values that need to be type-checked
+   * @param {string} location e.g. "prop", "context", "child context"
+   * @private
+   */
+  _checkContextTypes: function (typeSpecs, values, location) {
+    checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);
+  },
+
+  receiveComponent: function (nextElement, transaction, nextContext) {
+    var prevElement = this._currentElement;
+    var prevContext = this._context;
+
+    this._pendingElement = null;
+
+    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
+  },
+
+  /**
+   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
+   * is set, update the component.
+   *
+   * @param {ReactReconcileTransaction} transaction
+   * @internal
+   */
+  performUpdateIfNecessary: function (transaction) {
+    if (this._pendingElement != null) {
+      ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);
+    } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
+      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
+    } else {
+      this._updateBatchNumber = null;
+    }
+  },
+
+  /**
+   * Perform an update to a mounted component. The componentWillReceiveProps and
+   * shouldComponentUpdate methods are called, then (assuming the update isn't
+   * skipped) the remaining update lifecycle methods are called and the DOM
+   * representation is updated.
+   *
+   * By default, this implements React's rendering and reconciliation algorithm.
+   * Sophisticated clients may wish to override this.
+   *
+   * @param {ReactReconcileTransaction} transaction
+   * @param {ReactElement} prevParentElement
+   * @param {ReactElement} nextParentElement
+   * @internal
+   * @overridable
+   */
+  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
+    var inst = this._instance;
+    !(inst != null) ? "development" !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;
+
+    var willReceive = false;
+    var nextContext;
+
+    // Determine if the context has changed or not
+    if (this._context === nextUnmaskedContext) {
+      nextContext = inst.context;
+    } else {
+      nextContext = this._processContext(nextUnmaskedContext);
+      willReceive = true;
+    }
+
+    var prevProps = prevParentElement.props;
+    var nextProps = nextParentElement.props;
+
+    // Not a simple state update but a props update
+    if (prevParentElement !== nextParentElement) {
+      willReceive = true;
+    }
+
+    // An update here will schedule an update but immediately set
+    // _pendingStateQueue which will ensure that any state updates gets
+    // immediately reconciled instead of waiting for the next batch.
+    if (willReceive && inst.componentWillReceiveProps) {
+      if ("development" !== 'production') {
+        measureLifeCyclePerf(function () {
+          return inst.componentWillReceiveProps(nextProps, nextContext);
+        }, this._debugID, 'componentWillReceiveProps');
+      } else {
+        inst.componentWillReceiveProps(nextProps, nextContext);
+      }
+    }
+
+    var nextState = this._processPendingState(nextProps, nextContext);
+    var shouldUpdate = true;
+
+    if (!this._pendingForceUpdate) {
+      if (inst.shouldComponentUpdate) {
+        if ("development" !== 'production') {
+          shouldUpdate = measureLifeCyclePerf(function () {
+            return inst.shouldComponentUpdate(nextProps, nextState, nextContext);
+          }, this._debugID, 'shouldComponentUpdate');
+        } else {
+          shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);
+        }
+      } else {
+        if (this._compositeType === CompositeTypes.PureClass) {
+          shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);
+        }
+      }
+    }
+
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;
+    }
+
+    this._updateBatchNumber = null;
+    if (shouldUpdate) {
+      this._pendingForceUpdate = false;
+      // Will set `this.props`, `this.state` and `this.context`.
+      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
+    } else {
+      // If it's determined that a component should not update, we still want
+      // to set props and state but we shortcut the rest of the update.
+      this._currentElement = nextParentElement;
+      this._context = nextUnmaskedContext;
+      inst.props = nextProps;
+      inst.state = nextState;
+      inst.context = nextContext;
+    }
+  },
+
+  _processPendingState: function (props, context) {
+    var inst = this._instance;
+    var queue = this._pendingStateQueue;
+    var replace = this._pendingReplaceState;
+    this._pendingReplaceState = false;
+    this._pendingStateQueue = null;
+
+    if (!queue) {
+      return inst.state;
+    }
+
+    if (replace && queue.length === 1) {
+      return queue[0];
+    }
+
+    var nextState = _assign({}, replace ? queue[0] : inst.state);
+    for (var i = replace ? 1 : 0; i < queue.length; i++) {
+      var partial = queue[i];
+      _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
+    }
+
+    return nextState;
+  },
+
+  /**
+   * Merges new props and state, notifies delegate methods of update and
+   * performs update.
+   *
+   * @param {ReactElement} nextElement Next element
+   * @param {object} nextProps Next public object to set as properties.
+   * @param {?object} nextState Next object to set as state.
+   * @param {?object} nextContext Next public object to set as context.
+   * @param {ReactReconcileTransaction} transaction
+   * @param {?object} unmaskedContext
+   * @private
+   */
+  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
+    var _this2 = this;
+
+    var inst = this._instance;
+
+    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);
+    var prevProps;
+    var prevState;
+    var prevContext;
+    if (hasComponentDidUpdate) {
+      prevProps = inst.props;
+      prevState = inst.state;
+      prevContext = inst.context;
+    }
+
+    if (inst.componentWillUpdate) {
+      if ("development" !== 'production') {
+        measureLifeCyclePerf(function () {
+          return inst.componentWillUpdate(nextProps, nextState, nextContext);
+        }, this._debugID, 'componentWillUpdate');
+      } else {
+        inst.componentWillUpdate(nextProps, nextState, nextContext);
+      }
+    }
+
+    this._currentElement = nextElement;
+    this._context = unmaskedContext;
+    inst.props = nextProps;
+    inst.state = nextState;
+    inst.context = nextContext;
+
+    this._updateRenderedComponent(transaction, unmaskedContext);
+
+    if (hasComponentDidUpdate) {
+      if ("development" !== 'production') {
+        transaction.getReactMountReady().enqueue(function () {
+          measureLifeCyclePerf(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), _this2._debugID, 'componentDidUpdate');
+        });
+      } else {
+        transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
+      }
+    }
+  },
+
+  /**
+   * Call the component's `render` method and update the DOM accordingly.
+   *
+   * @param {ReactReconcileTransaction} transaction
+   * @internal
+   */
+  _updateRenderedComponent: function (transaction, context) {
+    var prevComponentInstance = this._renderedComponent;
+    var prevRenderedElement = prevComponentInstance._currentElement;
+    var nextRenderedElement = this._renderValidatedComponent();
+
+    var debugID = 0;
+    if ("development" !== 'production') {
+      debugID = this._debugID;
+    }
+
+    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
+      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
+    } else {
+      var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);
+      ReactReconciler.unmountComponent(prevComponentInstance, false);
+
+      var nodeType = ReactNodeTypes.getType(nextRenderedElement);
+      this._renderedNodeType = nodeType;
+      var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
+      );
+      this._renderedComponent = child;
+
+      var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), debugID);
+
+      if ("development" !== 'production') {
+        if (debugID !== 0) {
+          var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];
+          ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);
+        }
+      }
+
+      this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
+    }
+  },
+
+  /**
+   * Overridden in shallow rendering.
+   *
+   * @protected
+   */
+  _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {
+    ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);
+  },
+
+  /**
+   * @protected
+   */
+  _renderValidatedComponentWithoutOwnerOrContext: function () {
+    var inst = this._instance;
+    var renderedComponent;
+
+    if ("development" !== 'production') {
+      renderedComponent = measureLifeCyclePerf(function () {
+        return inst.render();
+      }, this._debugID, 'render');
+    } else {
+      renderedComponent = inst.render();
+    }
+
+    if ("development" !== 'production') {
+      // We allow auto-mocks to proceed as if they're returning null.
+      if (renderedComponent === undefined && inst.render._isMockFunction) {
+        // This is probably bad practice. Consider warning here and
+        // deprecating this convenience.
+        renderedComponent = null;
+      }
+    }
+
+    return renderedComponent;
+  },
+
+  /**
+   * @private
+   */
+  _renderValidatedComponent: function () {
+    var renderedComponent;
+    if ("development" !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {
+      ReactCurrentOwner.current = this;
+      try {
+        renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
+      } finally {
+        ReactCurrentOwner.current = null;
+      }
+    } else {
+      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
+    }
+    !(
+    // TODO: An `isValidNode` function would probably be more appropriate
+    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? "development" !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;
+
+    return renderedComponent;
+  },
+
+  /**
+   * Lazily allocates the refs object and stores `component` as `ref`.
+   *
+   * @param {string} ref Reference name.
+   * @param {component} component Component to store as `ref`.
+   * @final
+   * @private
+   */
+  attachRef: function (ref, component) {
+    var inst = this.getPublicInstance();
+    !(inst != null) ? "development" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;
+    var publicComponentInstance = component.getPublicInstance();
+    if ("development" !== 'production') {
+      var componentName = component && component.getName ? component.getName() : 'a component';
+      "development" !== 'production' ? warning(publicComponentInstance != null || component._compositeType !== CompositeTypes.StatelessFunctional, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;
+    }
+    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
+    refs[ref] = publicComponentInstance;
+  },
+
+  /**
+   * Detaches a reference name.
+   *
+   * @param {string} ref Name to dereference.
+   * @final
+   * @private
+   */
+  detachRef: function (ref) {
+    var refs = this.getPublicInstance().refs;
+    delete refs[ref];
+  },
+
+  /**
+   * Get a text description of the component that can be used to identify it
+   * in error messages.
+   * @return {string} The name or null.
+   * @internal
+   */
+  getName: function () {
+    var type = this._currentElement.type;
+    var constructor = this._instance && this._instance.constructor;
+    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
+  },
+
+  /**
+   * Get the publicly accessible representation of this component - i.e. what
+   * is exposed by refs and returned by render. Can be null for stateless
+   * components.
+   *
+   * @return {ReactComponent} the public component instance.
+   * @internal
+   */
+  getPublicInstance: function () {
+    var inst = this._instance;
+    if (this._compositeType === CompositeTypes.StatelessFunctional) {
+      return null;
+    }
+    return inst;
+  },
+
+  // Stub
+  _instantiateReactComponent: null
+
+};
+
+var ReactCompositeComponent = {
+
+  Mixin: ReactCompositeComponentMixin
+
+};
+
+module.exports = ReactCompositeComponent;
+},{"119":119,"140":140,"144":144,"155":155,"162":162,"170":170,"171":171,"172":172,"34":34,"37":37,"61":61,"64":64,"72":72,"73":73,"79":79,"83":83,"88":88}],37:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactCurrentOwner
+ */
+
+'use strict';
+
+/**
+ * Keeps track of the current owner.
+ *
+ * The current owner is the component who should own any components that are
+ * currently being constructed.
+ */
+
+var ReactCurrentOwner = {
+
+  /**
+   * @internal
+   * @type {ReactComponent}
+   */
+  current: null
+
+};
+
+module.exports = ReactCurrentOwner;
+},{}],38:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOM
+ */
+
+/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
+
+'use strict';
+
+var ReactDOMComponentTree = _dereq_(42);
+var ReactDefaultInjection = _dereq_(60);
+var ReactMount = _dereq_(76);
+var ReactReconciler = _dereq_(88);
+var ReactUpdates = _dereq_(96);
+var ReactVersion = _dereq_(97);
+
+var findDOMNode = _dereq_(123);
+var getHostComponentFromComposite = _dereq_(130);
+var renderSubtreeIntoContainer = _dereq_(141);
+var warning = _dereq_(171);
+
+ReactDefaultInjection.inject();
+
+var ReactDOM = {
+  findDOMNode: findDOMNode,
+  render: ReactMount.render,
+  unmountComponentAtNode: ReactMount.unmountComponentAtNode,
+  version: ReactVersion,
+
+  /* eslint-disable camelcase */
+  unstable_batchedUpdates: ReactUpdates.batchedUpdates,
+  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer
+};
+
+// Inject the runtime into a devtools global hook regardless of browser.
+// Allows for debugging when the hook is injected on the page.
+/* eslint-enable camelcase */
+if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
+  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
+    ComponentTree: {
+      getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,
+      getNodeFromInstance: function (inst) {
+        // inst is an internal instance (but could be a composite)
+        if (inst._renderedComponent) {
+          inst = getHostComponentFromComposite(inst);
+        }
+        if (inst) {
+          return ReactDOMComponentTree.getNodeFromInstance(inst);
+        } else {
+          return null;
+        }
+      }
+    },
+    Mount: ReactMount,
+    Reconciler: ReactReconciler
+  });
+}
+
+if ("development" !== 'production') {
+  var ExecutionEnvironment = _dereq_(148);
+  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
+
+    // First check if devtools is not installed
+    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
+      // If we're in Chrome or Firefox, provide a download link if not installed.
+      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
+        // Firefox does not have the issue with devtools loaded over file://
+        var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;
+        console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');
+      }
+    }
+
+    var testFunc = function testFn() {};
+    "development" !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;
+
+    // If we're in IE8, check to see if we are in compatibility mode and provide
+    // information on preventing compatibility mode
+    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;
+
+    "development" !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : void 0;
+
+    var expectedFeatures = [
+    // shims
+    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];
+
+    for (var i = 0; i < expectedFeatures.length; i++) {
+      if (!expectedFeatures[i]) {
+        "development" !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;
+        break;
+      }
+    }
+  }
+}
+
+if ("development" !== 'production') {
+  var ReactInstrumentation = _dereq_(73);
+  var ReactDOMUnknownPropertyHook = _dereq_(57);
+  var ReactDOMNullInputValuePropHook = _dereq_(49);
+
+  ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook);
+  ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook);
+}
+
+module.exports = ReactDOM;
+},{"123":123,"130":130,"141":141,"148":148,"171":171,"42":42,"49":49,"57":57,"60":60,"73":73,"76":76,"88":88,"96":96,"97":97}],39:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMButton
+ */
+
+'use strict';
+
+var DisabledInputUtils = _dereq_(14);
+
+/**
+ * Implements a <button> host component that does not receive mouse events
+ * when `disabled` is set.
+ */
+var ReactDOMButton = {
+  getHostProps: DisabledInputUtils.getHostProps
+};
+
+module.exports = ReactDOMButton;
+},{"14":14}],40:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMComponent
+ */
+
+/* global hasOwnProperty:true */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var AutoFocusUtils = _dereq_(1);
+var CSSPropertyOperations = _dereq_(4);
+var DOMLazyTree = _dereq_(8);
+var DOMNamespaces = _dereq_(9);
+var DOMProperty = _dereq_(10);
+var DOMPropertyOperations = _dereq_(11);
+var EventConstants = _dereq_(16);
+var EventPluginHub = _dereq_(17);
+var EventPluginRegistry = _dereq_(18);
+var ReactBrowserEventEmitter = _dereq_(27);
+var ReactDOMButton = _dereq_(39);
+var ReactDOMComponentFlags = _dereq_(41);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactDOMInput = _dereq_(48);
+var ReactDOMOption = _dereq_(50);
+var ReactDOMSelect = _dereq_(51);
+var ReactDOMTextarea = _dereq_(55);
+var ReactInstrumentation = _dereq_(73);
+var ReactMultiChild = _dereq_(77);
+var ReactServerRenderingTransaction = _dereq_(92);
+
+var emptyFunction = _dereq_(154);
+var escapeTextContentForBrowser = _dereq_(122);
+var invariant = _dereq_(162);
+var isEventSupported = _dereq_(136);
+var keyOf = _dereq_(166);
+var shallowEqual = _dereq_(170);
+var validateDOMNesting = _dereq_(146);
+var warning = _dereq_(171);
+
+var Flags = ReactDOMComponentFlags;
+var deleteListener = EventPluginHub.deleteListener;
+var getNode = ReactDOMComponentTree.getNodeFromInstance;
+var listenTo = ReactBrowserEventEmitter.listenTo;
+var registrationNameModules = EventPluginRegistry.registrationNameModules;
+
+// For quickly matching children type, to test if can be treated as content.
+var CONTENT_TYPES = { 'string': true, 'number': true };
+
+var STYLE = keyOf({ style: null });
+var HTML = keyOf({ __html: null });
+var RESERVED_PROPS = {
+  children: null,
+  dangerouslySetInnerHTML: null,
+  suppressContentEditableWarning: null
+};
+
+// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
+var DOC_FRAGMENT_TYPE = 11;
+
+function getDeclarationErrorAddendum(internalInstance) {
+  if (internalInstance) {
+    var owner = internalInstance._currentElement._owner || null;
+    if (owner) {
+      var name = owner.getName();
+      if (name) {
+        return ' This DOM node was rendered by `' + name + '`.';
+      }
+    }
+  }
+  return '';
+}
+
+function friendlyStringify(obj) {
+  if (typeof obj === 'object') {
+    if (Array.isArray(obj)) {
+      return '[' + obj.map(friendlyStringify).join(', ') + ']';
+    } else {
+      var pairs = [];
+      for (var key in obj) {
+        if (Object.prototype.hasOwnProperty.call(obj, key)) {
+          var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key);
+          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));
+        }
+      }
+      return '{' + pairs.join(', ') + '}';
+    }
+  } else if (typeof obj === 'string') {
+    return JSON.stringify(obj);
+  } else if (typeof obj === 'function') {
+    return '[function object]';
+  }
+  // Differs from JSON.stringify in that undefined because undefined and that
+  // inf and nan don't become null
+  return String(obj);
+}
+
+var styleMutationWarning = {};
+
+function checkAndWarnForMutatedStyle(style1, style2, component) {
+  if (style1 == null || style2 == null) {
+    return;
+  }
+  if (shallowEqual(style1, style2)) {
+    return;
+  }
+
+  var componentName = component._tag;
+  var owner = component._currentElement._owner;
+  var ownerName;
+  if (owner) {
+    ownerName = owner.getName();
+  }
+
+  var hash = ownerName + '|' + componentName;
+
+  if (styleMutationWarning.hasOwnProperty(hash)) {
+    return;
+  }
+
+  styleMutationWarning[hash] = true;
+
+  "development" !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;
+}
+
+/**
+ * @param {object} component
+ * @param {?object} props
+ */
+function assertValidProps(component, props) {
+  if (!props) {
+    return;
+  }
+  // Note the use of `==` which checks for null or undefined.
+  if (voidElementTags[component._tag]) {
+    !(props.children == null && props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;
+  }
+  if (props.dangerouslySetInnerHTML != null) {
+    !(props.children == null) ? "development" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;
+    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? "development" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;
+  }
+  if ("development" !== 'production') {
+    "development" !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;
+    "development" !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;
+    "development" !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;
+  }
+  !(props.style == null || typeof props.style === 'object') ? "development" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;
+}
+
+function enqueuePutListener(inst, registrationName, listener, transaction) {
+  if (transaction instanceof ReactServerRenderingTransaction) {
+    return;
+  }
+  if ("development" !== 'production') {
+    // IE8 has no API for event capturing and the `onScroll` event doesn't
+    // bubble.
+    "development" !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : void 0;
+  }
+  var containerInfo = inst._hostContainerInfo;
+  var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
+  var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
+  listenTo(registrationName, doc);
+  transaction.getReactMountReady().enqueue(putListener, {
+    inst: inst,
+    registrationName: registrationName,
+    listener: listener
+  });
+}
+
+function putListener() {
+  var listenerToPut = this;
+  EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);
+}
+
+function inputPostMount() {
+  var inst = this;
+  ReactDOMInput.postMountWrapper(inst);
+}
+
+function textareaPostMount() {
+  var inst = this;
+  ReactDOMTextarea.postMountWrapper(inst);
+}
+
+function optionPostMount() {
+  var inst = this;
+  ReactDOMOption.postMountWrapper(inst);
+}
+
+var setAndValidateContentChildDev = emptyFunction;
+if ("development" !== 'production') {
+  setAndValidateContentChildDev = function (content) {
+    var hasExistingContent = this._contentDebugID != null;
+    var debugID = this._debugID;
+    // This ID represents the inlined child that has no backing instance:
+    var contentDebugID = -debugID;
+
+    if (content == null) {
+      if (hasExistingContent) {
+        ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
+      }
+      this._contentDebugID = null;
+      return;
+    }
+
+    validateDOMNesting(null, String(content), this, this._ancestorInfo);
+    this._contentDebugID = contentDebugID;
+    if (hasExistingContent) {
+      ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);
+      ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);
+    } else {
+      ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content, debugID);
+      ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
+      ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
+    }
+  };
+}
+
+// There are so many media events, it makes sense to just
+// maintain a list rather than create a `trapBubbledEvent` for each
+var mediaEvents = {
+  topAbort: 'abort',
+  topCanPlay: 'canplay',
+  topCanPlayThrough: 'canplaythrough',
+  topDurationChange: 'durationchange',
+  topEmptied: 'emptied',
+  topEncrypted: 'encrypted',
+  topEnded: 'ended',
+  topError: 'error',
+  topLoadedData: 'loadeddata',
+  topLoadedMetadata: 'loadedmetadata',
+  topLoadStart: 'loadstart',
+  topPause: 'pause',
+  topPlay: 'play',
+  topPlaying: 'playing',
+  topProgress: 'progress',
+  topRateChange: 'ratechange',
+  topSeeked: 'seeked',
+  topSeeking: 'seeking',
+  topStalled: 'stalled',
+  topSuspend: 'suspend',
+  topTimeUpdate: 'timeupdate',
+  topVolumeChange: 'volumechange',
+  topWaiting: 'waiting'
+};
+
+function trapBubbledEventsLocal() {
+  var inst = this;
+  // If a component renders to null or if another component fatals and causes
+  // the state of the tree to be corrupted, `node` here can be null.
+  !inst._rootNodeID ? "development" !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;
+  var node = getNode(inst);
+  !node ? "development" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;
+
+  switch (inst._tag) {
+    case 'iframe':
+    case 'object':
+      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
+      break;
+    case 'video':
+    case 'audio':
+
+      inst._wrapperState.listeners = [];
+      // Create listener for each media event
+      for (var event in mediaEvents) {
+        if (mediaEvents.hasOwnProperty(event)) {
+          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
+        }
+      }
+      break;
+    case 'source':
+      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];
+      break;
+    case 'img':
+      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
+      break;
+    case 'form':
+      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];
+      break;
+    case 'input':
+    case 'select':
+    case 'textarea':
+      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topInvalid, 'invalid', node)];
+      break;
+  }
+}
+
+function postUpdateSelectWrapper() {
+  ReactDOMSelect.postUpdateWrapper(this);
+}
+
+// For HTML, certain tags should omit their close tag. We keep a whitelist for
+// those special-case tags.
+
+var omittedCloseTags = {
+  'area': true,
+  'base': true,
+  'br': true,
+  'col': true,
+  'embed': true,
+  'hr': true,
+  'img': true,
+  'input': true,
+  'keygen': true,
+  'link': true,
+  'meta': true,
+  'param': true,
+  'source': true,
+  'track': true,
+  'wbr': true
+};
+
+// NOTE: menuitem's close tag should be omitted, but that causes problems.
+var newlineEatingTags = {
+  'listing': true,
+  'pre': true,
+  'textarea': true
+};
+
+// For HTML, certain tags cannot have children. This has the same purpose as
+// `omittedCloseTags` except that `menuitem` should still have its closing tag.
+
+var voidElementTags = _assign({
+  'menuitem': true
+}, omittedCloseTags);
+
+// We accept any tag to be rendered but since this gets injected into arbitrary
+// HTML, we want to make sure that it's a safe tag.
+// http://www.w3.org/TR/REC-xml/#NT-Name
+
+var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
+var validatedTagCache = {};
+var hasOwnProperty = {}.hasOwnProperty;
+
+function validateDangerousTag(tag) {
+  if (!hasOwnProperty.call(validatedTagCache, tag)) {
+    !VALID_TAG_REGEX.test(tag) ? "development" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;
+    validatedTagCache[tag] = true;
+  }
+}
+
+function isCustomComponent(tagName, props) {
+  return tagName.indexOf('-') >= 0 || props.is != null;
+}
+
+var globalIdCounter = 1;
+
+/**
+ * Creates a new React class that is idempotent and capable of containing other
+ * React components. It accepts event listeners and DOM properties that are
+ * valid according to `DOMProperty`.
+ *
+ *  - Event listeners: `onClick`, `onMouseDown`, etc.
+ *  - DOM properties: `className`, `name`, `title`, etc.
+ *
+ * The `style` property functions differently from the DOM API. It accepts an
+ * object mapping of style properties to values.
+ *
+ * @constructor ReactDOMComponent
+ * @extends ReactMultiChild
+ */
+function ReactDOMComponent(element) {
+  var tag = element.type;
+  validateDangerousTag(tag);
+  this._currentElement = element;
+  this._tag = tag.toLowerCase();
+  this._namespaceURI = null;
+  this._renderedChildren = null;
+  this._previousStyle = null;
+  this._previousStyleCopy = null;
+  this._hostNode = null;
+  this._hostParent = null;
+  this._rootNodeID = 0;
+  this._domID = 0;
+  this._hostContainerInfo = null;
+  this._wrapperState = null;
+  this._topLevelWrapper = null;
+  this._flags = 0;
+  if ("development" !== 'production') {
+    this._ancestorInfo = null;
+    setAndValidateContentChildDev.call(this, null);
+  }
+}
+
+ReactDOMComponent.displayName = 'ReactDOMComponent';
+
+ReactDOMComponent.Mixin = {
+
+  /**
+   * Generates root tag markup then recurses. This method has side effects and
+   * is not idempotent.
+   *
+   * @internal
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {?ReactDOMComponent} the parent component instance
+   * @param {?object} info about the host container
+   * @param {object} context
+   * @return {string} The computed markup.
+   */
+  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+    this._rootNodeID = globalIdCounter++;
+    this._domID = hostContainerInfo._idCounter++;
+    this._hostParent = hostParent;
+    this._hostContainerInfo = hostContainerInfo;
+
+    var props = this._currentElement.props;
+
+    switch (this._tag) {
+      case 'audio':
+      case 'form':
+      case 'iframe':
+      case 'img':
+      case 'link':
+      case 'object':
+      case 'source':
+      case 'video':
+        this._wrapperState = {
+          listeners: null
+        };
+        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+        break;
+      case 'button':
+        props = ReactDOMButton.getHostProps(this, props, hostParent);
+        break;
+      case 'input':
+        ReactDOMInput.mountWrapper(this, props, hostParent);
+        props = ReactDOMInput.getHostProps(this, props);
+        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+        break;
+      case 'option':
+        ReactDOMOption.mountWrapper(this, props, hostParent);
+        props = ReactDOMOption.getHostProps(this, props);
+        break;
+      case 'select':
+        ReactDOMSelect.mountWrapper(this, props, hostParent);
+        props = ReactDOMSelect.getHostProps(this, props);
+        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+        break;
+      case 'textarea':
+        ReactDOMTextarea.mountWrapper(this, props, hostParent);
+        props = ReactDOMTextarea.getHostProps(this, props);
+        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+        break;
+    }
+
+    assertValidProps(this, props);
+
+    // We create tags in the namespace of their parent container, except HTML
+    // tags get no namespace.
+    var namespaceURI;
+    var parentTag;
+    if (hostParent != null) {
+      namespaceURI = hostParent._namespaceURI;
+      parentTag = hostParent._tag;
+    } else if (hostContainerInfo._tag) {
+      namespaceURI = hostContainerInfo._namespaceURI;
+      parentTag = hostContainerInfo._tag;
+    }
+    if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {
+      namespaceURI = DOMNamespaces.html;
+    }
+    if (namespaceURI === DOMNamespaces.html) {
+      if (this._tag === 'svg') {
+        namespaceURI = DOMNamespaces.svg;
+      } else if (this._tag === 'math') {
+        namespaceURI = DOMNamespaces.mathml;
+      }
+    }
+    this._namespaceURI = namespaceURI;
+
+    if ("development" !== 'production') {
+      var parentInfo;
+      if (hostParent != null) {
+        parentInfo = hostParent._ancestorInfo;
+      } else if (hostContainerInfo._tag) {
+        parentInfo = hostContainerInfo._ancestorInfo;
+      }
+      if (parentInfo) {
+        // parentInfo should always be present except for the top-level
+        // component when server rendering
+        validateDOMNesting(this._tag, null, this, parentInfo);
+      }
+      this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);
+    }
+
+    var mountImage;
+    if (transaction.useCreateElement) {
+      var ownerDocument = hostContainerInfo._ownerDocument;
+      var el;
+      if (namespaceURI === DOMNamespaces.html) {
+        if (this._tag === 'script') {
+          // Create the script via .innerHTML so its "parser-inserted" flag is
+          // set to true and it does not execute
+          var div = ownerDocument.createElement('div');
+          var type = this._currentElement.type;
+          div.innerHTML = '<' + type + '></' + type + '>';
+          el = div.removeChild(div.firstChild);
+        } else if (props.is) {
+          el = ownerDocument.createElement(this._currentElement.type, props.is);
+        } else {
+          // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.
+          // See discussion in https://github.com/facebook/react/pull/6896
+          // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
+          el = ownerDocument.createElement(this._currentElement.type);
+        }
+      } else {
+        el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
+      }
+      ReactDOMComponentTree.precacheNode(this, el);
+      this._flags |= Flags.hasCachedChildNodes;
+      if (!this._hostParent) {
+        DOMPropertyOperations.setAttributeForRoot(el);
+      }
+      this._updateDOMProperties(null, props, transaction);
+      var lazyTree = DOMLazyTree(el);
+      this._createInitialChildren(transaction, props, context, lazyTree);
+      mountImage = lazyTree;
+    } else {
+      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);
+      var tagContent = this._createContentMarkup(transaction, props, context);
+      if (!tagContent && omittedCloseTags[this._tag]) {
+        mountImage = tagOpen + '/>';
+      } else {
+        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';
+      }
+    }
+
+    switch (this._tag) {
+      case 'input':
+        transaction.getReactMountReady().enqueue(inputPostMount, this);
+        if (props.autoFocus) {
+          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+        }
+        break;
+      case 'textarea':
+        transaction.getReactMountReady().enqueue(textareaPostMount, this);
+        if (props.autoFocus) {
+          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+        }
+        break;
+      case 'select':
+        if (props.autoFocus) {
+          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+        }
+        break;
+      case 'button':
+        if (props.autoFocus) {
+          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+        }
+        break;
+      case 'option':
+        transaction.getReactMountReady().enqueue(optionPostMount, this);
+        break;
+    }
+
+    return mountImage;
+  },
+
+  /**
+   * Creates markup for the open tag and all attributes.
+   *
+   * This method has side effects because events get registered.
+   *
+   * Iterating over object properties is faster than iterating over arrays.
+   * @see http://jsperf.com/obj-vs-arr-iteration
+   *
+   * @private
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {object} props
+   * @return {string} Markup of opening tag.
+   */
+  _createOpenTagMarkupAndPutListeners: function (transaction, props) {
+    var ret = '<' + this._currentElement.type;
+
+    for (var propKey in props) {
+      if (!props.hasOwnProperty(propKey)) {
+        continue;
+      }
+      var propValue = props[propKey];
+      if (propValue == null) {
+        continue;
+      }
+      if (registrationNameModules.hasOwnProperty(propKey)) {
+        if (propValue) {
+          enqueuePutListener(this, propKey, propValue, transaction);
+        }
+      } else {
+        if (propKey === STYLE) {
+          if (propValue) {
+            if ("development" !== 'production') {
+              // See `_updateDOMProperties`. style block
+              this._previousStyle = propValue;
+            }
+            propValue = this._previousStyleCopy = _assign({}, props.style);
+          }
+          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);
+        }
+        var markup = null;
+        if (this._tag != null && isCustomComponent(this._tag, props)) {
+          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
+          }
+        } else {
+          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
+        }
+        if (markup) {
+          ret += ' ' + markup;
+        }
+      }
+    }
+
+    // For static pages, no need to put React ID and checksum. Saves lots of
+    // bytes.
+    if (transaction.renderToStaticMarkup) {
+      return ret;
+    }
+
+    if (!this._hostParent) {
+      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
+    }
+    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
+    return ret;
+  },
+
+  /**
+   * Creates markup for the content between the tags.
+   *
+   * @private
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {object} props
+   * @param {object} context
+   * @return {string} Content markup.
+   */
+  _createContentMarkup: function (transaction, props, context) {
+    var ret = '';
+
+    // Intentional use of != to avoid catching zero/false.
+    var innerHTML = props.dangerouslySetInnerHTML;
+    if (innerHTML != null) {
+      if (innerHTML.__html != null) {
+        ret = innerHTML.__html;
+      }
+    } else {
+      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
+      var childrenToUse = contentToUse != null ? null : props.children;
+      if (contentToUse != null) {
+        // TODO: Validate that text is allowed as a child of this node
+        ret = escapeTextContentForBrowser(contentToUse);
+        if ("development" !== 'production') {
+          setAndValidateContentChildDev.call(this, contentToUse);
+        }
+      } else if (childrenToUse != null) {
+        var mountImages = this.mountChildren(childrenToUse, transaction, context);
+        ret = mountImages.join('');
+      }
+    }
+    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') {
+      // text/html ignores the first character in these tags if it's a newline
+      // Prefer to break application/xml over text/html (for now) by adding
+      // a newline specifically to get eaten by the parser. (Alternately for
+      // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
+      // \r is normalized out by HTMLTextAreaElement#value.)
+      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
+      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
+      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
+      // See: Parsing of "textarea" "listing" and "pre" elements
+      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
+      return '\n' + ret;
+    } else {
+      return ret;
+    }
+  },
+
+  _createInitialChildren: function (transaction, props, context, lazyTree) {
+    // Intentional use of != to avoid catching zero/false.
+    var innerHTML = props.dangerouslySetInnerHTML;
+    if (innerHTML != null) {
+      if (innerHTML.__html != null) {
+        DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);
+      }
+    } else {
+      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
+      var childrenToUse = contentToUse != null ? null : props.children;
+      if (contentToUse != null) {
+        // TODO: Validate that text is allowed as a child of this node
+        if ("development" !== 'production') {
+          setAndValidateContentChildDev.call(this, contentToUse);
+        }
+        DOMLazyTree.queueText(lazyTree, contentToUse);
+      } else if (childrenToUse != null) {
+        var mountImages = this.mountChildren(childrenToUse, transaction, context);
+        for (var i = 0; i < mountImages.length; i++) {
+          DOMLazyTree.queueChild(lazyTree, mountImages[i]);
+        }
+      }
+    }
+  },
+
+  /**
+   * Receives a next element and updates the component.
+   *
+   * @internal
+   * @param {ReactElement} nextElement
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {object} context
+   */
+  receiveComponent: function (nextElement, transaction, context) {
+    var prevElement = this._currentElement;
+    this._currentElement = nextElement;
+    this.updateComponent(transaction, prevElement, nextElement, context);
+  },
+
+  /**
+   * Updates a DOM component after it has already been allocated and
+   * attached to the DOM. Reconciles the root DOM node, then recurses.
+   *
+   * @param {ReactReconcileTransaction} transaction
+   * @param {ReactElement} prevElement
+   * @param {ReactElement} nextElement
+   * @internal
+   * @overridable
+   */
+  updateComponent: function (transaction, prevElement, nextElement, context) {
+    var lastProps = prevElement.props;
+    var nextProps = this._currentElement.props;
+
+    switch (this._tag) {
+      case 'button':
+        lastProps = ReactDOMButton.getHostProps(this, lastProps);
+        nextProps = ReactDOMButton.getHostProps(this, nextProps);
+        break;
+      case 'input':
+        lastProps = ReactDOMInput.getHostProps(this, lastProps);
+        nextProps = ReactDOMInput.getHostProps(this, nextProps);
+        break;
+      case 'option':
+        lastProps = ReactDOMOption.getHostProps(this, lastProps);
+        nextProps = ReactDOMOption.getHostProps(this, nextProps);
+        break;
+      case 'select':
+        lastProps = ReactDOMSelect.getHostProps(this, lastProps);
+        nextProps = ReactDOMSelect.getHostProps(this, nextProps);
+        break;
+      case 'textarea':
+        lastProps = ReactDOMTextarea.getHostProps(this, lastProps);
+        nextProps = ReactDOMTextarea.getHostProps(this, nextProps);
+        break;
+    }
+
+    assertValidProps(this, nextProps);
+    this._updateDOMProperties(lastProps, nextProps, transaction);
+    this._updateDOMChildren(lastProps, nextProps, transaction, context);
+
+    switch (this._tag) {
+      case 'input':
+        // Update the wrapper around inputs *after* updating props. This has to
+        // happen after `_updateDOMProperties`. Otherwise HTML5 input validations
+        // raise warnings and prevent the new value from being assigned.
+        ReactDOMInput.updateWrapper(this);
+        break;
+      case 'textarea':
+        ReactDOMTextarea.updateWrapper(this);
+        break;
+      case 'select':
+        // <select> value update needs to occur after <option> children
+        // reconciliation
+        transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);
+        break;
+    }
+  },
+
+  /**
+   * Reconciles the properties by detecting differences in property values and
+   * updating the DOM as necessary. This function is probably the single most
+   * critical path for performance optimization.
+   *
+   * TODO: Benchmark whether checking for changed values in memory actually
+   *       improves performance (especially statically positioned elements).
+   * TODO: Benchmark the effects of putting this at the top since 99% of props
+   *       do not change for a given reconciliation.
+   * TODO: Benchmark areas that can be improved with caching.
+   *
+   * @private
+   * @param {object} lastProps
+   * @param {object} nextProps
+   * @param {?DOMElement} node
+   */
+  _updateDOMProperties: function (lastProps, nextProps, transaction) {
+    var propKey;
+    var styleName;
+    var styleUpdates;
+    for (propKey in lastProps) {
+      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
+        continue;
+      }
+      if (propKey === STYLE) {
+        var lastStyle = this._previousStyleCopy;
+        for (styleName in lastStyle) {
+          if (lastStyle.hasOwnProperty(styleName)) {
+            styleUpdates = styleUpdates || {};
+            styleUpdates[styleName] = '';
+          }
+        }
+        this._previousStyleCopy = null;
+      } else if (registrationNameModules.hasOwnProperty(propKey)) {
+        if (lastProps[propKey]) {
+          // Only call deleteListener if there was a listener previously or
+          // else willDeleteListener gets called when there wasn't actually a
+          // listener (e.g., onClick={null})
+          deleteListener(this, propKey);
+        }
+      } else if (isCustomComponent(this._tag, lastProps)) {
+        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+          DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);
+        }
+      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
+        DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);
+      }
+    }
+    for (propKey in nextProps) {
+      var nextProp = nextProps[propKey];
+      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;
+      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
+        continue;
+      }
+      if (propKey === STYLE) {
+        if (nextProp) {
+          if ("development" !== 'production') {
+            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);
+            this._previousStyle = nextProp;
+          }
+          nextProp = this._previousStyleCopy = _assign({}, nextProp);
+        } else {
+          this._previousStyleCopy = null;
+        }
+        if (lastProp) {
+          // Unset styles on `lastProp` but not on `nextProp`.
+          for (styleName in lastProp) {
+            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
+              styleUpdates = styleUpdates || {};
+              styleUpdates[styleName] = '';
+            }
+          }
+          // Update styles that changed since `lastProp`.
+          for (styleName in nextProp) {
+            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
+              styleUpdates = styleUpdates || {};
+              styleUpdates[styleName] = nextProp[styleName];
+            }
+          }
+        } else {
+          // Relies on `updateStylesByID` not mutating `styleUpdates`.
+          styleUpdates = nextProp;
+        }
+      } else if (registrationNameModules.hasOwnProperty(propKey)) {
+        if (nextProp) {
+          enqueuePutListener(this, propKey, nextProp, transaction);
+        } else if (lastProp) {
+          deleteListener(this, propKey);
+        }
+      } else if (isCustomComponent(this._tag, nextProps)) {
+        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+          DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);
+        }
+      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
+        var node = getNode(this);
+        // If we're updating to null or undefined, we should remove the property
+        // from the DOM node instead of inadvertently setting to a string. This
+        // brings us in line with the same behavior we have on initial render.
+        if (nextProp != null) {
+          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);
+        } else {
+          DOMPropertyOperations.deleteValueForProperty(node, propKey);
+        }
+      }
+    }
+    if (styleUpdates) {
+      CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);
+    }
+  },
+
+  /**
+   * Reconciles the children with the various properties that affect the
+   * children content.
+   *
+   * @param {object} lastProps
+   * @param {object} nextProps
+   * @param {ReactReconcileTransaction} transaction
+   * @param {object} context
+   */
+  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {
+    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
+    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;
+
+    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
+    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;
+
+    // Note the use of `!=` which checks for null or undefined.
+    var lastChildren = lastContent != null ? null : lastProps.children;
+    var nextChildren = nextContent != null ? null : nextProps.children;
+
+    // If we're switching from children to content/html or vice versa, remove
+    // the old content
+    var lastHasContentOrHtml = lastContent != null || lastHtml != null;
+    var nextHasContentOrHtml = nextContent != null || nextHtml != null;
+    if (lastChildren != null && nextChildren == null) {
+      this.updateChildren(null, transaction, context);
+    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
+      this.updateTextContent('');
+      if ("development" !== 'production') {
+        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
+      }
+    }
+
+    if (nextContent != null) {
+      if (lastContent !== nextContent) {
+        this.updateTextContent('' + nextContent);
+        if ("development" !== 'production') {
+          setAndValidateContentChildDev.call(this, nextContent);
+        }
+      }
+    } else if (nextHtml != null) {
+      if (lastHtml !== nextHtml) {
+        this.updateMarkup('' + nextHtml);
+      }
+      if ("development" !== 'production') {
+        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
+      }
+    } else if (nextChildren != null) {
+      if ("development" !== 'production') {
+        setAndValidateContentChildDev.call(this, null);
+      }
+
+      this.updateChildren(nextChildren, transaction, context);
+    }
+  },
+
+  getHostNode: function () {
+    return getNode(this);
+  },
+
+  /**
+   * Destroys all event registrations for this instance. Does not remove from
+   * the DOM. That must be done by the parent.
+   *
+   * @internal
+   */
+  unmountComponent: function (safely) {
+    switch (this._tag) {
+      case 'audio':
+      case 'form':
+      case 'iframe':
+      case 'img':
+      case 'link':
+      case 'object':
+      case 'source':
+      case 'video':
+        var listeners = this._wrapperState.listeners;
+        if (listeners) {
+          for (var i = 0; i < listeners.length; i++) {
+            listeners[i].remove();
+          }
+        }
+        break;
+      case 'html':
+      case 'head':
+      case 'body':
+        /**
+         * Components like <html> <head> and <body> can't be removed or added
+         * easily in a cross-browser way, however it's valuable to be able to
+         * take advantage of React's reconciliation for styling and <title>
+         * management. So we just document it and throw in dangerous cases.
+         */
+        !false ? "development" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;
+        break;
+    }
+
+    this.unmountChildren(safely);
+    ReactDOMComponentTree.uncacheNode(this);
+    EventPluginHub.deleteAllListeners(this);
+    this._rootNodeID = 0;
+    this._domID = 0;
+    this._wrapperState = null;
+
+    if ("development" !== 'production') {
+      setAndValidateContentChildDev.call(this, null);
+    }
+  },
+
+  getPublicInstance: function () {
+    return getNode(this);
+  }
+
+};
+
+_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
+
+module.exports = ReactDOMComponent;
+},{"1":1,"10":10,"11":11,"122":122,"136":136,"140":140,"146":146,"154":154,"16":16,"162":162,"166":166,"17":17,"170":170,"171":171,"172":172,"18":18,"27":27,"39":39,"4":4,"41":41,"42":42,"48":48,"50":50,"51":51,"55":55,"73":73,"77":77,"8":8,"9":9,"92":92}],41:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMComponentFlags
+ */
+
+'use strict';
+
+var ReactDOMComponentFlags = {
+  hasCachedChildNodes: 1 << 0
+};
+
+module.exports = ReactDOMComponentFlags;
+},{}],42:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMComponentTree
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var DOMProperty = _dereq_(10);
+var ReactDOMComponentFlags = _dereq_(41);
+
+var invariant = _dereq_(162);
+
+var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
+var Flags = ReactDOMComponentFlags;
+
+var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
+
+/**
+ * Drill down (through composites and empty components) until we get a host or
+ * host text component.
+ *
+ * This is pretty polymorphic but unavoidable with the current structure we have
+ * for `_renderedChildren`.
+ */
+function getRenderedHostOrTextFromComponent(component) {
+  var rendered;
+  while (rendered = component._renderedComponent) {
+    component = rendered;
+  }
+  return component;
+}
+
+/**
+ * Populate `_hostNode` on the rendered host/text component with the given
+ * DOM node. The passed `inst` can be a composite.
+ */
+function precacheNode(inst, node) {
+  var hostInst = getRenderedHostOrTextFromComponent(inst);
+  hostInst._hostNode = node;
+  node[internalInstanceKey] = hostInst;
+}
+
+function uncacheNode(inst) {
+  var node = inst._hostNode;
+  if (node) {
+    delete node[internalInstanceKey];
+    inst._hostNode = null;
+  }
+}
+
+/**
+ * Populate `_hostNode` on each child of `inst`, assuming that the children
+ * match up with the DOM (element) children of `node`.
+ *
+ * We cache entire levels at once to avoid an n^2 problem where we access the
+ * children of a node sequentially and have to walk from the start to our target
+ * node every time.
+ *
+ * Since we update `_renderedChildren` and the actual DOM at (slightly)
+ * different times, we could race here and see a newer `_renderedChildren` than
+ * the DOM nodes we see. To avoid this, ReactMultiChild calls
+ * `prepareToManageChildren` before we change `_renderedChildren`, at which
+ * time the container's child nodes are always cached (until it unmounts).
+ */
+function precacheChildNodes(inst, node) {
+  if (inst._flags & Flags.hasCachedChildNodes) {
+    return;
+  }
+  var children = inst._renderedChildren;
+  var childNode = node.firstChild;
+  outer: for (var name in children) {
+    if (!children.hasOwnProperty(name)) {
+      continue;
+    }
+    var childInst = children[name];
+    var childID = getRenderedHostOrTextFromComponent(childInst)._domID;
+    if (childID === 0) {
+      // We're currently unmounting this child in ReactMultiChild; skip it.
+      continue;
+    }
+    // We assume the child nodes are in the same order as the child instances.
+    for (; childNode !== null; childNode = childNode.nextSibling) {
+      if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {
+        precacheNode(childInst, childNode);
+        continue outer;
+      }
+    }
+    // We reached the end of the DOM children without finding an ID match.
+    !false ? "development" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;
+  }
+  inst._flags |= Flags.hasCachedChildNodes;
+}
+
+/**
+ * Given a DOM node, return the closest ReactDOMComponent or
+ * ReactDOMTextComponent instance ancestor.
+ */
+function getClosestInstanceFromNode(node) {
+  if (node[internalInstanceKey]) {
+    return node[internalInstanceKey];
+  }
+
+  // Walk up the tree until we find an ancestor whose instance we have cached.
+  var parents = [];
+  while (!node[internalInstanceKey]) {
+    parents.push(node);
+    if (node.parentNode) {
+      node = node.parentNode;
+    } else {
+      // Top of the tree. This node must not be part of a React tree (or is
+      // unmounted, potentially).
+      return null;
+    }
+  }
+
+  var closest;
+  var inst;
+  for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {
+    closest = inst;
+    if (parents.length) {
+      precacheChildNodes(inst, node);
+    }
+  }
+
+  return closest;
+}
+
+/**
+ * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
+ * instance, or null if the node was not rendered by this React.
+ */
+function getInstanceFromNode(node) {
+  var inst = getClosestInstanceFromNode(node);
+  if (inst != null && inst._hostNode === node) {
+    return inst;
+  } else {
+    return null;
+  }
+}
+
+/**
+ * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
+ * DOM node.
+ */
+function getNodeFromInstance(inst) {
+  // Without this first invariant, passing a non-DOM-component triggers the next
+  // invariant for a missing parent, which is super confusing.
+  !(inst._hostNode !== undefined) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+
+  if (inst._hostNode) {
+    return inst._hostNode;
+  }
+
+  // Walk up the tree until we find an ancestor whose DOM node we have cached.
+  var parents = [];
+  while (!inst._hostNode) {
+    parents.push(inst);
+    !inst._hostParent ? "development" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;
+    inst = inst._hostParent;
+  }
+
+  // Now parents contains each ancestor that does *not* have a cached native
+  // node, and `inst` is the deepest ancestor that does.
+  for (; parents.length; inst = parents.pop()) {
+    precacheChildNodes(inst, inst._hostNode);
+  }
+
+  return inst._hostNode;
+}
+
+var ReactDOMComponentTree = {
+  getClosestInstanceFromNode: getClosestInstanceFromNode,
+  getInstanceFromNode: getInstanceFromNode,
+  getNodeFromInstance: getNodeFromInstance,
+  precacheChildNodes: precacheChildNodes,
+  precacheNode: precacheNode,
+  uncacheNode: uncacheNode
+};
+
+module.exports = ReactDOMComponentTree;
+},{"10":10,"140":140,"162":162,"41":41}],43:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMContainerInfo
+ */
+
+'use strict';
+
+var validateDOMNesting = _dereq_(146);
+
+var DOC_NODE_TYPE = 9;
+
+function ReactDOMContainerInfo(topLevelWrapper, node) {
+  var info = {
+    _topLevelWrapper: topLevelWrapper,
+    _idCounter: 1,
+    _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,
+    _node: node,
+    _tag: node ? node.nodeName.toLowerCase() : null,
+    _namespaceURI: node ? node.namespaceURI : null
+  };
+  if ("development" !== 'production') {
+    info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;
+  }
+  return info;
+}
+
+module.exports = ReactDOMContainerInfo;
+},{"146":146}],44:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMEmptyComponent
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var DOMLazyTree = _dereq_(8);
+var ReactDOMComponentTree = _dereq_(42);
+
+var ReactDOMEmptyComponent = function (instantiate) {
+  // ReactCompositeComponent uses this:
+  this._currentElement = null;
+  // ReactDOMComponentTree uses these:
+  this._hostNode = null;
+  this._hostParent = null;
+  this._hostContainerInfo = null;
+  this._domID = 0;
+};
+_assign(ReactDOMEmptyComponent.prototype, {
+  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+    var domID = hostContainerInfo._idCounter++;
+    this._domID = domID;
+    this._hostParent = hostParent;
+    this._hostContainerInfo = hostContainerInfo;
+
+    var nodeValue = ' react-empty: ' + this._domID + ' ';
+    if (transaction.useCreateElement) {
+      var ownerDocument = hostContainerInfo._ownerDocument;
+      var node = ownerDocument.createComment(nodeValue);
+      ReactDOMComponentTree.precacheNode(this, node);
+      return DOMLazyTree(node);
+    } else {
+      if (transaction.renderToStaticMarkup) {
+        // Normally we'd insert a comment node, but since this is a situation
+        // where React won't take over (static pages), we can simply return
+        // nothing.
+        return '';
+      }
+      return '<!--' + nodeValue + '-->';
+    }
+  },
+  receiveComponent: function () {},
+  getHostNode: function () {
+    return ReactDOMComponentTree.getNodeFromInstance(this);
+  },
+  unmountComponent: function () {
+    ReactDOMComponentTree.uncacheNode(this);
+  }
+});
+
+module.exports = ReactDOMEmptyComponent;
+},{"172":172,"42":42,"8":8}],45:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMFactories
+ */
+
+'use strict';
+
+var ReactElement = _dereq_(61);
+
+/**
+ * Create a factory that creates HTML tag elements.
+ *
+ * @private
+ */
+var createDOMFactory = ReactElement.createFactory;
+if ("development" !== 'production') {
+  var ReactElementValidator = _dereq_(62);
+  createDOMFactory = ReactElementValidator.createFactory;
+}
+
+/**
+ * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
+ * This is also accessible via `React.DOM`.
+ *
+ * @public
+ */
+var ReactDOMFactories = {
+  a: createDOMFactory('a'),
+  abbr: createDOMFactory('abbr'),
+  address: createDOMFactory('address'),
+  area: createDOMFactory('area'),
+  article: createDOMFactory('article'),
+  aside: createDOMFactory('aside'),
+  audio: createDOMFactory('audio'),
+  b: createDOMFactory('b'),
+  base: createDOMFactory('base'),
+  bdi: createDOMFactory('bdi'),
+  bdo: createDOMFactory('bdo'),
+  big: createDOMFactory('big'),
+  blockquote: createDOMFactory('blockquote'),
+  body: createDOMFactory('body'),
+  br: createDOMFactory('br'),
+  button: createDOMFactory('button'),
+  canvas: createDOMFactory('canvas'),
+  caption: createDOMFactory('caption'),
+  cite: createDOMFactory('cite'),
+  code: createDOMFactory('code'),
+  col: createDOMFactory('col'),
+  colgroup: createDOMFactory('colgroup'),
+  data: createDOMFactory('data'),
+  datalist: createDOMFactory('datalist'),
+  dd: createDOMFactory('dd'),
+  del: createDOMFactory('del'),
+  details: createDOMFactory('details'),
+  dfn: createDOMFactory('dfn'),
+  dialog: createDOMFactory('dialog'),
+  div: createDOMFactory('div'),
+  dl: createDOMFactory('dl'),
+  dt: createDOMFactory('dt'),
+  em: createDOMFactory('em'),
+  embed: createDOMFactory('embed'),
+  fieldset: createDOMFactory('fieldset'),
+  figcaption: createDOMFactory('figcaption'),
+  figure: createDOMFactory('figure'),
+  footer: createDOMFactory('footer'),
+  form: createDOMFactory('form'),
+  h1: createDOMFactory('h1'),
+  h2: createDOMFactory('h2'),
+  h3: createDOMFactory('h3'),
+  h4: createDOMFactory('h4'),
+  h5: createDOMFactory('h5'),
+  h6: createDOMFactory('h6'),
+  head: createDOMFactory('head'),
+  header: createDOMFactory('header'),
+  hgroup: createDOMFactory('hgroup'),
+  hr: createDOMFactory('hr'),
+  html: createDOMFactory('html'),
+  i: createDOMFactory('i'),
+  iframe: createDOMFactory('iframe'),
+  img: createDOMFactory('img'),
+  input: createDOMFactory('input'),
+  ins: createDOMFactory('ins'),
+  kbd: createDOMFactory('kbd'),
+  keygen: createDOMFactory('keygen'),
+  label: createDOMFactory('label'),
+  legend: createDOMFactory('legend'),
+  li: createDOMFactory('li'),
+  link: createDOMFactory('link'),
+  main: createDOMFactory('main'),
+  map: createDOMFactory('map'),
+  mark: createDOMFactory('mark'),
+  menu: createDOMFactory('menu'),
+  menuitem: createDOMFactory('menuitem'),
+  meta: createDOMFactory('meta'),
+  meter: createDOMFactory('meter'),
+  nav: createDOMFactory('nav'),
+  noscript: createDOMFactory('noscript'),
+  object: createDOMFactory('object'),
+  ol: createDOMFactory('ol'),
+  optgroup: createDOMFactory('optgroup'),
+  option: createDOMFactory('option'),
+  output: createDOMFactory('output'),
+  p: createDOMFactory('p'),
+  param: createDOMFactory('param'),
+  picture: createDOMFactory('picture'),
+  pre: createDOMFactory('pre'),
+  progress: createDOMFactory('progress'),
+  q: createDOMFactory('q'),
+  rp: createDOMFactory('rp'),
+  rt: createDOMFactory('rt'),
+  ruby: createDOMFactory('ruby'),
+  s: createDOMFactory('s'),
+  samp: createDOMFactory('samp'),
+  script: createDOMFactory('script'),
+  section: createDOMFactory('section'),
+  select: createDOMFactory('select'),
+  small: createDOMFactory('small'),
+  source: createDOMFactory('source'),
+  span: createDOMFactory('span'),
+  strong: createDOMFactory('strong'),
+  style: createDOMFactory('style'),
+  sub: createDOMFactory('sub'),
+  summary: createDOMFactory('summary'),
+  sup: createDOMFactory('sup'),
+  table: createDOMFactory('table'),
+  tbody: createDOMFactory('tbody'),
+  td: createDOMFactory('td'),
+  textarea: createDOMFactory('textarea'),
+  tfoot: createDOMFactory('tfoot'),
+  th: createDOMFactory('th'),
+  thead: createDOMFactory('thead'),
+  time: createDOMFactory('time'),
+  title: createDOMFactory('title'),
+  tr: createDOMFactory('tr'),
+  track: createDOMFactory('track'),
+  u: createDOMFactory('u'),
+  ul: createDOMFactory('ul'),
+  'var': createDOMFactory('var'),
+  video: createDOMFactory('video'),
+  wbr: createDOMFactory('wbr'),
+
+  // SVG
+  circle: createDOMFactory('circle'),
+  clipPath: createDOMFactory('clipPath'),
+  defs: createDOMFactory('defs'),
+  ellipse: createDOMFactory('ellipse'),
+  g: createDOMFactory('g'),
+  image: createDOMFactory('image'),
+  line: createDOMFactory('line'),
+  linearGradient: createDOMFactory('linearGradient'),
+  mask: createDOMFactory('mask'),
+  path: createDOMFactory('path'),
+  pattern: createDOMFactory('pattern'),
+  polygon: createDOMFactory('polygon'),
+  polyline: createDOMFactory('polyline'),
+  radialGradient: createDOMFactory('radialGradient'),
+  rect: createDOMFactory('rect'),
+  stop: createDOMFactory('stop'),
+  svg: createDOMFactory('svg'),
+  text: createDOMFactory('text'),
+  tspan: createDOMFactory('tspan')
+};
+
+module.exports = ReactDOMFactories;
+},{"61":61,"62":62}],46:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMFeatureFlags
+ */
+
+'use strict';
+
+var ReactDOMFeatureFlags = {
+  useCreateElement: true
+};
+
+module.exports = ReactDOMFeatureFlags;
+},{}],47:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMIDOperations
+ */
+
+'use strict';
+
+var DOMChildrenOperations = _dereq_(7);
+var ReactDOMComponentTree = _dereq_(42);
+
+/**
+ * Operations used to process updates to DOM nodes.
+ */
+var ReactDOMIDOperations = {
+
+  /**
+   * Updates a component's children by processing a series of updates.
+   *
+   * @param {array<object>} updates List of update configurations.
+   * @internal
+   */
+  dangerouslyProcessChildrenUpdates: function (parentInst, updates) {
+    var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);
+    DOMChildrenOperations.processUpdates(node, updates);
+  }
+};
+
+module.exports = ReactDOMIDOperations;
+},{"42":42,"7":7}],48:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMInput
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var DisabledInputUtils = _dereq_(14);
+var DOMPropertyOperations = _dereq_(11);
+var LinkedValueUtils = _dereq_(24);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactUpdates = _dereq_(96);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+var didWarnValueLink = false;
+var didWarnCheckedLink = false;
+var didWarnValueDefaultValue = false;
+var didWarnCheckedDefaultChecked = false;
+var didWarnControlledToUncontrolled = false;
+var didWarnUncontrolledToControlled = false;
+
+function forceUpdateIfMounted() {
+  if (this._rootNodeID) {
+    // DOM component is still mounted; update
+    ReactDOMInput.updateWrapper(this);
+  }
+}
+
+function isControlled(props) {
+  var usesChecked = props.type === 'checkbox' || props.type === 'radio';
+  return usesChecked ? props.checked != null : props.value != null;
+}
+
+/**
+ * Implements an <input> host component that allows setting these optional
+ * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
+ *
+ * If `checked` or `value` are not supplied (or null/undefined), user actions
+ * that affect the checked state or value will trigger updates to the element.
+ *
+ * If they are supplied (and not null/undefined), the rendered element will not
+ * trigger updates to the element. Instead, the props must change in order for
+ * the rendered element to be updated.
+ *
+ * The rendered element will be initialized as unchecked (or `defaultChecked`)
+ * with an empty value (or `defaultValue`).
+ *
+ * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
+ */
+var ReactDOMInput = {
+  getHostProps: function (inst, props) {
+    var value = LinkedValueUtils.getValue(props);
+    var checked = LinkedValueUtils.getChecked(props);
+
+    var hostProps = _assign({
+      // Make sure we set .type before any other properties (setting .value
+      // before .type means .value is lost in IE11 and below)
+      type: undefined,
+      // Make sure we set .step before .value (setting .value before .step
+      // means .value is rounded on mount, based upon step precision)
+      step: undefined,
+      // Make sure we set .min & .max before .value (to ensure proper order
+      // in corner cases such as min or max deriving from value, e.g. Issue #7170)
+      min: undefined,
+      max: undefined
+    }, DisabledInputUtils.getHostProps(inst, props), {
+      defaultChecked: undefined,
+      defaultValue: undefined,
+      value: value != null ? value : inst._wrapperState.initialValue,
+      checked: checked != null ? checked : inst._wrapperState.initialChecked,
+      onChange: inst._wrapperState.onChange
+    });
+
+    return hostProps;
+  },
+
+  mountWrapper: function (inst, props) {
+    if ("development" !== 'production') {
+      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
+
+      var owner = inst._currentElement._owner;
+
+      if (props.valueLink !== undefined && !didWarnValueLink) {
+        "development" !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
+        didWarnValueLink = true;
+      }
+      if (props.checkedLink !== undefined && !didWarnCheckedLink) {
+        "development" !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
+        didWarnCheckedLink = true;
+      }
+      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
+        "development" !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+        didWarnCheckedDefaultChecked = true;
+      }
+      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
+        "development" !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+        didWarnValueDefaultValue = true;
+      }
+    }
+
+    var defaultValue = props.defaultValue;
+    inst._wrapperState = {
+      initialChecked: props.checked != null ? props.checked : props.defaultChecked,
+      initialValue: props.value != null ? props.value : defaultValue,
+      listeners: null,
+      onChange: _handleChange.bind(inst)
+    };
+
+    if ("development" !== 'production') {
+      inst._wrapperState.controlled = isControlled(props);
+    }
+  },
+
+  updateWrapper: function (inst) {
+    var props = inst._currentElement.props;
+
+    if ("development" !== 'production') {
+      var controlled = isControlled(props);
+      var owner = inst._currentElement._owner;
+
+      if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
+        "development" !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+        didWarnUncontrolledToControlled = true;
+      }
+      if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
+        "development" !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+        didWarnControlledToUncontrolled = true;
+      }
+    }
+
+    // TODO: Shouldn't this be getChecked(props)?
+    var checked = props.checked;
+    if (checked != null) {
+      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);
+    }
+
+    var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+    var value = LinkedValueUtils.getValue(props);
+    if (value != null) {
+
+      // Cast `value` to a string to ensure the value is set correctly. While
+      // browsers typically do this as necessary, jsdom doesn't.
+      var newValue = '' + value;
+
+      // To avoid side effects (such as losing text selection), only set value if changed
+      if (newValue !== node.value) {
+        node.value = newValue;
+      }
+    } else {
+      if (props.value == null && props.defaultValue != null) {
+        node.defaultValue = '' + props.defaultValue;
+      }
+      if (props.checked == null && props.defaultChecked != null) {
+        node.defaultChecked = !!props.defaultChecked;
+      }
+    }
+  },
+
+  postMountWrapper: function (inst) {
+    var props = inst._currentElement.props;
+
+    // This is in postMount because we need access to the DOM node, which is not
+    // available until after the component has mounted.
+    var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+
+    // Detach value from defaultValue. We won't do anything if we're working on
+    // submit or reset inputs as those values & defaultValues are linked. They
+    // are not resetable nodes so this operation doesn't matter and actually
+    // removes browser-default values (eg "Submit Query") when no value is
+    // provided.
+
+    switch (props.type) {
+      case 'submit':
+      case 'reset':
+        break;
+      case 'color':
+      case 'date':
+      case 'datetime':
+      case 'datetime-local':
+      case 'month':
+      case 'time':
+      case 'week':
+        // This fixes the no-show issue on iOS Safari and Android Chrome:
+        // https://github.com/facebook/react/issues/7233
+        node.value = '';
+        node.value = node.defaultValue;
+        break;
+      default:
+        node.value = node.value;
+        break;
+    }
+
+    // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
+    // this is needed to work around a chrome bug where setting defaultChecked
+    // will sometimes influence the value of checked (even after detachment).
+    // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
+    // We need to temporarily unset name to avoid disrupting radio button groups.
+    var name = node.name;
+    if (name !== '') {
+      node.name = '';
+    }
+    node.defaultChecked = !node.defaultChecked;
+    node.defaultChecked = !node.defaultChecked;
+    if (name !== '') {
+      node.name = name;
+    }
+  }
+};
+
+function _handleChange(event) {
+  var props = this._currentElement.props;
+
+  var returnValue = LinkedValueUtils.executeOnChange(props, event);
+
+  // Here we use asap to wait until all updates have propagated, which
+  // is important when using controlled components within layers:
+  // https://github.com/facebook/react/issues/1698
+  ReactUpdates.asap(forceUpdateIfMounted, this);
+
+  var name = props.name;
+  if (props.type === 'radio' && name != null) {
+    var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);
+    var queryRoot = rootNode;
+
+    while (queryRoot.parentNode) {
+      queryRoot = queryRoot.parentNode;
+    }
+
+    // If `rootNode.form` was non-null, then we could try `form.elements`,
+    // but that sometimes behaves strangely in IE8. We could also try using
+    // `form.getElementsByName`, but that will only return direct children
+    // and won't include inputs that use the HTML5 `form=` attribute. Since
+    // the input might not even be in a form, let's just use the global
+    // `querySelectorAll` to ensure we don't miss anything.
+    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
+
+    for (var i = 0; i < group.length; i++) {
+      var otherNode = group[i];
+      if (otherNode === rootNode || otherNode.form !== rootNode.form) {
+        continue;
+      }
+      // This will throw if radio buttons rendered by different copies of React
+      // and the same name are rendered into the same form (same as #1939).
+      // That's probably okay; we don't support it just as we don't support
+      // mixing React radio buttons with non-React ones.
+      var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);
+      !otherInstance ? "development" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;
+      // If this is a controlled radio button group, forcing the input that
+      // was previously checked to update will cause it to be come re-checked
+      // as appropriate.
+      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
+    }
+  }
+
+  return returnValue;
+}
+
+module.exports = ReactDOMInput;
+},{"11":11,"14":14,"140":140,"162":162,"171":171,"172":172,"24":24,"42":42,"96":96}],49:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMNullInputValuePropHook
+ */
+
+'use strict';
+
+var ReactComponentTreeHook = _dereq_(35);
+
+var warning = _dereq_(171);
+
+var didWarnValueNull = false;
+
+function handleElement(debugID, element) {
+  if (element == null) {
+    return;
+  }
+  if (element.type !== 'input' && element.type !== 'textarea' && element.type !== 'select') {
+    return;
+  }
+  if (element.props != null && element.props.value === null && !didWarnValueNull) {
+    "development" !== 'production' ? warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+
+    didWarnValueNull = true;
+  }
+}
+
+var ReactDOMNullInputValuePropHook = {
+  onBeforeMountComponent: function (debugID, element) {
+    handleElement(debugID, element);
+  },
+  onBeforeUpdateComponent: function (debugID, element) {
+    handleElement(debugID, element);
+  }
+};
+
+module.exports = ReactDOMNullInputValuePropHook;
+},{"171":171,"35":35}],50:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMOption
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactChildren = _dereq_(29);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactDOMSelect = _dereq_(51);
+
+var warning = _dereq_(171);
+var didWarnInvalidOptionChildren = false;
+
+function flattenChildren(children) {
+  var content = '';
+
+  // Flatten children and warn if they aren't strings or numbers;
+  // invalid types are ignored.
+  ReactChildren.forEach(children, function (child) {
+    if (child == null) {
+      return;
+    }
+    if (typeof child === 'string' || typeof child === 'number') {
+      content += child;
+    } else if (!didWarnInvalidOptionChildren) {
+      didWarnInvalidOptionChildren = true;
+      "development" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
+    }
+  });
+
+  return content;
+}
+
+/**
+ * Implements an <option> host component that warns when `selected` is set.
+ */
+var ReactDOMOption = {
+  mountWrapper: function (inst, props, hostParent) {
+    // TODO (yungsters): Remove support for `selected` in <option>.
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;
+    }
+
+    // Look up whether this option is 'selected'
+    var selectValue = null;
+    if (hostParent != null) {
+      var selectParent = hostParent;
+
+      if (selectParent._tag === 'optgroup') {
+        selectParent = selectParent._hostParent;
+      }
+
+      if (selectParent != null && selectParent._tag === 'select') {
+        selectValue = ReactDOMSelect.getSelectValueContext(selectParent);
+      }
+    }
+
+    // If the value is null (e.g., no specified value or after initial mount)
+    // or missing (e.g., for <datalist>), we don't change props.selected
+    var selected = null;
+    if (selectValue != null) {
+      var value;
+      if (props.value != null) {
+        value = props.value + '';
+      } else {
+        value = flattenChildren(props.children);
+      }
+      selected = false;
+      if (Array.isArray(selectValue)) {
+        // multiple
+        for (var i = 0; i < selectValue.length; i++) {
+          if ('' + selectValue[i] === value) {
+            selected = true;
+            break;
+          }
+        }
+      } else {
+        selected = '' + selectValue === value;
+      }
+    }
+
+    inst._wrapperState = { selected: selected };
+  },
+
+  postMountWrapper: function (inst) {
+    // value="" should make a value attribute (#6219)
+    var props = inst._currentElement.props;
+    if (props.value != null) {
+      var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+      node.setAttribute('value', props.value);
+    }
+  },
+
+  getHostProps: function (inst, props) {
+    var hostProps = _assign({ selected: undefined, children: undefined }, props);
+
+    // Read state only from initial mount because <select> updates value
+    // manually; we need the initial state only for server rendering
+    if (inst._wrapperState.selected != null) {
+      hostProps.selected = inst._wrapperState.selected;
+    }
+
+    var content = flattenChildren(props.children);
+
+    if (content) {
+      hostProps.children = content;
+    }
+
+    return hostProps;
+  }
+
+};
+
+module.exports = ReactDOMOption;
+},{"171":171,"172":172,"29":29,"42":42,"51":51}],51:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMSelect
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var DisabledInputUtils = _dereq_(14);
+var LinkedValueUtils = _dereq_(24);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactUpdates = _dereq_(96);
+
+var warning = _dereq_(171);
+
+var didWarnValueLink = false;
+var didWarnValueDefaultValue = false;
+
+function updateOptionsIfPendingUpdateAndMounted() {
+  if (this._rootNodeID && this._wrapperState.pendingUpdate) {
+    this._wrapperState.pendingUpdate = false;
+
+    var props = this._currentElement.props;
+    var value = LinkedValueUtils.getValue(props);
+
+    if (value != null) {
+      updateOptions(this, Boolean(props.multiple), value);
+    }
+  }
+}
+
+function getDeclarationErrorAddendum(owner) {
+  if (owner) {
+    var name = owner.getName();
+    if (name) {
+      return ' Check the render method of `' + name + '`.';
+    }
+  }
+  return '';
+}
+
+var valuePropNames = ['value', 'defaultValue'];
+
+/**
+ * Validation function for `value` and `defaultValue`.
+ * @private
+ */
+function checkSelectPropTypes(inst, props) {
+  var owner = inst._currentElement._owner;
+  LinkedValueUtils.checkPropTypes('select', props, owner);
+
+  if (props.valueLink !== undefined && !didWarnValueLink) {
+    "development" !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;
+    didWarnValueLink = true;
+  }
+
+  for (var i = 0; i < valuePropNames.length; i++) {
+    var propName = valuePropNames[i];
+    if (props[propName] == null) {
+      continue;
+    }
+    var isArray = Array.isArray(props[propName]);
+    if (props.multiple && !isArray) {
+      "development" !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
+    } else if (!props.multiple && isArray) {
+      "development" !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
+    }
+  }
+}
+
+/**
+ * @param {ReactDOMComponent} inst
+ * @param {boolean} multiple
+ * @param {*} propValue A stringable (with `multiple`, a list of stringables).
+ * @private
+ */
+function updateOptions(inst, multiple, propValue) {
+  var selectedValue, i;
+  var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;
+
+  if (multiple) {
+    selectedValue = {};
+    for (i = 0; i < propValue.length; i++) {
+      selectedValue['' + propValue[i]] = true;
+    }
+    for (i = 0; i < options.length; i++) {
+      var selected = selectedValue.hasOwnProperty(options[i].value);
+      if (options[i].selected !== selected) {
+        options[i].selected = selected;
+      }
+    }
+  } else {
+    // Do not set `select.value` as exact behavior isn't consistent across all
+    // browsers for all cases.
+    selectedValue = '' + propValue;
+    for (i = 0; i < options.length; i++) {
+      if (options[i].value === selectedValue) {
+        options[i].selected = true;
+        return;
+      }
+    }
+    if (options.length) {
+      options[0].selected = true;
+    }
+  }
+}
+
+/**
+ * Implements a <select> host component that allows optionally setting the
+ * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
+ * stringable. If `multiple` is true, the prop must be an array of stringables.
+ *
+ * If `value` is not supplied (or null/undefined), user actions that change the
+ * selected option will trigger updates to the rendered options.
+ *
+ * If it is supplied (and not null/undefined), the rendered options will not
+ * update in response to user actions. Instead, the `value` prop must change in
+ * order for the rendered options to update.
+ *
+ * If `defaultValue` is provided, any options with the supplied values will be
+ * selected.
+ */
+var ReactDOMSelect = {
+  getHostProps: function (inst, props) {
+    return _assign({}, DisabledInputUtils.getHostProps(inst, props), {
+      onChange: inst._wrapperState.onChange,
+      value: undefined
+    });
+  },
+
+  mountWrapper: function (inst, props) {
+    if ("development" !== 'production') {
+      checkSelectPropTypes(inst, props);
+    }
+
+    var value = LinkedValueUtils.getValue(props);
+    inst._wrapperState = {
+      pendingUpdate: false,
+      initialValue: value != null ? value : props.defaultValue,
+      listeners: null,
+      onChange: _handleChange.bind(inst),
+      wasMultiple: Boolean(props.multiple)
+    };
+
+    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
+      "development" !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
+      didWarnValueDefaultValue = true;
+    }
+  },
+
+  getSelectValueContext: function (inst) {
+    // ReactDOMOption looks at this initial value so the initial generated
+    // markup has correct `selected` attributes
+    return inst._wrapperState.initialValue;
+  },
+
+  postUpdateWrapper: function (inst) {
+    var props = inst._currentElement.props;
+
+    // After the initial mount, we control selected-ness manually so don't pass
+    // this value down
+    inst._wrapperState.initialValue = undefined;
+
+    var wasMultiple = inst._wrapperState.wasMultiple;
+    inst._wrapperState.wasMultiple = Boolean(props.multiple);
+
+    var value = LinkedValueUtils.getValue(props);
+    if (value != null) {
+      inst._wrapperState.pendingUpdate = false;
+      updateOptions(inst, Boolean(props.multiple), value);
+    } else if (wasMultiple !== Boolean(props.multiple)) {
+      // For simplicity, reapply `defaultValue` if `multiple` is toggled.
+      if (props.defaultValue != null) {
+        updateOptions(inst, Boolean(props.multiple), props.defaultValue);
+      } else {
+        // Revert the select back to its default unselected state.
+        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');
+      }
+    }
+  }
+};
+
+function _handleChange(event) {
+  var props = this._currentElement.props;
+  var returnValue = LinkedValueUtils.executeOnChange(props, event);
+
+  if (this._rootNodeID) {
+    this._wrapperState.pendingUpdate = true;
+  }
+  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
+  return returnValue;
+}
+
+module.exports = ReactDOMSelect;
+},{"14":14,"171":171,"172":172,"24":24,"42":42,"96":96}],52:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMSelection
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+
+var getNodeForCharacterOffset = _dereq_(132);
+var getTextContentAccessor = _dereq_(133);
+
+/**
+ * While `isCollapsed` is available on the Selection object and `collapsed`
+ * is available on the Range object, IE11 sometimes gets them wrong.
+ * If the anchor/focus nodes and offsets are the same, the range is collapsed.
+ */
+function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
+  return anchorNode === focusNode && anchorOffset === focusOffset;
+}
+
+/**
+ * Get the appropriate anchor and focus node/offset pairs for IE.
+ *
+ * The catch here is that IE's selection API doesn't provide information
+ * about whether the selection is forward or backward, so we have to
+ * behave as though it's always forward.
+ *
+ * IE text differs from modern selection in that it behaves as though
+ * block elements end with a new line. This means character offsets will
+ * differ between the two APIs.
+ *
+ * @param {DOMElement} node
+ * @return {object}
+ */
+function getIEOffsets(node) {
+  var selection = document.selection;
+  var selectedRange = selection.createRange();
+  var selectedLength = selectedRange.text.length;
+
+  // Duplicate selection so we can move range without breaking user selection.
+  var fromStart = selectedRange.duplicate();
+  fromStart.moveToElementText(node);
+  fromStart.setEndPoint('EndToStart', selectedRange);
+
+  var startOffset = fromStart.text.length;
+  var endOffset = startOffset + selectedLength;
+
+  return {
+    start: startOffset,
+    end: endOffset
+  };
+}
+
+/**
+ * @param {DOMElement} node
+ * @return {?object}
+ */
+function getModernOffsets(node) {
+  var selection = window.getSelection && window.getSelection();
+
+  if (!selection || selection.rangeCount === 0) {
+    return null;
+  }
+
+  var anchorNode = selection.anchorNode;
+  var anchorOffset = selection.anchorOffset;
+  var focusNode = selection.focusNode;
+  var focusOffset = selection.focusOffset;
+
+  var currentRange = selection.getRangeAt(0);
+
+  // In Firefox, range.startContainer and range.endContainer can be "anonymous
+  // divs", e.g. the up/down buttons on an <input type="number">. Anonymous
+  // divs do not seem to expose properties, triggering a "Permission denied
+  // error" if any of its properties are accessed. The only seemingly possible
+  // way to avoid erroring is to access a property that typically works for
+  // non-anonymous divs and catch any error that may otherwise arise. See
+  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+  try {
+    /* eslint-disable no-unused-expressions */
+    currentRange.startContainer.nodeType;
+    currentRange.endContainer.nodeType;
+    /* eslint-enable no-unused-expressions */
+  } catch (e) {
+    return null;
+  }
+
+  // If the node and offset values are the same, the selection is collapsed.
+  // `Selection.isCollapsed` is available natively, but IE sometimes gets
+  // this value wrong.
+  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);
+
+  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;
+
+  var tempRange = currentRange.cloneRange();
+  tempRange.selectNodeContents(node);
+  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
+
+  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);
+
+  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
+  var end = start + rangeLength;
+
+  // Detect whether the selection is backward.
+  var detectionRange = document.createRange();
+  detectionRange.setStart(anchorNode, anchorOffset);
+  detectionRange.setEnd(focusNode, focusOffset);
+  var isBackward = detectionRange.collapsed;
+
+  return {
+    start: isBackward ? end : start,
+    end: isBackward ? start : end
+  };
+}
+
+/**
+ * @param {DOMElement|DOMTextNode} node
+ * @param {object} offsets
+ */
+function setIEOffsets(node, offsets) {
+  var range = document.selection.createRange().duplicate();
+  var start, end;
+
+  if (offsets.end === undefined) {
+    start = offsets.start;
+    end = start;
+  } else if (offsets.start > offsets.end) {
+    start = offsets.end;
+    end = offsets.start;
+  } else {
+    start = offsets.start;
+    end = offsets.end;
+  }
+
+  range.moveToElementText(node);
+  range.moveStart('character', start);
+  range.setEndPoint('EndToStart', range);
+  range.moveEnd('character', end - start);
+  range.select();
+}
+
+/**
+ * In modern non-IE browsers, we can support both forward and backward
+ * selections.
+ *
+ * Note: IE10+ supports the Selection object, but it does not support
+ * the `extend` method, which means that even in modern IE, it's not possible
+ * to programmatically create a backward selection. Thus, for all IE
+ * versions, we use the old IE API to create our selections.
+ *
+ * @param {DOMElement|DOMTextNode} node
+ * @param {object} offsets
+ */
+function setModernOffsets(node, offsets) {
+  if (!window.getSelection) {
+    return;
+  }
+
+  var selection = window.getSelection();
+  var length = node[getTextContentAccessor()].length;
+  var start = Math.min(offsets.start, length);
+  var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
+
+  // IE 11 uses modern selection, but doesn't support the extend method.
+  // Flip backward selections, so we can set with a single range.
+  if (!selection.extend && start > end) {
+    var temp = end;
+    end = start;
+    start = temp;
+  }
+
+  var startMarker = getNodeForCharacterOffset(node, start);
+  var endMarker = getNodeForCharacterOffset(node, end);
+
+  if (startMarker && endMarker) {
+    var range = document.createRange();
+    range.setStart(startMarker.node, startMarker.offset);
+    selection.removeAllRanges();
+
+    if (start > end) {
+      selection.addRange(range);
+      selection.extend(endMarker.node, endMarker.offset);
+    } else {
+      range.setEnd(endMarker.node, endMarker.offset);
+      selection.addRange(range);
+    }
+  }
+}
+
+var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);
+
+var ReactDOMSelection = {
+  /**
+   * @param {DOMElement} node
+   */
+  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
+
+  /**
+   * @param {DOMElement|DOMTextNode} node
+   * @param {object} offsets
+   */
+  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
+};
+
+module.exports = ReactDOMSelection;
+},{"132":132,"133":133,"148":148}],53:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMServer
+ */
+
+'use strict';
+
+var ReactDefaultInjection = _dereq_(60);
+var ReactServerRendering = _dereq_(91);
+var ReactVersion = _dereq_(97);
+
+ReactDefaultInjection.inject();
+
+var ReactDOMServer = {
+  renderToString: ReactServerRendering.renderToString,
+  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
+  version: ReactVersion
+};
+
+module.exports = ReactDOMServer;
+},{"60":60,"91":91,"97":97}],54:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMTextComponent
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var DOMChildrenOperations = _dereq_(7);
+var DOMLazyTree = _dereq_(8);
+var ReactDOMComponentTree = _dereq_(42);
+
+var escapeTextContentForBrowser = _dereq_(122);
+var invariant = _dereq_(162);
+var validateDOMNesting = _dereq_(146);
+
+/**
+ * Text nodes violate a couple assumptions that React makes about components:
+ *
+ *  - When mounting text into the DOM, adjacent text nodes are merged.
+ *  - Text nodes cannot be assigned a React root ID.
+ *
+ * This component is used to wrap strings between comment nodes so that they
+ * can undergo the same reconciliation that is applied to elements.
+ *
+ * TODO: Investigate representing React components in the DOM with text nodes.
+ *
+ * @class ReactDOMTextComponent
+ * @extends ReactComponent
+ * @internal
+ */
+var ReactDOMTextComponent = function (text) {
+  // TODO: This is really a ReactText (ReactNode), not a ReactElement
+  this._currentElement = text;
+  this._stringText = '' + text;
+  // ReactDOMComponentTree uses these:
+  this._hostNode = null;
+  this._hostParent = null;
+
+  // Properties
+  this._domID = 0;
+  this._mountIndex = 0;
+  this._closingComment = null;
+  this._commentNodes = null;
+};
+
+_assign(ReactDOMTextComponent.prototype, {
+
+  /**
+   * Creates the markup for this text node. This node is not intended to have
+   * any features besides containing text content.
+   *
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @return {string} Markup for this text node.
+   * @internal
+   */
+  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+    if ("development" !== 'production') {
+      var parentInfo;
+      if (hostParent != null) {
+        parentInfo = hostParent._ancestorInfo;
+      } else if (hostContainerInfo != null) {
+        parentInfo = hostContainerInfo._ancestorInfo;
+      }
+      if (parentInfo) {
+        // parentInfo should always be present except for the top-level
+        // component when server rendering
+        validateDOMNesting(null, this._stringText, this, parentInfo);
+      }
+    }
+
+    var domID = hostContainerInfo._idCounter++;
+    var openingValue = ' react-text: ' + domID + ' ';
+    var closingValue = ' /react-text ';
+    this._domID = domID;
+    this._hostParent = hostParent;
+    if (transaction.useCreateElement) {
+      var ownerDocument = hostContainerInfo._ownerDocument;
+      var openingComment = ownerDocument.createComment(openingValue);
+      var closingComment = ownerDocument.createComment(closingValue);
+      var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());
+      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));
+      if (this._stringText) {
+        DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));
+      }
+      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));
+      ReactDOMComponentTree.precacheNode(this, openingComment);
+      this._closingComment = closingComment;
+      return lazyTree;
+    } else {
+      var escapedText = escapeTextContentForBrowser(this._stringText);
+
+      if (transaction.renderToStaticMarkup) {
+        // Normally we'd wrap this between comment nodes for the reasons stated
+        // above, but since this is a situation where React won't take over
+        // (static pages), we can simply return the text as it is.
+        return escapedText;
+      }
+
+      return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';
+    }
+  },
+
+  /**
+   * Updates this component by updating the text content.
+   *
+   * @param {ReactText} nextText The next text content
+   * @param {ReactReconcileTransaction} transaction
+   * @internal
+   */
+  receiveComponent: function (nextText, transaction) {
+    if (nextText !== this._currentElement) {
+      this._currentElement = nextText;
+      var nextStringText = '' + nextText;
+      if (nextStringText !== this._stringText) {
+        // TODO: Save this as pending props and use performUpdateIfNecessary
+        // and/or updateComponent to do the actual update for consistency with
+        // other component types?
+        this._stringText = nextStringText;
+        var commentNodes = this.getHostNode();
+        DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
+      }
+    }
+  },
+
+  getHostNode: function () {
+    var hostNode = this._commentNodes;
+    if (hostNode) {
+      return hostNode;
+    }
+    if (!this._closingComment) {
+      var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);
+      var node = openingComment.nextSibling;
+      while (true) {
+        !(node != null) ? "development" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;
+        if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
+          this._closingComment = node;
+          break;
+        }
+        node = node.nextSibling;
+      }
+    }
+    hostNode = [this._hostNode, this._closingComment];
+    this._commentNodes = hostNode;
+    return hostNode;
+  },
+
+  unmountComponent: function () {
+    this._closingComment = null;
+    this._commentNodes = null;
+    ReactDOMComponentTree.uncacheNode(this);
+  }
+
+});
+
+module.exports = ReactDOMTextComponent;
+},{"122":122,"140":140,"146":146,"162":162,"172":172,"42":42,"7":7,"8":8}],55:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMTextarea
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var DisabledInputUtils = _dereq_(14);
+var LinkedValueUtils = _dereq_(24);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactUpdates = _dereq_(96);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+var didWarnValueLink = false;
+var didWarnValDefaultVal = false;
+
+function forceUpdateIfMounted() {
+  if (this._rootNodeID) {
+    // DOM component is still mounted; update
+    ReactDOMTextarea.updateWrapper(this);
+  }
+}
+
+/**
+ * Implements a <textarea> host component that allows setting `value`, and
+ * `defaultValue`. This differs from the traditional DOM API because value is
+ * usually set as PCDATA children.
+ *
+ * If `value` is not supplied (or null/undefined), user actions that affect the
+ * value will trigger updates to the element.
+ *
+ * If `value` is supplied (and not null/undefined), the rendered element will
+ * not trigger updates to the element. Instead, the `value` prop must change in
+ * order for the rendered element to be updated.
+ *
+ * The rendered element will be initialized with an empty value, the prop
+ * `defaultValue` if specified, or the children content (deprecated).
+ */
+var ReactDOMTextarea = {
+  getHostProps: function (inst, props) {
+    !(props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;
+
+    // Always set children to the same thing. In IE9, the selection range will
+    // get reset if `textContent` is mutated.  We could add a check in setTextContent
+    // to only set the value if/when the value differs from the node value (which would
+    // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.
+    // The value can be a boolean or object so that's why it's forced to be a string.
+    var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {
+      value: undefined,
+      defaultValue: undefined,
+      children: '' + inst._wrapperState.initialValue,
+      onChange: inst._wrapperState.onChange
+    });
+
+    return hostProps;
+  },
+
+  mountWrapper: function (inst, props) {
+    if ("development" !== 'production') {
+      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
+      if (props.valueLink !== undefined && !didWarnValueLink) {
+        "development" !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;
+        didWarnValueLink = true;
+      }
+      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
+        "development" !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
+        didWarnValDefaultVal = true;
+      }
+    }
+
+    var value = LinkedValueUtils.getValue(props);
+    var initialValue = value;
+
+    // Only bother fetching default value if we're going to use it
+    if (value == null) {
+      var defaultValue = props.defaultValue;
+      // TODO (yungsters): Remove support for children content in <textarea>.
+      var children = props.children;
+      if (children != null) {
+        if ("development" !== 'production') {
+          "development" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
+        }
+        !(defaultValue == null) ? "development" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;
+        if (Array.isArray(children)) {
+          !(children.length <= 1) ? "development" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;
+          children = children[0];
+        }
+
+        defaultValue = '' + children;
+      }
+      if (defaultValue == null) {
+        defaultValue = '';
+      }
+      initialValue = defaultValue;
+    }
+
+    inst._wrapperState = {
+      initialValue: '' + initialValue,
+      listeners: null,
+      onChange: _handleChange.bind(inst)
+    };
+  },
+
+  updateWrapper: function (inst) {
+    var props = inst._currentElement.props;
+
+    var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+    var value = LinkedValueUtils.getValue(props);
+    if (value != null) {
+      // Cast `value` to a string to ensure the value is set correctly. While
+      // browsers typically do this as necessary, jsdom doesn't.
+      var newValue = '' + value;
+
+      // To avoid side effects (such as losing text selection), only set value if changed
+      if (newValue !== node.value) {
+        node.value = newValue;
+      }
+      if (props.defaultValue == null) {
+        node.defaultValue = newValue;
+      }
+    }
+    if (props.defaultValue != null) {
+      node.defaultValue = props.defaultValue;
+    }
+  },
+
+  postMountWrapper: function (inst) {
+    // This is in postMount because we need access to the DOM node, which is not
+    // available until after the component has mounted.
+    var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+
+    // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
+    node.value = node.textContent; // Detach value from defaultValue
+  }
+};
+
+function _handleChange(event) {
+  var props = this._currentElement.props;
+  var returnValue = LinkedValueUtils.executeOnChange(props, event);
+  ReactUpdates.asap(forceUpdateIfMounted, this);
+  return returnValue;
+}
+
+module.exports = ReactDOMTextarea;
+},{"14":14,"140":140,"162":162,"171":171,"172":172,"24":24,"42":42,"96":96}],56:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMTreeTraversal
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * Return the lowest common ancestor of A and B, or null if they are in
+ * different trees.
+ */
+function getLowestCommonAncestor(instA, instB) {
+  !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+  !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+
+  var depthA = 0;
+  for (var tempA = instA; tempA; tempA = tempA._hostParent) {
+    depthA++;
+  }
+  var depthB = 0;
+  for (var tempB = instB; tempB; tempB = tempB._hostParent) {
+    depthB++;
+  }
+
+  // If A is deeper, crawl up.
+  while (depthA - depthB > 0) {
+    instA = instA._hostParent;
+    depthA--;
+  }
+
+  // If B is deeper, crawl up.
+  while (depthB - depthA > 0) {
+    instB = instB._hostParent;
+    depthB--;
+  }
+
+  // Walk in lockstep until we find a match.
+  var depth = depthA;
+  while (depth--) {
+    if (instA === instB) {
+      return instA;
+    }
+    instA = instA._hostParent;
+    instB = instB._hostParent;
+  }
+  return null;
+}
+
+/**
+ * Return if A is an ancestor of B.
+ */
+function isAncestor(instA, instB) {
+  !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
+  !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
+
+  while (instB) {
+    if (instB === instA) {
+      return true;
+    }
+    instB = instB._hostParent;
+  }
+  return false;
+}
+
+/**
+ * Return the parent instance of the passed-in instance.
+ */
+function getParentInstance(inst) {
+  !('_hostNode' in inst) ? "development" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
+
+  return inst._hostParent;
+}
+
+/**
+ * Simulates the traversal of a two-phase, capture/bubble event dispatch.
+ */
+function traverseTwoPhase(inst, fn, arg) {
+  var path = [];
+  while (inst) {
+    path.push(inst);
+    inst = inst._hostParent;
+  }
+  var i;
+  for (i = path.length; i-- > 0;) {
+    fn(path[i], false, arg);
+  }
+  for (i = 0; i < path.length; i++) {
+    fn(path[i], true, arg);
+  }
+}
+
+/**
+ * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
+ * should would receive a `mouseEnter` or `mouseLeave` event.
+ *
+ * Does not invoke the callback on the nearest common ancestor because nothing
+ * "entered" or "left" that element.
+ */
+function traverseEnterLeave(from, to, fn, argFrom, argTo) {
+  var common = from && to ? getLowestCommonAncestor(from, to) : null;
+  var pathFrom = [];
+  while (from && from !== common) {
+    pathFrom.push(from);
+    from = from._hostParent;
+  }
+  var pathTo = [];
+  while (to && to !== common) {
+    pathTo.push(to);
+    to = to._hostParent;
+  }
+  var i;
+  for (i = 0; i < pathFrom.length; i++) {
+    fn(pathFrom[i], true, argFrom);
+  }
+  for (i = pathTo.length; i-- > 0;) {
+    fn(pathTo[i], false, argTo);
+  }
+}
+
+module.exports = {
+  isAncestor: isAncestor,
+  getLowestCommonAncestor: getLowestCommonAncestor,
+  getParentInstance: getParentInstance,
+  traverseTwoPhase: traverseTwoPhase,
+  traverseEnterLeave: traverseEnterLeave
+};
+},{"140":140,"162":162}],57:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDOMUnknownPropertyHook
+ */
+
+'use strict';
+
+var DOMProperty = _dereq_(10);
+var EventPluginRegistry = _dereq_(18);
+var ReactComponentTreeHook = _dereq_(35);
+
+var warning = _dereq_(171);
+
+if ("development" !== 'production') {
+  var reactProps = {
+    children: true,
+    dangerouslySetInnerHTML: true,
+    key: true,
+    ref: true,
+
+    autoFocus: true,
+    defaultValue: true,
+    valueLink: true,
+    defaultChecked: true,
+    checkedLink: true,
+    innerHTML: true,
+    suppressContentEditableWarning: true,
+    onFocusIn: true,
+    onFocusOut: true
+  };
+  var warnedProperties = {};
+
+  var validateProperty = function (tagName, name, debugID) {
+    if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {
+      return true;
+    }
+    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
+      return true;
+    }
+    if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {
+      return true;
+    }
+    warnedProperties[name] = true;
+    var lowerCasedName = name.toLowerCase();
+
+    // data-* attributes should be lowercase; suggest the lowercase version
+    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
+
+    var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;
+
+    if (standardName != null) {
+      "development" !== 'production' ? warning(false, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+      return true;
+    } else if (registrationName != null) {
+      "development" !== 'production' ? warning(false, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+      return true;
+    } else {
+      // We were unable to guess which prop the user intended.
+      // It is likely that the user was just blindly spreading/forwarding props
+      // Components should be careful to only render valid props/attributes.
+      // Warning will be invoked in warnUnknownProperties to allow grouping.
+      return false;
+    }
+  };
+}
+
+var warnUnknownProperties = function (debugID, element) {
+  var unknownProps = [];
+  for (var key in element.props) {
+    var isValid = validateProperty(element.type, key, debugID);
+    if (!isValid) {
+      unknownProps.push(key);
+    }
+  }
+
+  var unknownPropString = unknownProps.map(function (prop) {
+    return '`' + prop + '`';
+  }).join(', ');
+
+  if (unknownProps.length === 1) {
+    "development" !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+  } else if (unknownProps.length > 1) {
+    "development" !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
+  }
+};
+
+function handleElement(debugID, element) {
+  if (element == null || typeof element.type !== 'string') {
+    return;
+  }
+  if (element.type.indexOf('-') >= 0 || element.props.is) {
+    return;
+  }
+  warnUnknownProperties(debugID, element);
+}
+
+var ReactDOMUnknownPropertyHook = {
+  onBeforeMountComponent: function (debugID, element) {
+    handleElement(debugID, element);
+  },
+  onBeforeUpdateComponent: function (debugID, element) {
+    handleElement(debugID, element);
+  }
+};
+
+module.exports = ReactDOMUnknownPropertyHook;
+},{"10":10,"171":171,"18":18,"35":35}],58:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDebugTool
+ */
+
+'use strict';
+
+var ReactInvalidSetStateWarningHook = _dereq_(74);
+var ReactHostOperationHistoryHook = _dereq_(69);
+var ReactComponentTreeHook = _dereq_(35);
+var ReactChildrenMutationWarningHook = _dereq_(30);
+var ExecutionEnvironment = _dereq_(148);
+
+var performanceNow = _dereq_(169);
+var warning = _dereq_(171);
+
+var hooks = [];
+var didHookThrowForEvent = {};
+
+function callHook(event, fn, context, arg1, arg2, arg3, arg4, arg5) {
+  try {
+    fn.call(context, arg1, arg2, arg3, arg4, arg5);
+  } catch (e) {
+    "development" !== 'production' ? warning(didHookThrowForEvent[event], 'Exception thrown by hook while handling %s: %s', event, e + '\n' + e.stack) : void 0;
+    didHookThrowForEvent[event] = true;
+  }
+}
+
+function emitEvent(event, arg1, arg2, arg3, arg4, arg5) {
+  for (var i = 0; i < hooks.length; i++) {
+    var hook = hooks[i];
+    var fn = hook[event];
+    if (fn) {
+      callHook(event, fn, hook, arg1, arg2, arg3, arg4, arg5);
+    }
+  }
+}
+
+var isProfiling = false;
+var flushHistory = [];
+var lifeCycleTimerStack = [];
+var currentFlushNesting = 0;
+var currentFlushMeasurements = null;
+var currentFlushStartTime = null;
+var currentTimerDebugID = null;
+var currentTimerStartTime = null;
+var currentTimerNestedFlushDuration = null;
+var currentTimerType = null;
+
+var lifeCycleTimerHasWarned = false;
+
+function clearHistory() {
+  ReactComponentTreeHook.purgeUnmountedComponents();
+  ReactHostOperationHistoryHook.clearHistory();
+}
+
+function getTreeSnapshot(registeredIDs) {
+  return registeredIDs.reduce(function (tree, id) {
+    var ownerID = ReactComponentTreeHook.getOwnerID(id);
+    var parentID = ReactComponentTreeHook.getParentID(id);
+    tree[id] = {
+      displayName: ReactComponentTreeHook.getDisplayName(id),
+      text: ReactComponentTreeHook.getText(id),
+      updateCount: ReactComponentTreeHook.getUpdateCount(id),
+      childIDs: ReactComponentTreeHook.getChildIDs(id),
+      // Text nodes don't have owners but this is close enough.
+      ownerID: ownerID || ReactComponentTreeHook.getOwnerID(parentID),
+      parentID: parentID
+    };
+    return tree;
+  }, {});
+}
+
+function resetMeasurements() {
+  var previousStartTime = currentFlushStartTime;
+  var previousMeasurements = currentFlushMeasurements || [];
+  var previousOperations = ReactHostOperationHistoryHook.getHistory();
+
+  if (currentFlushNesting === 0) {
+    currentFlushStartTime = null;
+    currentFlushMeasurements = null;
+    clearHistory();
+    return;
+  }
+
+  if (previousMeasurements.length || previousOperations.length) {
+    var registeredIDs = ReactComponentTreeHook.getRegisteredIDs();
+    flushHistory.push({
+      duration: performanceNow() - previousStartTime,
+      measurements: previousMeasurements || [],
+      operations: previousOperations || [],
+      treeSnapshot: getTreeSnapshot(registeredIDs)
+    });
+  }
+
+  clearHistory();
+  currentFlushStartTime = performanceNow();
+  currentFlushMeasurements = [];
+}
+
+function checkDebugID(debugID) {
+  var allowRoot = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
+
+  if (allowRoot && debugID === 0) {
+    return;
+  }
+  if (!debugID) {
+    "development" !== 'production' ? warning(false, 'ReactDebugTool: debugID may not be empty.') : void 0;
+  }
+}
+
+function beginLifeCycleTimer(debugID, timerType) {
+  if (currentFlushNesting === 0) {
+    return;
+  }
+  if (currentTimerType && !lifeCycleTimerHasWarned) {
+    "development" !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
+    lifeCycleTimerHasWarned = true;
+  }
+  currentTimerStartTime = performanceNow();
+  currentTimerNestedFlushDuration = 0;
+  currentTimerDebugID = debugID;
+  currentTimerType = timerType;
+}
+
+function endLifeCycleTimer(debugID, timerType) {
+  if (currentFlushNesting === 0) {
+    return;
+  }
+  if (currentTimerType !== timerType && !lifeCycleTimerHasWarned) {
+    "development" !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
+    lifeCycleTimerHasWarned = true;
+  }
+  if (isProfiling) {
+    currentFlushMeasurements.push({
+      timerType: timerType,
+      instanceID: debugID,
+      duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration
+    });
+  }
+  currentTimerStartTime = null;
+  currentTimerNestedFlushDuration = null;
+  currentTimerDebugID = null;
+  currentTimerType = null;
+}
+
+function pauseCurrentLifeCycleTimer() {
+  var currentTimer = {
+    startTime: currentTimerStartTime,
+    nestedFlushStartTime: performanceNow(),
+    debugID: currentTimerDebugID,
+    timerType: currentTimerType
+  };
+  lifeCycleTimerStack.push(currentTimer);
+  currentTimerStartTime = null;
+  currentTimerNestedFlushDuration = null;
+  currentTimerDebugID = null;
+  currentTimerType = null;
+}
+
+function resumeCurrentLifeCycleTimer() {
+  var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();
+
+  var startTime = _lifeCycleTimerStack$.startTime;
+  var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;
+  var debugID = _lifeCycleTimerStack$.debugID;
+  var timerType = _lifeCycleTimerStack$.timerType;
+
+  var nestedFlushDuration = performanceNow() - nestedFlushStartTime;
+  currentTimerStartTime = startTime;
+  currentTimerNestedFlushDuration += nestedFlushDuration;
+  currentTimerDebugID = debugID;
+  currentTimerType = timerType;
+}
+
+var ReactDebugTool = {
+  addHook: function (hook) {
+    hooks.push(hook);
+  },
+  removeHook: function (hook) {
+    for (var i = 0; i < hooks.length; i++) {
+      if (hooks[i] === hook) {
+        hooks.splice(i, 1);
+        i--;
+      }
+    }
+  },
+  isProfiling: function () {
+    return isProfiling;
+  },
+  beginProfiling: function () {
+    if (isProfiling) {
+      return;
+    }
+
+    isProfiling = true;
+    flushHistory.length = 0;
+    resetMeasurements();
+    ReactDebugTool.addHook(ReactHostOperationHistoryHook);
+  },
+  endProfiling: function () {
+    if (!isProfiling) {
+      return;
+    }
+
+    isProfiling = false;
+    resetMeasurements();
+    ReactDebugTool.removeHook(ReactHostOperationHistoryHook);
+  },
+  getFlushHistory: function () {
+    return flushHistory;
+  },
+  onBeginFlush: function () {
+    currentFlushNesting++;
+    resetMeasurements();
+    pauseCurrentLifeCycleTimer();
+    emitEvent('onBeginFlush');
+  },
+  onEndFlush: function () {
+    resetMeasurements();
+    currentFlushNesting--;
+    resumeCurrentLifeCycleTimer();
+    emitEvent('onEndFlush');
+  },
+  onBeginLifeCycleTimer: function (debugID, timerType) {
+    checkDebugID(debugID);
+    emitEvent('onBeginLifeCycleTimer', debugID, timerType);
+    beginLifeCycleTimer(debugID, timerType);
+  },
+  onEndLifeCycleTimer: function (debugID, timerType) {
+    checkDebugID(debugID);
+    endLifeCycleTimer(debugID, timerType);
+    emitEvent('onEndLifeCycleTimer', debugID, timerType);
+  },
+  onBeginProcessingChildContext: function () {
+    emitEvent('onBeginProcessingChildContext');
+  },
+  onEndProcessingChildContext: function () {
+    emitEvent('onEndProcessingChildContext');
+  },
+  onHostOperation: function (debugID, type, payload) {
+    checkDebugID(debugID);
+    emitEvent('onHostOperation', debugID, type, payload);
+  },
+  onSetState: function () {
+    emitEvent('onSetState');
+  },
+  onSetChildren: function (debugID, childDebugIDs) {
+    checkDebugID(debugID);
+    childDebugIDs.forEach(checkDebugID);
+    emitEvent('onSetChildren', debugID, childDebugIDs);
+  },
+  onBeforeMountComponent: function (debugID, element, parentDebugID) {
+    checkDebugID(debugID);
+    checkDebugID(parentDebugID, true);
+    emitEvent('onBeforeMountComponent', debugID, element, parentDebugID);
+  },
+  onMountComponent: function (debugID) {
+    checkDebugID(debugID);
+    emitEvent('onMountComponent', debugID);
+  },
+  onBeforeUpdateComponent: function (debugID, element) {
+    checkDebugID(debugID);
+    emitEvent('onBeforeUpdateComponent', debugID, element);
+  },
+  onUpdateComponent: function (debugID) {
+    checkDebugID(debugID);
+    emitEvent('onUpdateComponent', debugID);
+  },
+  onBeforeUnmountComponent: function (debugID) {
+    checkDebugID(debugID);
+    emitEvent('onBeforeUnmountComponent', debugID);
+  },
+  onUnmountComponent: function (debugID) {
+    checkDebugID(debugID);
+    emitEvent('onUnmountComponent', debugID);
+  },
+  onTestEvent: function () {
+    emitEvent('onTestEvent');
+  }
+};
+
+// TODO remove these when RN/www gets updated
+ReactDebugTool.addDevtool = ReactDebugTool.addHook;
+ReactDebugTool.removeDevtool = ReactDebugTool.removeHook;
+
+ReactDebugTool.addHook(ReactInvalidSetStateWarningHook);
+ReactDebugTool.addHook(ReactComponentTreeHook);
+ReactDebugTool.addHook(ReactChildrenMutationWarningHook);
+var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
+if (/[?&]react_perf\b/.test(url)) {
+  ReactDebugTool.beginProfiling();
+}
+
+module.exports = ReactDebugTool;
+},{"148":148,"169":169,"171":171,"30":30,"35":35,"69":69,"74":74}],59:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDefaultBatchingStrategy
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactUpdates = _dereq_(96);
+var Transaction = _dereq_(114);
+
+var emptyFunction = _dereq_(154);
+
+var RESET_BATCHED_UPDATES = {
+  initialize: emptyFunction,
+  close: function () {
+    ReactDefaultBatchingStrategy.isBatchingUpdates = false;
+  }
+};
+
+var FLUSH_BATCHED_UPDATES = {
+  initialize: emptyFunction,
+  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
+};
+
+var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
+
+function ReactDefaultBatchingStrategyTransaction() {
+  this.reinitializeTransaction();
+}
+
+_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
+  getTransactionWrappers: function () {
+    return TRANSACTION_WRAPPERS;
+  }
+});
+
+var transaction = new ReactDefaultBatchingStrategyTransaction();
+
+var ReactDefaultBatchingStrategy = {
+  isBatchingUpdates: false,
+
+  /**
+   * Call the provided function in a context within which calls to `setState`
+   * and friends are batched such that components aren't updated unnecessarily.
+   */
+  batchedUpdates: function (callback, a, b, c, d, e) {
+    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
+
+    ReactDefaultBatchingStrategy.isBatchingUpdates = true;
+
+    // The code is written this way to avoid extra allocations
+    if (alreadyBatchingUpdates) {
+      callback(a, b, c, d, e);
+    } else {
+      transaction.perform(callback, null, a, b, c, d, e);
+    }
+  }
+};
+
+module.exports = ReactDefaultBatchingStrategy;
+},{"114":114,"154":154,"172":172,"96":96}],60:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactDefaultInjection
+ */
+
+'use strict';
+
+var BeforeInputEventPlugin = _dereq_(2);
+var ChangeEventPlugin = _dereq_(6);
+var DefaultEventPluginOrder = _dereq_(13);
+var EnterLeaveEventPlugin = _dereq_(15);
+var HTMLDOMPropertyConfig = _dereq_(22);
+var ReactComponentBrowserEnvironment = _dereq_(33);
+var ReactDOMComponent = _dereq_(40);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactDOMEmptyComponent = _dereq_(44);
+var ReactDOMTreeTraversal = _dereq_(56);
+var ReactDOMTextComponent = _dereq_(54);
+var ReactDefaultBatchingStrategy = _dereq_(59);
+var ReactEventListener = _dereq_(66);
+var ReactInjection = _dereq_(70);
+var ReactReconcileTransaction = _dereq_(87);
+var SVGDOMPropertyConfig = _dereq_(98);
+var SelectEventPlugin = _dereq_(99);
+var SimpleEventPlugin = _dereq_(100);
+
+var alreadyInjected = false;
+
+function inject() {
+  if (alreadyInjected) {
+    // TODO: This is currently true because these injections are shared between
+    // the client and the server package. They should be built independently
+    // and not share any injection state. Then this problem will be solved.
+    return;
+  }
+  alreadyInjected = true;
+
+  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
+
+  /**
+   * Inject modules for resolving DOM hierarchy and plugin ordering.
+   */
+  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
+  ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);
+  ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);
+
+  /**
+   * Some important event plugins included by default (without having to require
+   * them).
+   */
+  ReactInjection.EventPluginHub.injectEventPluginsByName({
+    SimpleEventPlugin: SimpleEventPlugin,
+    EnterLeaveEventPlugin: EnterLeaveEventPlugin,
+    ChangeEventPlugin: ChangeEventPlugin,
+    SelectEventPlugin: SelectEventPlugin,
+    BeforeInputEventPlugin: BeforeInputEventPlugin
+  });
+
+  ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);
+
+  ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);
+
+  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
+  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
+
+  ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {
+    return new ReactDOMEmptyComponent(instantiate);
+  });
+
+  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
+  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
+
+  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
+}
+
+module.exports = {
+  inject: inject
+};
+},{"100":100,"13":13,"15":15,"2":2,"22":22,"33":33,"40":40,"42":42,"44":44,"54":54,"56":56,"59":59,"6":6,"66":66,"70":70,"87":87,"98":98,"99":99}],61:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactElement
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactCurrentOwner = _dereq_(37);
+
+var warning = _dereq_(171);
+var canDefineProperty = _dereq_(118);
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+// The Symbol used to tag the ReactElement type. If there is no native Symbol
+// nor polyfill, then a plain number is used for performance.
+var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
+
+var RESERVED_PROPS = {
+  key: true,
+  ref: true,
+  __self: true,
+  __source: true
+};
+
+var specialPropKeyWarningShown, specialPropRefWarningShown;
+
+function hasValidRef(config) {
+  if ("development" !== 'production') {
+    if (hasOwnProperty.call(config, 'ref')) {
+      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
+      if (getter && getter.isReactWarning) {
+        return false;
+      }
+    }
+  }
+  return config.ref !== undefined;
+}
+
+function hasValidKey(config) {
+  if ("development" !== 'production') {
+    if (hasOwnProperty.call(config, 'key')) {
+      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
+      if (getter && getter.isReactWarning) {
+        return false;
+      }
+    }
+  }
+  return config.key !== undefined;
+}
+
+function defineKeyPropWarningGetter(props, displayName) {
+  var warnAboutAccessingKey = function () {
+    if (!specialPropKeyWarningShown) {
+      specialPropKeyWarningShown = true;
+      "development" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
+    }
+  };
+  warnAboutAccessingKey.isReactWarning = true;
+  Object.defineProperty(props, 'key', {
+    get: warnAboutAccessingKey,
+    configurable: true
+  });
+}
+
+function defineRefPropWarningGetter(props, displayName) {
+  var warnAboutAccessingRef = function () {
+    if (!specialPropRefWarningShown) {
+      specialPropRefWarningShown = true;
+      "development" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
+    }
+  };
+  warnAboutAccessingRef.isReactWarning = true;
+  Object.defineProperty(props, 'ref', {
+    get: warnAboutAccessingRef,
+    configurable: true
+  });
+}
+
+/**
+ * Factory method to create a new React element. This no longer adheres to
+ * the class pattern, so do not use new to call it. Also, no instanceof check
+ * will work. Instead test $$typeof field against Symbol.for('react.element') to check
+ * if something is a React Element.
+ *
+ * @param {*} type
+ * @param {*} key
+ * @param {string|object} ref
+ * @param {*} self A *temporary* helper to detect places where `this` is
+ * different from the `owner` when React.createElement is called, so that we
+ * can warn. We want to get rid of owner and replace string `ref`s with arrow
+ * functions, and as long as `this` and owner are the same, there will be no
+ * change in behavior.
+ * @param {*} source An annotation object (added by a transpiler or otherwise)
+ * indicating filename, line number, and/or other information.
+ * @param {*} owner
+ * @param {*} props
+ * @internal
+ */
+var ReactElement = function (type, key, ref, self, source, owner, props) {
+  var element = {
+    // This tag allow us to uniquely identify this as a React Element
+    $$typeof: REACT_ELEMENT_TYPE,
+
+    // Built-in properties that belong on the element
+    type: type,
+    key: key,
+    ref: ref,
+    props: props,
+
+    // Record the component responsible for creating this element.
+    _owner: owner
+  };
+
+  if ("development" !== 'production') {
+    // The validation flag is currently mutative. We put it on
+    // an external backing store so that we can freeze the whole object.
+    // This can be replaced with a WeakMap once they are implemented in
+    // commonly used development environments.
+    element._store = {};
+    var shadowChildren = Array.isArray(props.children) ? props.children.slice(0) : props.children;
+
+    // To make comparing ReactElements easier for testing purposes, we make
+    // the validation flag non-enumerable (where possible, which should
+    // include every environment we run tests in), so the test framework
+    // ignores it.
+    if (canDefineProperty) {
+      Object.defineProperty(element._store, 'validated', {
+        configurable: false,
+        enumerable: false,
+        writable: true,
+        value: false
+      });
+      // self and source are DEV only properties.
+      Object.defineProperty(element, '_self', {
+        configurable: false,
+        enumerable: false,
+        writable: false,
+        value: self
+      });
+      Object.defineProperty(element, '_shadowChildren', {
+        configurable: false,
+        enumerable: false,
+        writable: false,
+        value: shadowChildren
+      });
+      // Two elements created in two different places should be considered
+      // equal for testing purposes and therefore we hide it from enumeration.
+      Object.defineProperty(element, '_source', {
+        configurable: false,
+        enumerable: false,
+        writable: false,
+        value: source
+      });
+    } else {
+      element._store.validated = false;
+      element._self = self;
+      element._shadowChildren = shadowChildren;
+      element._source = source;
+    }
+    if (Object.freeze) {
+      Object.freeze(element.props);
+      Object.freeze(element);
+    }
+  }
+
+  return element;
+};
+
+/**
+ * Create and return a new ReactElement of the given type.
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement
+ */
+ReactElement.createElement = function (type, config, children) {
+  var propName;
+
+  // Reserved names are extracted
+  var props = {};
+
+  var key = null;
+  var ref = null;
+  var self = null;
+  var source = null;
+
+  if (config != null) {
+    if (hasValidRef(config)) {
+      ref = config.ref;
+    }
+    if (hasValidKey(config)) {
+      key = '' + config.key;
+    }
+
+    self = config.__self === undefined ? null : config.__self;
+    source = config.__source === undefined ? null : config.__source;
+    // Remaining properties are added to a new props object
+    for (propName in config) {
+      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+        props[propName] = config[propName];
+      }
+    }
+  }
+
+  // Children can be more than one argument, and those are transferred onto
+  // the newly allocated props object.
+  var childrenLength = arguments.length - 2;
+  if (childrenLength === 1) {
+    props.children = children;
+  } else if (childrenLength > 1) {
+    var childArray = Array(childrenLength);
+    for (var i = 0; i < childrenLength; i++) {
+      childArray[i] = arguments[i + 2];
+    }
+    props.children = childArray;
+  }
+
+  // Resolve default props
+  if (type && type.defaultProps) {
+    var defaultProps = type.defaultProps;
+    for (propName in defaultProps) {
+      if (props[propName] === undefined) {
+        props[propName] = defaultProps[propName];
+      }
+    }
+  }
+  if ("development" !== 'production') {
+    if (key || ref) {
+      if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
+        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
+        if (key) {
+          defineKeyPropWarningGetter(props, displayName);
+        }
+        if (ref) {
+          defineRefPropWarningGetter(props, displayName);
+        }
+      }
+    }
+  }
+  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
+};
+
+/**
+ * Return a function that produces ReactElements of a given type.
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory
+ */
+ReactElement.createFactory = function (type) {
+  var factory = ReactElement.createElement.bind(null, type);
+  // Expose the type on the factory and the prototype so that it can be
+  // easily accessed on elements. E.g. `<Foo />.type === Foo`.
+  // This should not be named `constructor` since this may not be the function
+  // that created the element, and it may not even be a constructor.
+  // Legacy hook TODO: Warn if this is accessed
+  factory.type = type;
+  return factory;
+};
+
+ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
+  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
+
+  return newElement;
+};
+
+/**
+ * Clone and return a new ReactElement using element as the starting point.
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement
+ */
+ReactElement.cloneElement = function (element, config, children) {
+  var propName;
+
+  // Original props are copied
+  var props = _assign({}, element.props);
+
+  // Reserved names are extracted
+  var key = element.key;
+  var ref = element.ref;
+  // Self is preserved since the owner is preserved.
+  var self = element._self;
+  // Source is preserved since cloneElement is unlikely to be targeted by a
+  // transpiler, and the original source is probably a better indicator of the
+  // true owner.
+  var source = element._source;
+
+  // Owner will be preserved, unless ref is overridden
+  var owner = element._owner;
+
+  if (config != null) {
+    if (hasValidRef(config)) {
+      // Silently steal the ref from the parent.
+      ref = config.ref;
+      owner = ReactCurrentOwner.current;
+    }
+    if (hasValidKey(config)) {
+      key = '' + config.key;
+    }
+
+    // Remaining properties override existing props
+    var defaultProps;
+    if (element.type && element.type.defaultProps) {
+      defaultProps = element.type.defaultProps;
+    }
+    for (propName in config) {
+      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+        if (config[propName] === undefined && defaultProps !== undefined) {
+          // Resolve default props
+          props[propName] = defaultProps[propName];
+        } else {
+          props[propName] = config[propName];
+        }
+      }
+    }
+  }
+
+  // Children can be more than one argument, and those are transferred onto
+  // the newly allocated props object.
+  var childrenLength = arguments.length - 2;
+  if (childrenLength === 1) {
+    props.children = children;
+  } else if (childrenLength > 1) {
+    var childArray = Array(childrenLength);
+    for (var i = 0; i < childrenLength; i++) {
+      childArray[i] = arguments[i + 2];
+    }
+    props.children = childArray;
+  }
+
+  return ReactElement(element.type, key, ref, self, source, owner, props);
+};
+
+/**
+ * Verifies the object is a ReactElement.
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement
+ * @param {?object} object
+ * @return {boolean} True if `object` is a valid component.
+ * @final
+ */
+ReactElement.isValidElement = function (object) {
+  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+};
+
+ReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;
+
+module.exports = ReactElement;
+},{"118":118,"171":171,"172":172,"37":37}],62:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactElementValidator
+ */
+
+/**
+ * ReactElementValidator provides a wrapper around a element factory
+ * which validates the props passed to the element. This is intended to be
+ * used only in DEV and could be replaced by a static type checker for languages
+ * that support it.
+ */
+
+'use strict';
+
+var ReactCurrentOwner = _dereq_(37);
+var ReactComponentTreeHook = _dereq_(35);
+var ReactElement = _dereq_(61);
+var ReactPropTypeLocations = _dereq_(83);
+
+var checkReactTypeSpec = _dereq_(119);
+
+var canDefineProperty = _dereq_(118);
+var getIteratorFn = _dereq_(131);
+var warning = _dereq_(171);
+
+function getDeclarationErrorAddendum() {
+  if (ReactCurrentOwner.current) {
+    var name = ReactCurrentOwner.current.getName();
+    if (name) {
+      return ' Check the render method of `' + name + '`.';
+    }
+  }
+  return '';
+}
+
+/**
+ * Warn if there's no key explicitly set on dynamic arrays of children or
+ * object keys are not valid. This allows us to keep track of children between
+ * updates.
+ */
+var ownerHasKeyUseWarning = {};
+
+function getCurrentComponentErrorInfo(parentType) {
+  var info = getDeclarationErrorAddendum();
+
+  if (!info) {
+    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
+    if (parentName) {
+      info = ' Check the top-level render call using <' + parentName + '>.';
+    }
+  }
+  return info;
+}
+
+/**
+ * Warn if the element doesn't have an explicit key assigned to it.
+ * This element is in an array. The array could grow and shrink or be
+ * reordered. All children that haven't already been validated are required to
+ * have a "key" property assigned to it. Error statuses are cached so a warning
+ * will only be shown once.
+ *
+ * @internal
+ * @param {ReactElement} element Element that requires a key.
+ * @param {*} parentType element's parent's type.
+ */
+function validateExplicitKey(element, parentType) {
+  if (!element._store || element._store.validated || element.key != null) {
+    return;
+  }
+  element._store.validated = true;
+
+  var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});
+
+  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
+  if (memoizer[currentComponentErrorInfo]) {
+    return;
+  }
+  memoizer[currentComponentErrorInfo] = true;
+
+  // Usually the current owner is the offender, but if it accepts children as a
+  // property, it may be the creator of the child that's responsible for
+  // assigning it a key.
+  var childOwner = '';
+  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
+    // Give the component that originally created this child.
+    childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
+  }
+
+  "development" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;
+}
+
+/**
+ * Ensure that every element either is passed in a static location, in an
+ * array with an explicit keys property defined, or in an object literal
+ * with valid key property.
+ *
+ * @internal
+ * @param {ReactNode} node Statically passed child of any type.
+ * @param {*} parentType node's parent's type.
+ */
+function validateChildKeys(node, parentType) {
+  if (typeof node !== 'object') {
+    return;
+  }
+  if (Array.isArray(node)) {
+    for (var i = 0; i < node.length; i++) {
+      var child = node[i];
+      if (ReactElement.isValidElement(child)) {
+        validateExplicitKey(child, parentType);
+      }
+    }
+  } else if (ReactElement.isValidElement(node)) {
+    // This element was passed in a valid location.
+    if (node._store) {
+      node._store.validated = true;
+    }
+  } else if (node) {
+    var iteratorFn = getIteratorFn(node);
+    // Entry iterators provide implicit keys.
+    if (iteratorFn) {
+      if (iteratorFn !== node.entries) {
+        var iterator = iteratorFn.call(node);
+        var step;
+        while (!(step = iterator.next()).done) {
+          if (ReactElement.isValidElement(step.value)) {
+            validateExplicitKey(step.value, parentType);
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Given an element, validate that its props follow the propTypes definition,
+ * provided by the type.
+ *
+ * @param {ReactElement} element
+ */
+function validatePropTypes(element) {
+  var componentClass = element.type;
+  if (typeof componentClass !== 'function') {
+    return;
+  }
+  var name = componentClass.displayName || componentClass.name;
+  if (componentClass.propTypes) {
+    checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);
+  }
+  if (typeof componentClass.getDefaultProps === 'function') {
+    "development" !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;
+  }
+}
+
+var ReactElementValidator = {
+
+  createElement: function (type, props, children) {
+    var validType = typeof type === 'string' || typeof type === 'function';
+    // We warn in this case but don't throw. We expect the element creation to
+    // succeed and there will likely be errors in render.
+    if (!validType) {
+      "development" !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;
+    }
+
+    var element = ReactElement.createElement.apply(this, arguments);
+
+    // The result can be nullish if a mock or a custom function is used.
+    // TODO: Drop this when these are no longer allowed as the type argument.
+    if (element == null) {
+      return element;
+    }
+
+    // Skip key warning if the type isn't valid since our key validation logic
+    // doesn't expect a non-string/function type and can throw confusing errors.
+    // We don't want exception behavior to differ between dev and prod.
+    // (Rendering will throw with a helpful message and as soon as the type is
+    // fixed, the key warnings will appear.)
+    if (validType) {
+      for (var i = 2; i < arguments.length; i++) {
+        validateChildKeys(arguments[i], type);
+      }
+    }
+
+    validatePropTypes(element);
+
+    return element;
+  },
+
+  createFactory: function (type) {
+    var validatedFactory = ReactElementValidator.createElement.bind(null, type);
+    // Legacy hook TODO: Warn if this is accessed
+    validatedFactory.type = type;
+
+    if ("development" !== 'production') {
+      if (canDefineProperty) {
+        Object.defineProperty(validatedFactory, 'type', {
+          enumerable: false,
+          get: function () {
+            "development" !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;
+            Object.defineProperty(this, 'type', {
+              value: type
+            });
+            return type;
+          }
+        });
+      }
+    }
+
+    return validatedFactory;
+  },
+
+  cloneElement: function (element, props, children) {
+    var newElement = ReactElement.cloneElement.apply(this, arguments);
+    for (var i = 2; i < arguments.length; i++) {
+      validateChildKeys(arguments[i], newElement.type);
+    }
+    validatePropTypes(newElement);
+    return newElement;
+  }
+
+};
+
+module.exports = ReactElementValidator;
+},{"118":118,"119":119,"131":131,"171":171,"35":35,"37":37,"61":61,"83":83}],63:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactEmptyComponent
+ */
+
+'use strict';
+
+var emptyComponentFactory;
+
+var ReactEmptyComponentInjection = {
+  injectEmptyComponentFactory: function (factory) {
+    emptyComponentFactory = factory;
+  }
+};
+
+var ReactEmptyComponent = {
+  create: function (instantiate) {
+    return emptyComponentFactory(instantiate);
+  }
+};
+
+ReactEmptyComponent.injection = ReactEmptyComponentInjection;
+
+module.exports = ReactEmptyComponent;
+},{}],64:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactErrorUtils
+ */
+
+'use strict';
+
+var caughtError = null;
+
+/**
+ * Call a function while guarding against errors that happens within it.
+ *
+ * @param {?String} name of the guard to use for logging or debugging
+ * @param {Function} func The function to invoke
+ * @param {*} a First argument
+ * @param {*} b Second argument
+ */
+function invokeGuardedCallback(name, func, a, b) {
+  try {
+    return func(a, b);
+  } catch (x) {
+    if (caughtError === null) {
+      caughtError = x;
+    }
+    return undefined;
+  }
+}
+
+var ReactErrorUtils = {
+  invokeGuardedCallback: invokeGuardedCallback,
+
+  /**
+   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event
+   * handler are sure to be rethrown by rethrowCaughtError.
+   */
+  invokeGuardedCallbackWithCatch: invokeGuardedCallback,
+
+  /**
+   * During execution of guarded functions we will capture the first error which
+   * we will rethrow to be handled by the top level error handler.
+   */
+  rethrowCaughtError: function () {
+    if (caughtError) {
+      var error = caughtError;
+      caughtError = null;
+      throw error;
+    }
+  }
+};
+
+if ("development" !== 'production') {
+  /**
+   * To help development we can get better devtools integration by simulating a
+   * real browser event.
+   */
+  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
+    var fakeNode = document.createElement('react');
+    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
+      var boundFunc = func.bind(null, a, b);
+      var evtType = 'react-' + name;
+      fakeNode.addEventListener(evtType, boundFunc, false);
+      var evt = document.createEvent('Event');
+      evt.initEvent(evtType, false, false);
+      fakeNode.dispatchEvent(evt);
+      fakeNode.removeEventListener(evtType, boundFunc, false);
+    };
+  }
+}
+
+module.exports = ReactErrorUtils;
+},{}],65:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactEventEmitterMixin
+ */
+
+'use strict';
+
+var EventPluginHub = _dereq_(17);
+
+function runEventQueueInBatch(events) {
+  EventPluginHub.enqueueEvents(events);
+  EventPluginHub.processEventQueue(false);
+}
+
+var ReactEventEmitterMixin = {
+
+  /**
+   * Streams a fired top-level event to `EventPluginHub` where plugins have the
+   * opportunity to create `ReactEvent`s to be dispatched.
+   */
+  handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
+    runEventQueueInBatch(events);
+  }
+};
+
+module.exports = ReactEventEmitterMixin;
+},{"17":17}],66:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactEventListener
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var EventListener = _dereq_(147);
+var ExecutionEnvironment = _dereq_(148);
+var PooledClass = _dereq_(25);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactUpdates = _dereq_(96);
+
+var getEventTarget = _dereq_(129);
+var getUnboundedScrollPosition = _dereq_(159);
+
+/**
+ * Find the deepest React component completely containing the root of the
+ * passed-in instance (for use when entire React trees are nested within each
+ * other). If React trees are not nested, returns null.
+ */
+function findParent(inst) {
+  // TODO: It may be a good idea to cache this to prevent unnecessary DOM
+  // traversal, but caching is difficult to do correctly without using a
+  // mutation observer to listen for all DOM changes.
+  while (inst._hostParent) {
+    inst = inst._hostParent;
+  }
+  var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
+  var container = rootNode.parentNode;
+  return ReactDOMComponentTree.getClosestInstanceFromNode(container);
+}
+
+// Used to store ancestor hierarchy in top level callback
+function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
+  this.topLevelType = topLevelType;
+  this.nativeEvent = nativeEvent;
+  this.ancestors = [];
+}
+_assign(TopLevelCallbackBookKeeping.prototype, {
+  destructor: function () {
+    this.topLevelType = null;
+    this.nativeEvent = null;
+    this.ancestors.length = 0;
+  }
+});
+PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
+
+function handleTopLevelImpl(bookKeeping) {
+  var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);
+  var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);
+
+  // Loop through the hierarchy, in case there's any nested components.
+  // It's important that we build the array of ancestors before calling any
+  // event handlers, because event handlers can modify the DOM, leading to
+  // inconsistencies with ReactMount's node cache. See #1105.
+  var ancestor = targetInst;
+  do {
+    bookKeeping.ancestors.push(ancestor);
+    ancestor = ancestor && findParent(ancestor);
+  } while (ancestor);
+
+  for (var i = 0; i < bookKeeping.ancestors.length; i++) {
+    targetInst = bookKeeping.ancestors[i];
+    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
+  }
+}
+
+function scrollValueMonitor(cb) {
+  var scrollPosition = getUnboundedScrollPosition(window);
+  cb(scrollPosition);
+}
+
+var ReactEventListener = {
+  _enabled: true,
+  _handleTopLevel: null,
+
+  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
+
+  setHandleTopLevel: function (handleTopLevel) {
+    ReactEventListener._handleTopLevel = handleTopLevel;
+  },
+
+  setEnabled: function (enabled) {
+    ReactEventListener._enabled = !!enabled;
+  },
+
+  isEnabled: function () {
+    return ReactEventListener._enabled;
+  },
+
+  /**
+   * Traps top-level events by using event bubbling.
+   *
+   * @param {string} topLevelType Record from `EventConstants`.
+   * @param {string} handlerBaseName Event name (e.g. "click").
+   * @param {object} handle Element on which to attach listener.
+   * @return {?object} An object with a remove function which will forcefully
+   *                  remove the listener.
+   * @internal
+   */
+  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
+    var element = handle;
+    if (!element) {
+      return null;
+    }
+    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
+  },
+
+  /**
+   * Traps a top-level event by using event capturing.
+   *
+   * @param {string} topLevelType Record from `EventConstants`.
+   * @param {string} handlerBaseName Event name (e.g. "click").
+   * @param {object} handle Element on which to attach listener.
+   * @return {?object} An object with a remove function which will forcefully
+   *                  remove the listener.
+   * @internal
+   */
+  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
+    var element = handle;
+    if (!element) {
+      return null;
+    }
+    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
+  },
+
+  monitorScrollValue: function (refresh) {
+    var callback = scrollValueMonitor.bind(null, refresh);
+    EventListener.listen(window, 'scroll', callback);
+  },
+
+  dispatchEvent: function (topLevelType, nativeEvent) {
+    if (!ReactEventListener._enabled) {
+      return;
+    }
+
+    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
+    try {
+      // Event queue being processed in the same cycle allows
+      // `preventDefault`.
+      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
+    } finally {
+      TopLevelCallbackBookKeeping.release(bookKeeping);
+    }
+  }
+};
+
+module.exports = ReactEventListener;
+},{"129":129,"147":147,"148":148,"159":159,"172":172,"25":25,"42":42,"96":96}],67:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactFeatureFlags
+ * 
+ */
+
+'use strict';
+
+var ReactFeatureFlags = {
+  // When true, call console.time() before and .timeEnd() after each top-level
+  // render (both initial renders and updates). Useful when looking at prod-mode
+  // timeline profiles in Chrome, for example.
+  logTopLevelRenders: false
+};
+
+module.exports = ReactFeatureFlags;
+},{}],68:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactHostComponent
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var invariant = _dereq_(162);
+
+var genericComponentClass = null;
+// This registry keeps track of wrapper classes around host tags.
+var tagToComponentClass = {};
+var textComponentClass = null;
+
+var ReactHostComponentInjection = {
+  // This accepts a class that receives the tag string. This is a catch all
+  // that can render any kind of tag.
+  injectGenericComponentClass: function (componentClass) {
+    genericComponentClass = componentClass;
+  },
+  // This accepts a text component class that takes the text string to be
+  // rendered as props.
+  injectTextComponentClass: function (componentClass) {
+    textComponentClass = componentClass;
+  },
+  // This accepts a keyed object with classes as values. Each key represents a
+  // tag. That particular tag will use this class instead of the generic one.
+  injectComponentClasses: function (componentClasses) {
+    _assign(tagToComponentClass, componentClasses);
+  }
+};
+
+/**
+ * Get a host internal component class for a specific tag.
+ *
+ * @param {ReactElement} element The element to create.
+ * @return {function} The internal class constructor function.
+ */
+function createInternalComponent(element) {
+  !genericComponentClass ? "development" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
+  return new genericComponentClass(element);
+}
+
+/**
+ * @param {ReactText} text
+ * @return {ReactComponent}
+ */
+function createInstanceForText(text) {
+  return new textComponentClass(text);
+}
+
+/**
+ * @param {ReactComponent} component
+ * @return {boolean}
+ */
+function isTextComponent(component) {
+  return component instanceof textComponentClass;
+}
+
+var ReactHostComponent = {
+  createInternalComponent: createInternalComponent,
+  createInstanceForText: createInstanceForText,
+  isTextComponent: isTextComponent,
+  injection: ReactHostComponentInjection
+};
+
+module.exports = ReactHostComponent;
+},{"140":140,"162":162,"172":172}],69:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactHostOperationHistoryHook
+ */
+
+'use strict';
+
+var history = [];
+
+var ReactHostOperationHistoryHook = {
+  onHostOperation: function (debugID, type, payload) {
+    history.push({
+      instanceID: debugID,
+      type: type,
+      payload: payload
+    });
+  },
+  clearHistory: function () {
+    if (ReactHostOperationHistoryHook._preventClearing) {
+      // Should only be used for tests.
+      return;
+    }
+
+    history = [];
+  },
+  getHistory: function () {
+    return history;
+  }
+};
+
+module.exports = ReactHostOperationHistoryHook;
+},{}],70:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactInjection
+ */
+
+'use strict';
+
+var DOMProperty = _dereq_(10);
+var EventPluginHub = _dereq_(17);
+var EventPluginUtils = _dereq_(19);
+var ReactComponentEnvironment = _dereq_(34);
+var ReactClass = _dereq_(31);
+var ReactEmptyComponent = _dereq_(63);
+var ReactBrowserEventEmitter = _dereq_(27);
+var ReactHostComponent = _dereq_(68);
+var ReactUpdates = _dereq_(96);
+
+var ReactInjection = {
+  Component: ReactComponentEnvironment.injection,
+  Class: ReactClass.injection,
+  DOMProperty: DOMProperty.injection,
+  EmptyComponent: ReactEmptyComponent.injection,
+  EventPluginHub: EventPluginHub.injection,
+  EventPluginUtils: EventPluginUtils.injection,
+  EventEmitter: ReactBrowserEventEmitter.injection,
+  HostComponent: ReactHostComponent.injection,
+  Updates: ReactUpdates.injection
+};
+
+module.exports = ReactInjection;
+},{"10":10,"17":17,"19":19,"27":27,"31":31,"34":34,"63":63,"68":68,"96":96}],71:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactInputSelection
+ */
+
+'use strict';
+
+var ReactDOMSelection = _dereq_(52);
+
+var containsNode = _dereq_(151);
+var focusNode = _dereq_(156);
+var getActiveElement = _dereq_(157);
+
+function isInDocument(node) {
+  return containsNode(document.documentElement, node);
+}
+
+/**
+ * @ReactInputSelection: React input selection module. Based on Selection.js,
+ * but modified to be suitable for react and has a couple of bug fixes (doesn't
+ * assume buttons have range selections allowed).
+ * Input selection module for React.
+ */
+var ReactInputSelection = {
+
+  hasSelectionCapabilities: function (elem) {
+    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');
+  },
+
+  getSelectionInformation: function () {
+    var focusedElem = getActiveElement();
+    return {
+      focusedElem: focusedElem,
+      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
+    };
+  },
+
+  /**
+   * @restoreSelection: If any selection information was potentially lost,
+   * restore it. This is useful when performing operations that could remove dom
+   * nodes and place them back in, resulting in focus being lost.
+   */
+  restoreSelection: function (priorSelectionInformation) {
+    var curFocusedElem = getActiveElement();
+    var priorFocusedElem = priorSelectionInformation.focusedElem;
+    var priorSelectionRange = priorSelectionInformation.selectionRange;
+    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
+      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
+        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
+      }
+      focusNode(priorFocusedElem);
+    }
+  },
+
+  /**
+   * @getSelection: Gets the selection bounds of a focused textarea, input or
+   * contentEditable node.
+   * -@input: Look up selection bounds of this input
+   * -@return {start: selectionStart, end: selectionEnd}
+   */
+  getSelection: function (input) {
+    var selection;
+
+    if ('selectionStart' in input) {
+      // Modern browser with input or textarea.
+      selection = {
+        start: input.selectionStart,
+        end: input.selectionEnd
+      };
+    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
+      // IE8 input.
+      var range = document.selection.createRange();
+      // There can only be one selection per document in IE, so it must
+      // be in our element.
+      if (range.parentElement() === input) {
+        selection = {
+          start: -range.moveStart('character', -input.value.length),
+          end: -range.moveEnd('character', -input.value.length)
+        };
+      }
+    } else {
+      // Content editable or old IE textarea.
+      selection = ReactDOMSelection.getOffsets(input);
+    }
+
+    return selection || { start: 0, end: 0 };
+  },
+
+  /**
+   * @setSelection: Sets the selection bounds of a textarea or input and focuses
+   * the input.
+   * -@input     Set selection bounds of this input or textarea
+   * -@offsets   Object of same form that is returned from get*
+   */
+  setSelection: function (input, offsets) {
+    var start = offsets.start;
+    var end = offsets.end;
+    if (end === undefined) {
+      end = start;
+    }
+
+    if ('selectionStart' in input) {
+      input.selectionStart = start;
+      input.selectionEnd = Math.min(end, input.value.length);
+    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
+      var range = input.createTextRange();
+      range.collapse(true);
+      range.moveStart('character', start);
+      range.moveEnd('character', end - start);
+      range.select();
+    } else {
+      ReactDOMSelection.setOffsets(input, offsets);
+    }
+  }
+};
+
+module.exports = ReactInputSelection;
+},{"151":151,"156":156,"157":157,"52":52}],72:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactInstanceMap
+ */
+
+'use strict';
+
+/**
+ * `ReactInstanceMap` maintains a mapping from a public facing stateful
+ * instance (key) and the internal representation (value). This allows public
+ * methods to accept the user facing instance as an argument and map them back
+ * to internal methods.
+ */
+
+// TODO: Replace this with ES6: var ReactInstanceMap = new Map();
+
+var ReactInstanceMap = {
+
+  /**
+   * This API should be called `delete` but we'd have to make sure to always
+   * transform these to strings for IE support. When this transform is fully
+   * supported we can rename it.
+   */
+  remove: function (key) {
+    key._reactInternalInstance = undefined;
+  },
+
+  get: function (key) {
+    return key._reactInternalInstance;
+  },
+
+  has: function (key) {
+    return key._reactInternalInstance !== undefined;
+  },
+
+  set: function (key, value) {
+    key._reactInternalInstance = value;
+  }
+
+};
+
+module.exports = ReactInstanceMap;
+},{}],73:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactInstrumentation
+ */
+
+'use strict';
+
+var debugTool = null;
+
+if ("development" !== 'production') {
+  var ReactDebugTool = _dereq_(58);
+  debugTool = ReactDebugTool;
+}
+
+module.exports = { debugTool: debugTool };
+},{"58":58}],74:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactInvalidSetStateWarningHook
+ */
+
+'use strict';
+
+var warning = _dereq_(171);
+
+if ("development" !== 'production') {
+  var processingChildContext = false;
+
+  var warnInvalidSetState = function () {
+    "development" !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;
+  };
+}
+
+var ReactInvalidSetStateWarningHook = {
+  onBeginProcessingChildContext: function () {
+    processingChildContext = true;
+  },
+  onEndProcessingChildContext: function () {
+    processingChildContext = false;
+  },
+  onSetState: function () {
+    warnInvalidSetState();
+  }
+};
+
+module.exports = ReactInvalidSetStateWarningHook;
+},{"171":171}],75:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactMarkupChecksum
+ */
+
+'use strict';
+
+var adler32 = _dereq_(117);
+
+var TAG_END = /\/?>/;
+var COMMENT_START = /^<\!\-\-/;
+
+var ReactMarkupChecksum = {
+  CHECKSUM_ATTR_NAME: 'data-react-checksum',
+
+  /**
+   * @param {string} markup Markup string
+   * @return {string} Markup string with checksum attribute attached
+   */
+  addChecksumToMarkup: function (markup) {
+    var checksum = adler32(markup);
+
+    // Add checksum (handle both parent tags, comments and self-closing tags)
+    if (COMMENT_START.test(markup)) {
+      return markup;
+    } else {
+      return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
+    }
+  },
+
+  /**
+   * @param {string} markup to use
+   * @param {DOMElement} element root React element
+   * @returns {boolean} whether or not the markup is the same
+   */
+  canReuseMarkup: function (markup, element) {
+    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
+    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
+    var markupChecksum = adler32(markup);
+    return markupChecksum === existingChecksum;
+  }
+};
+
+module.exports = ReactMarkupChecksum;
+},{"117":117}],76:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactMount
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var DOMLazyTree = _dereq_(8);
+var DOMProperty = _dereq_(10);
+var ReactBrowserEventEmitter = _dereq_(27);
+var ReactCurrentOwner = _dereq_(37);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactDOMContainerInfo = _dereq_(43);
+var ReactDOMFeatureFlags = _dereq_(46);
+var ReactElement = _dereq_(61);
+var ReactFeatureFlags = _dereq_(67);
+var ReactInstanceMap = _dereq_(72);
+var ReactInstrumentation = _dereq_(73);
+var ReactMarkupChecksum = _dereq_(75);
+var ReactReconciler = _dereq_(88);
+var ReactUpdateQueue = _dereq_(95);
+var ReactUpdates = _dereq_(96);
+
+var emptyObject = _dereq_(155);
+var instantiateReactComponent = _dereq_(135);
+var invariant = _dereq_(162);
+var setInnerHTML = _dereq_(142);
+var shouldUpdateReactComponent = _dereq_(144);
+var warning = _dereq_(171);
+
+var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
+var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
+
+var ELEMENT_NODE_TYPE = 1;
+var DOC_NODE_TYPE = 9;
+var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
+
+var instancesByReactRootID = {};
+
+/**
+ * Finds the index of the first character
+ * that's not common between the two given strings.
+ *
+ * @return {number} the index of the character where the strings diverge
+ */
+function firstDifferenceIndex(string1, string2) {
+  var minLen = Math.min(string1.length, string2.length);
+  for (var i = 0; i < minLen; i++) {
+    if (string1.charAt(i) !== string2.charAt(i)) {
+      return i;
+    }
+  }
+  return string1.length === string2.length ? -1 : minLen;
+}
+
+/**
+ * @param {DOMElement|DOMDocument} container DOM element that may contain
+ * a React component
+ * @return {?*} DOM element that may have the reactRoot ID, or null.
+ */
+function getReactRootElementInContainer(container) {
+  if (!container) {
+    return null;
+  }
+
+  if (container.nodeType === DOC_NODE_TYPE) {
+    return container.documentElement;
+  } else {
+    return container.firstChild;
+  }
+}
+
+function internalGetID(node) {
+  // If node is something like a window, document, or text node, none of
+  // which support attributes or a .getAttribute method, gracefully return
+  // the empty string, as if the attribute were missing.
+  return node.getAttribute && node.getAttribute(ATTR_NAME) || '';
+}
+
+/**
+ * Mounts this component and inserts it into the DOM.
+ *
+ * @param {ReactComponent} componentInstance The instance to mount.
+ * @param {DOMElement} container DOM element to mount into.
+ * @param {ReactReconcileTransaction} transaction
+ * @param {boolean} shouldReuseMarkup If true, do not insert markup
+ */
+function mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {
+  var markerName;
+  if (ReactFeatureFlags.logTopLevelRenders) {
+    var wrappedElement = wrapperInstance._currentElement.props;
+    var type = wrappedElement.type;
+    markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);
+    console.time(markerName);
+  }
+
+  var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDebugID */
+  );
+
+  if (markerName) {
+    console.timeEnd(markerName);
+  }
+
+  wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;
+  ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);
+}
+
+/**
+ * Batched mount.
+ *
+ * @param {ReactComponent} componentInstance The instance to mount.
+ * @param {DOMElement} container DOM element to mount into.
+ * @param {boolean} shouldReuseMarkup If true, do not insert markup
+ */
+function batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {
+  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(
+  /* useCreateElement */
+  !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);
+  transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);
+  ReactUpdates.ReactReconcileTransaction.release(transaction);
+}
+
+/**
+ * Unmounts a component and removes it from the DOM.
+ *
+ * @param {ReactComponent} instance React component instance.
+ * @param {DOMElement} container DOM element to unmount from.
+ * @final
+ * @internal
+ * @see {ReactMount.unmountComponentAtNode}
+ */
+function unmountComponentFromNode(instance, container, safely) {
+  if ("development" !== 'production') {
+    ReactInstrumentation.debugTool.onBeginFlush();
+  }
+  ReactReconciler.unmountComponent(instance, safely);
+  if ("development" !== 'production') {
+    ReactInstrumentation.debugTool.onEndFlush();
+  }
+
+  if (container.nodeType === DOC_NODE_TYPE) {
+    container = container.documentElement;
+  }
+
+  // http://jsperf.com/emptying-a-node
+  while (container.lastChild) {
+    container.removeChild(container.lastChild);
+  }
+}
+
+/**
+ * True if the supplied DOM node has a direct React-rendered child that is
+ * not a React root element. Useful for warning in `render`,
+ * `unmountComponentAtNode`, etc.
+ *
+ * @param {?DOMElement} node The candidate DOM node.
+ * @return {boolean} True if the DOM element contains a direct child that was
+ * rendered by React but is not a root element.
+ * @internal
+ */
+function hasNonRootReactChild(container) {
+  var rootEl = getReactRootElementInContainer(container);
+  if (rootEl) {
+    var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);
+    return !!(inst && inst._hostParent);
+  }
+}
+
+/**
+ * True if the supplied DOM node is a React DOM element and
+ * it has been rendered by another copy of React.
+ *
+ * @param {?DOMElement} node The candidate DOM node.
+ * @return {boolean} True if the DOM has been rendered by another copy of React
+ * @internal
+ */
+function nodeIsRenderedByOtherInstance(container) {
+  var rootEl = getReactRootElementInContainer(container);
+  return !!(rootEl && isReactNode(rootEl) && !ReactDOMComponentTree.getInstanceFromNode(rootEl));
+}
+
+/**
+ * True if the supplied DOM node is a valid node element.
+ *
+ * @param {?DOMElement} node The candidate DOM node.
+ * @return {boolean} True if the DOM is a valid DOM node.
+ * @internal
+ */
+function isValidContainer(node) {
+  return !!(node && (node.nodeType === ELEMENT_NODE_TYPE || node.nodeType === DOC_NODE_TYPE || node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
+}
+
+/**
+ * True if the supplied DOM node is a valid React node element.
+ *
+ * @param {?DOMElement} node The candidate DOM node.
+ * @return {boolean} True if the DOM is a valid React DOM node.
+ * @internal
+ */
+function isReactNode(node) {
+  return isValidContainer(node) && (node.hasAttribute(ROOT_ATTR_NAME) || node.hasAttribute(ATTR_NAME));
+}
+
+function getHostRootInstanceInContainer(container) {
+  var rootEl = getReactRootElementInContainer(container);
+  var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
+  return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;
+}
+
+function getTopLevelWrapperInContainer(container) {
+  var root = getHostRootInstanceInContainer(container);
+  return root ? root._hostContainerInfo._topLevelWrapper : null;
+}
+
+/**
+ * Temporary (?) hack so that we can store all top-level pending updates on
+ * composites instead of having to worry about different types of components
+ * here.
+ */
+var topLevelRootCounter = 1;
+var TopLevelWrapper = function () {
+  this.rootID = topLevelRootCounter++;
+};
+TopLevelWrapper.prototype.isReactComponent = {};
+if ("development" !== 'production') {
+  TopLevelWrapper.displayName = 'TopLevelWrapper';
+}
+TopLevelWrapper.prototype.render = function () {
+  // this.props is actually a ReactElement
+  return this.props;
+};
+
+/**
+ * Mounting is the process of initializing a React component by creating its
+ * representative DOM elements and inserting them into a supplied `container`.
+ * Any prior content inside `container` is destroyed in the process.
+ *
+ *   ReactMount.render(
+ *     component,
+ *     document.getElementById('container')
+ *   );
+ *
+ *   <div id="container">                   <-- Supplied `container`.
+ *     <div data-reactid=".3">              <-- Rendered reactRoot of React
+ *       // ...                                 component.
+ *     </div>
+ *   </div>
+ *
+ * Inside of `container`, the first element rendered is the "reactRoot".
+ */
+var ReactMount = {
+
+  TopLevelWrapper: TopLevelWrapper,
+
+  /**
+   * Used by devtools. The keys are not important.
+   */
+  _instancesByReactRootID: instancesByReactRootID,
+
+  /**
+   * This is a hook provided to support rendering React components while
+   * ensuring that the apparent scroll position of its `container` does not
+   * change.
+   *
+   * @param {DOMElement} container The `container` being rendered into.
+   * @param {function} renderCallback This must be called once to do the render.
+   */
+  scrollMonitor: function (container, renderCallback) {
+    renderCallback();
+  },
+
+  /**
+   * Take a component that's already mounted into the DOM and replace its props
+   * @param {ReactComponent} prevComponent component instance already in the DOM
+   * @param {ReactElement} nextElement component instance to render
+   * @param {DOMElement} container container to render into
+   * @param {?function} callback function triggered on completion
+   */
+  _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {
+    ReactMount.scrollMonitor(container, function () {
+      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);
+      if (callback) {
+        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
+      }
+    });
+
+    return prevComponent;
+  },
+
+  /**
+   * Render a new component into the DOM. Hooked by hooks!
+   *
+   * @param {ReactElement} nextElement element to render
+   * @param {DOMElement} container container to render into
+   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
+   * @return {ReactComponent} nextComponent
+   */
+  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
+    // Various parts of our code (such as ReactCompositeComponent's
+    // _renderValidatedComponent) assume that calls to render aren't nested;
+    // verify that that's the case.
+    "development" !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
+
+    !isValidContainer(container) ? "development" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;
+
+    ReactBrowserEventEmitter.ensureScrollValueMonitoring();
+    var componentInstance = instantiateReactComponent(nextElement, false);
+
+    // The initial render is synchronous but any updates that happen during
+    // rendering, in componentWillMount or componentDidMount, will be batched
+    // according to the current batching strategy.
+
+    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);
+
+    var wrapperID = componentInstance._instance.rootID;
+    instancesByReactRootID[wrapperID] = componentInstance;
+
+    return componentInstance;
+  },
+
+  /**
+   * Renders a React component into the DOM in the supplied `container`.
+   *
+   * If the React component was previously rendered into `container`, this will
+   * perform an update on it and only mutate the DOM as necessary to reflect the
+   * latest React component.
+   *
+   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.
+   * @param {ReactElement} nextElement Component element to render.
+   * @param {DOMElement} container DOM element to render into.
+   * @param {?function} callback function triggered on completion
+   * @return {ReactComponent} Component instance rendered in `container`.
+   */
+  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
+    !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? "development" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;
+    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
+  },
+
+  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
+    ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');
+    !ReactElement.isValidElement(nextElement) ? "development" !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :
+    // Check if it quacks like an element
+    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;
+
+    "development" !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;
+
+    var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);
+
+    var nextContext;
+    if (parentComponent) {
+      var parentInst = ReactInstanceMap.get(parentComponent);
+      nextContext = parentInst._processChildContext(parentInst._context);
+    } else {
+      nextContext = emptyObject;
+    }
+
+    var prevComponent = getTopLevelWrapperInContainer(container);
+
+    if (prevComponent) {
+      var prevWrappedElement = prevComponent._currentElement;
+      var prevElement = prevWrappedElement.props;
+      if (shouldUpdateReactComponent(prevElement, nextElement)) {
+        var publicInst = prevComponent._renderedComponent.getPublicInstance();
+        var updatedCallback = callback && function () {
+          callback.call(publicInst);
+        };
+        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);
+        return publicInst;
+      } else {
+        ReactMount.unmountComponentAtNode(container);
+      }
+    }
+
+    var reactRootElement = getReactRootElementInContainer(container);
+    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);
+    var containerHasNonRootReactChild = hasNonRootReactChild(container);
+
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;
+
+      if (!containerHasReactMarkup || reactRootElement.nextSibling) {
+        var rootElementSibling = reactRootElement;
+        while (rootElementSibling) {
+          if (internalGetID(rootElementSibling)) {
+            "development" !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;
+            break;
+          }
+          rootElementSibling = rootElementSibling.nextSibling;
+        }
+      }
+    }
+
+    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;
+    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();
+    if (callback) {
+      callback.call(component);
+    }
+    return component;
+  },
+
+  /**
+   * Renders a React component into the DOM in the supplied `container`.
+   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render
+   *
+   * If the React component was previously rendered into `container`, this will
+   * perform an update on it and only mutate the DOM as necessary to reflect the
+   * latest React component.
+   *
+   * @param {ReactElement} nextElement Component element to render.
+   * @param {DOMElement} container DOM element to render into.
+   * @param {?function} callback function triggered on completion
+   * @return {ReactComponent} Component instance rendered in `container`.
+   */
+  render: function (nextElement, container, callback) {
+    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);
+  },
+
+  /**
+   * Unmounts and destroys the React component rendered in the `container`.
+   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode
+   *
+   * @param {DOMElement} container DOM element containing a React component.
+   * @return {boolean} True if a component was found in and unmounted from
+   *                   `container`
+   */
+  unmountComponentAtNode: function (container) {
+    // Various parts of our code (such as ReactCompositeComponent's
+    // _renderValidatedComponent) assume that calls to render aren't nested;
+    // verify that that's the case. (Strictly speaking, unmounting won't cause a
+    // render but we still don't expect to be in a render call here.)
+    "development" !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
+
+    !isValidContainer(container) ? "development" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;
+
+    if ("development" !== 'production') {
+      "development" !== 'production' ? warning(!nodeIsRenderedByOtherInstance(container), 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by another copy of React.') : void 0;
+    }
+
+    var prevComponent = getTopLevelWrapperInContainer(container);
+    if (!prevComponent) {
+      // Check if the node being unmounted was rendered by React, but isn't a
+      // root node.
+      var containerHasNonRootReactChild = hasNonRootReactChild(container);
+
+      // Check if the container itself is a React root node.
+      var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);
+
+      if ("development" !== 'production') {
+        "development" !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;
+      }
+
+      return false;
+    }
+    delete instancesByReactRootID[prevComponent._instance.rootID];
+    ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);
+    return true;
+  },
+
+  _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {
+    !isValidContainer(container) ? "development" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;
+
+    if (shouldReuseMarkup) {
+      var rootElement = getReactRootElementInContainer(container);
+      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
+        ReactDOMComponentTree.precacheNode(instance, rootElement);
+        return;
+      } else {
+        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
+        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
+
+        var rootMarkup = rootElement.outerHTML;
+        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);
+
+        var normalizedMarkup = markup;
+        if ("development" !== 'production') {
+          // because rootMarkup is retrieved from the DOM, various normalizations
+          // will have occurred which will not be present in `markup`. Here,
+          // insert markup into a <div> or <iframe> depending on the container
+          // type to perform the same normalizations before comparing.
+          var normalizer;
+          if (container.nodeType === ELEMENT_NODE_TYPE) {
+            normalizer = document.createElement('div');
+            normalizer.innerHTML = markup;
+            normalizedMarkup = normalizer.innerHTML;
+          } else {
+            normalizer = document.createElement('iframe');
+            document.body.appendChild(normalizer);
+            normalizer.contentDocument.write(markup);
+            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;
+            document.body.removeChild(normalizer);
+          }
+        }
+
+        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
+        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
+
+        !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s', difference) : _prodInvariant('42', difference) : void 0;
+
+        if ("development" !== 'production') {
+          "development" !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : void 0;
+        }
+      }
+    }
+
+    !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but you didn\'t use server rendering. We can\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;
+
+    if (transaction.useCreateElement) {
+      while (container.lastChild) {
+        container.removeChild(container.lastChild);
+      }
+      DOMLazyTree.insertTreeBefore(container, markup, null);
+    } else {
+      setInnerHTML(container, markup);
+      ReactDOMComponentTree.precacheNode(instance, container.firstChild);
+    }
+
+    if ("development" !== 'production') {
+      var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
+      if (hostNode._debugID !== 0) {
+        ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());
+      }
+    }
+  }
+};
+
+module.exports = ReactMount;
+},{"10":10,"135":135,"140":140,"142":142,"144":144,"155":155,"162":162,"171":171,"27":27,"37":37,"42":42,"43":43,"46":46,"61":61,"67":67,"72":72,"73":73,"75":75,"8":8,"88":88,"95":95,"96":96}],77:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactMultiChild
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactComponentEnvironment = _dereq_(34);
+var ReactInstanceMap = _dereq_(72);
+var ReactInstrumentation = _dereq_(73);
+var ReactMultiChildUpdateTypes = _dereq_(78);
+
+var ReactCurrentOwner = _dereq_(37);
+var ReactReconciler = _dereq_(88);
+var ReactChildReconciler = _dereq_(28);
+
+var emptyFunction = _dereq_(154);
+var flattenChildren = _dereq_(124);
+var invariant = _dereq_(162);
+
+/**
+ * Make an update for markup to be rendered and inserted at a supplied index.
+ *
+ * @param {string} markup Markup that renders into an element.
+ * @param {number} toIndex Destination index.
+ * @private
+ */
+function makeInsertMarkup(markup, afterNode, toIndex) {
+  // NOTE: Null values reduce hidden classes.
+  return {
+    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
+    content: markup,
+    fromIndex: null,
+    fromNode: null,
+    toIndex: toIndex,
+    afterNode: afterNode
+  };
+}
+
+/**
+ * Make an update for moving an existing element to another index.
+ *
+ * @param {number} fromIndex Source index of the existing element.
+ * @param {number} toIndex Destination index of the element.
+ * @private
+ */
+function makeMove(child, afterNode, toIndex) {
+  // NOTE: Null values reduce hidden classes.
+  return {
+    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
+    content: null,
+    fromIndex: child._mountIndex,
+    fromNode: ReactReconciler.getHostNode(child),
+    toIndex: toIndex,
+    afterNode: afterNode
+  };
+}
+
+/**
+ * Make an update for removing an element at an index.
+ *
+ * @param {number} fromIndex Index of the element to remove.
+ * @private
+ */
+function makeRemove(child, node) {
+  // NOTE: Null values reduce hidden classes.
+  return {
+    type: ReactMultiChildUpdateTypes.REMOVE_NODE,
+    content: null,
+    fromIndex: child._mountIndex,
+    fromNode: node,
+    toIndex: null,
+    afterNode: null
+  };
+}
+
+/**
+ * Make an update for setting the markup of a node.
+ *
+ * @param {string} markup Markup that renders into an element.
+ * @private
+ */
+function makeSetMarkup(markup) {
+  // NOTE: Null values reduce hidden classes.
+  return {
+    type: ReactMultiChildUpdateTypes.SET_MARKUP,
+    content: markup,
+    fromIndex: null,
+    fromNode: null,
+    toIndex: null,
+    afterNode: null
+  };
+}
+
+/**
+ * Make an update for setting the text content.
+ *
+ * @param {string} textContent Text content to set.
+ * @private
+ */
+function makeTextContent(textContent) {
+  // NOTE: Null values reduce hidden classes.
+  return {
+    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
+    content: textContent,
+    fromIndex: null,
+    fromNode: null,
+    toIndex: null,
+    afterNode: null
+  };
+}
+
+/**
+ * Push an update, if any, onto the queue. Creates a new queue if none is
+ * passed and always returns the queue. Mutative.
+ */
+function enqueue(queue, update) {
+  if (update) {
+    queue = queue || [];
+    queue.push(update);
+  }
+  return queue;
+}
+
+/**
+ * Processes any enqueued updates.
+ *
+ * @private
+ */
+function processQueue(inst, updateQueue) {
+  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
+}
+
+var setChildrenForInstrumentation = emptyFunction;
+if ("development" !== 'production') {
+  var getDebugID = function (inst) {
+    if (!inst._debugID) {
+      // Check for ART-like instances. TODO: This is silly/gross.
+      var internal;
+      if (internal = ReactInstanceMap.get(inst)) {
+        inst = internal;
+      }
+    }
+    return inst._debugID;
+  };
+  setChildrenForInstrumentation = function (children) {
+    var debugID = getDebugID(this);
+    // TODO: React Native empty components are also multichild.
+    // This means they still get into this method but don't have _debugID.
+    if (debugID !== 0) {
+      ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {
+        return children[key]._debugID;
+      }) : []);
+    }
+  };
+}
+
+/**
+ * ReactMultiChild are capable of reconciling multiple children.
+ *
+ * @class ReactMultiChild
+ * @internal
+ */
+var ReactMultiChild = {
+
+  /**
+   * Provides common functionality for components that must reconcile multiple
+   * children. This is used by `ReactDOMComponent` to mount, update, and
+   * unmount child components.
+   *
+   * @lends {ReactMultiChild.prototype}
+   */
+  Mixin: {
+
+    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {
+      if ("development" !== 'production') {
+        var selfDebugID = getDebugID(this);
+        if (this._currentElement) {
+          try {
+            ReactCurrentOwner.current = this._currentElement._owner;
+            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, selfDebugID);
+          } finally {
+            ReactCurrentOwner.current = null;
+          }
+        }
+      }
+      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
+    },
+
+    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {
+      var nextChildren;
+      var selfDebugID = 0;
+      if ("development" !== 'production') {
+        selfDebugID = getDebugID(this);
+        if (this._currentElement) {
+          try {
+            ReactCurrentOwner.current = this._currentElement._owner;
+            nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);
+          } finally {
+            ReactCurrentOwner.current = null;
+          }
+          ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);
+          return nextChildren;
+        }
+      }
+      nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);
+      ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);
+      return nextChildren;
+    },
+
+    /**
+     * Generates a "mount image" for each of the supplied children. In the case
+     * of `ReactDOMComponent`, a mount image is a string of markup.
+     *
+     * @param {?object} nestedChildren Nested child maps.
+     * @return {array} An array of mounted representations.
+     * @internal
+     */
+    mountChildren: function (nestedChildren, transaction, context) {
+      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
+      this._renderedChildren = children;
+
+      var mountImages = [];
+      var index = 0;
+      for (var name in children) {
+        if (children.hasOwnProperty(name)) {
+          var child = children[name];
+          var selfDebugID = 0;
+          if ("development" !== 'production') {
+            selfDebugID = getDebugID(this);
+          }
+          var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context, selfDebugID);
+          child._mountIndex = index++;
+          mountImages.push(mountImage);
+        }
+      }
+
+      if ("development" !== 'production') {
+        setChildrenForInstrumentation.call(this, children);
+      }
+
+      return mountImages;
+    },
+
+    /**
+     * Replaces any rendered children with a text content string.
+     *
+     * @param {string} nextContent String of content.
+     * @internal
+     */
+    updateTextContent: function (nextContent) {
+      var prevChildren = this._renderedChildren;
+      // Remove any rendered children.
+      ReactChildReconciler.unmountChildren(prevChildren, false);
+      for (var name in prevChildren) {
+        if (prevChildren.hasOwnProperty(name)) {
+          !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
+        }
+      }
+      // Set new text content.
+      var updates = [makeTextContent(nextContent)];
+      processQueue(this, updates);
+    },
+
+    /**
+     * Replaces any rendered children with a markup string.
+     *
+     * @param {string} nextMarkup String of markup.
+     * @internal
+     */
+    updateMarkup: function (nextMarkup) {
+      var prevChildren = this._renderedChildren;
+      // Remove any rendered children.
+      ReactChildReconciler.unmountChildren(prevChildren, false);
+      for (var name in prevChildren) {
+        if (prevChildren.hasOwnProperty(name)) {
+          !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
+        }
+      }
+      var updates = [makeSetMarkup(nextMarkup)];
+      processQueue(this, updates);
+    },
+
+    /**
+     * Updates the rendered children with new children.
+     *
+     * @param {?object} nextNestedChildrenElements Nested child element maps.
+     * @param {ReactReconcileTransaction} transaction
+     * @internal
+     */
+    updateChildren: function (nextNestedChildrenElements, transaction, context) {
+      // Hook used by React ART
+      this._updateChildren(nextNestedChildrenElements, transaction, context);
+    },
+
+    /**
+     * @param {?object} nextNestedChildrenElements Nested child element maps.
+     * @param {ReactReconcileTransaction} transaction
+     * @final
+     * @protected
+     */
+    _updateChildren: function (nextNestedChildrenElements, transaction, context) {
+      var prevChildren = this._renderedChildren;
+      var removedNodes = {};
+      var mountImages = [];
+      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);
+      if (!nextChildren && !prevChildren) {
+        return;
+      }
+      var updates = null;
+      var name;
+      // `nextIndex` will increment for each child in `nextChildren`, but
+      // `lastIndex` will be the last index visited in `prevChildren`.
+      var nextIndex = 0;
+      var lastIndex = 0;
+      // `nextMountIndex` will increment for each newly mounted child.
+      var nextMountIndex = 0;
+      var lastPlacedNode = null;
+      for (name in nextChildren) {
+        if (!nextChildren.hasOwnProperty(name)) {
+          continue;
+        }
+        var prevChild = prevChildren && prevChildren[name];
+        var nextChild = nextChildren[name];
+        if (prevChild === nextChild) {
+          updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));
+          lastIndex = Math.max(prevChild._mountIndex, lastIndex);
+          prevChild._mountIndex = nextIndex;
+        } else {
+          if (prevChild) {
+            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
+            lastIndex = Math.max(prevChild._mountIndex, lastIndex);
+            // The `removedNodes` loop below will actually remove the child.
+          }
+          // The child must be instantiated before it's mounted.
+          updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));
+          nextMountIndex++;
+        }
+        nextIndex++;
+        lastPlacedNode = ReactReconciler.getHostNode(nextChild);
+      }
+      // Remove children that are no longer present.
+      for (name in removedNodes) {
+        if (removedNodes.hasOwnProperty(name)) {
+          updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));
+        }
+      }
+      if (updates) {
+        processQueue(this, updates);
+      }
+      this._renderedChildren = nextChildren;
+
+      if ("development" !== 'production') {
+        setChildrenForInstrumentation.call(this, nextChildren);
+      }
+    },
+
+    /**
+     * Unmounts all rendered children. This should be used to clean up children
+     * when this component is unmounted. It does not actually perform any
+     * backend operations.
+     *
+     * @internal
+     */
+    unmountChildren: function (safely) {
+      var renderedChildren = this._renderedChildren;
+      ReactChildReconciler.unmountChildren(renderedChildren, safely);
+      this._renderedChildren = null;
+    },
+
+    /**
+     * Moves a child component to the supplied index.
+     *
+     * @param {ReactComponent} child Component to move.
+     * @param {number} toIndex Destination index of the element.
+     * @param {number} lastIndex Last index visited of the siblings of `child`.
+     * @protected
+     */
+    moveChild: function (child, afterNode, toIndex, lastIndex) {
+      // If the index of `child` is less than `lastIndex`, then it needs to
+      // be moved. Otherwise, we do not need to move it because a child will be
+      // inserted or moved before `child`.
+      if (child._mountIndex < lastIndex) {
+        return makeMove(child, afterNode, toIndex);
+      }
+    },
+
+    /**
+     * Creates a child component.
+     *
+     * @param {ReactComponent} child Component to create.
+     * @param {string} mountImage Markup to insert.
+     * @protected
+     */
+    createChild: function (child, afterNode, mountImage) {
+      return makeInsertMarkup(mountImage, afterNode, child._mountIndex);
+    },
+
+    /**
+     * Removes a child component.
+     *
+     * @param {ReactComponent} child Child to remove.
+     * @protected
+     */
+    removeChild: function (child, node) {
+      return makeRemove(child, node);
+    },
+
+    /**
+     * Mounts a child with the supplied name.
+     *
+     * NOTE: This is part of `updateChildren` and is here for readability.
+     *
+     * @param {ReactComponent} child Component to mount.
+     * @param {string} name Name of the child.
+     * @param {number} index Index at which to insert the child.
+     * @param {ReactReconcileTransaction} transaction
+     * @private
+     */
+    _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {
+      child._mountIndex = index;
+      return this.createChild(child, afterNode, mountImage);
+    },
+
+    /**
+     * Unmounts a rendered child.
+     *
+     * NOTE: This is part of `updateChildren` and is here for readability.
+     *
+     * @param {ReactComponent} child Component to unmount.
+     * @private
+     */
+    _unmountChild: function (child, node) {
+      var update = this.removeChild(child, node);
+      child._mountIndex = null;
+      return update;
+    }
+
+  }
+
+};
+
+module.exports = ReactMultiChild;
+},{"124":124,"140":140,"154":154,"162":162,"28":28,"34":34,"37":37,"72":72,"73":73,"78":78,"88":88}],78:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactMultiChildUpdateTypes
+ */
+
+'use strict';
+
+var keyMirror = _dereq_(165);
+
+/**
+ * When a component's children are updated, a series of update configuration
+ * objects are created in order to batch and serialize the required changes.
+ *
+ * Enumerates all the possible types of update configurations.
+ *
+ * @internal
+ */
+var ReactMultiChildUpdateTypes = keyMirror({
+  INSERT_MARKUP: null,
+  MOVE_EXISTING: null,
+  REMOVE_NODE: null,
+  SET_MARKUP: null,
+  TEXT_CONTENT: null
+});
+
+module.exports = ReactMultiChildUpdateTypes;
+},{"165":165}],79:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactNodeTypes
+ * 
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactElement = _dereq_(61);
+
+var invariant = _dereq_(162);
+
+var ReactNodeTypes = {
+  HOST: 0,
+  COMPOSITE: 1,
+  EMPTY: 2,
+
+  getType: function (node) {
+    if (node === null || node === false) {
+      return ReactNodeTypes.EMPTY;
+    } else if (ReactElement.isValidElement(node)) {
+      if (typeof node.type === 'function') {
+        return ReactNodeTypes.COMPOSITE;
+      } else {
+        return ReactNodeTypes.HOST;
+      }
+    }
+    !false ? "development" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;
+  }
+};
+
+module.exports = ReactNodeTypes;
+},{"140":140,"162":162,"61":61}],80:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactNoopUpdateQueue
+ */
+
+'use strict';
+
+var warning = _dereq_(171);
+
+function warnNoop(publicInstance, callerName) {
+  if ("development" !== 'production') {
+    var constructor = publicInstance.constructor;
+    "development" !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
+  }
+}
+
+/**
+ * This is the abstract API for an update queue.
+ */
+var ReactNoopUpdateQueue = {
+
+  /**
+   * Checks whether or not this composite component is mounted.
+   * @param {ReactClass} publicInstance The instance we want to test.
+   * @return {boolean} True if mounted, false otherwise.
+   * @protected
+   * @final
+   */
+  isMounted: function (publicInstance) {
+    return false;
+  },
+
+  /**
+   * Enqueue a callback that will be executed after all the pending updates
+   * have processed.
+   *
+   * @param {ReactClass} publicInstance The instance to use as `this` context.
+   * @param {?function} callback Called after state is updated.
+   * @internal
+   */
+  enqueueCallback: function (publicInstance, callback) {},
+
+  /**
+   * Forces an update. This should only be invoked when it is known with
+   * certainty that we are **not** in a DOM transaction.
+   *
+   * You may want to call this when you know that some deeper aspect of the
+   * component's state has changed but `setState` was not called.
+   *
+   * This will not invoke `shouldComponentUpdate`, but it will invoke
+   * `componentWillUpdate` and `componentDidUpdate`.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @internal
+   */
+  enqueueForceUpdate: function (publicInstance) {
+    warnNoop(publicInstance, 'forceUpdate');
+  },
+
+  /**
+   * Replaces all of the state. Always use this or `setState` to mutate state.
+   * You should treat `this.state` as immutable.
+   *
+   * There is no guarantee that `this.state` will be immediately updated, so
+   * accessing `this.state` after calling this method may return the old value.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object} completeState Next state.
+   * @internal
+   */
+  enqueueReplaceState: function (publicInstance, completeState) {
+    warnNoop(publicInstance, 'replaceState');
+  },
+
+  /**
+   * Sets a subset of the state. This only exists because _pendingState is
+   * internal. This provides a merging strategy that is not available to deep
+   * properties which is confusing. TODO: Expose pendingState or don't use it
+   * during the merge.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object} partialState Next partial state to be merged with state.
+   * @internal
+   */
+  enqueueSetState: function (publicInstance, partialState) {
+    warnNoop(publicInstance, 'setState');
+  }
+};
+
+module.exports = ReactNoopUpdateQueue;
+},{"171":171}],81:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactOwner
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * ReactOwners are capable of storing references to owned components.
+ *
+ * All components are capable of //being// referenced by owner components, but
+ * only ReactOwner components are capable of //referencing// owned components.
+ * The named reference is known as a "ref".
+ *
+ * Refs are available when mounted and updated during reconciliation.
+ *
+ *   var MyComponent = React.createClass({
+ *     render: function() {
+ *       return (
+ *         <div onClick={this.handleClick}>
+ *           <CustomComponent ref="custom" />
+ *         </div>
+ *       );
+ *     },
+ *     handleClick: function() {
+ *       this.refs.custom.handleClick();
+ *     },
+ *     componentDidMount: function() {
+ *       this.refs.custom.initialize();
+ *     }
+ *   });
+ *
+ * Refs should rarely be used. When refs are used, they should only be done to
+ * control data that is not handled by React's data flow.
+ *
+ * @class ReactOwner
+ */
+var ReactOwner = {
+
+  /**
+   * @param {?object} object
+   * @return {boolean} True if `object` is a valid owner.
+   * @final
+   */
+  isValidOwner: function (object) {
+    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
+  },
+
+  /**
+   * Adds a component by ref to an owner component.
+   *
+   * @param {ReactComponent} component Component to reference.
+   * @param {string} ref Name by which to refer to the component.
+   * @param {ReactOwner} owner Component on which to record the ref.
+   * @final
+   * @internal
+   */
+  addComponentAsRefTo: function (component, ref, owner) {
+    !ReactOwner.isValidOwner(owner) ? "development" !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;
+    owner.attachRef(ref, component);
+  },
+
+  /**
+   * Removes a component by ref from an owner component.
+   *
+   * @param {ReactComponent} component Component to dereference.
+   * @param {string} ref Name of the ref to remove.
+   * @param {ReactOwner} owner Component on which the ref is recorded.
+   * @final
+   * @internal
+   */
+  removeComponentAsRefFrom: function (component, ref, owner) {
+    !ReactOwner.isValidOwner(owner) ? "development" !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;
+    var ownerPublicInstance = owner.getPublicInstance();
+    // Check that `component`'s owner is still alive and that `component` is still the current ref
+    // because we do not want to detach the ref if another component stole it.
+    if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {
+      owner.detachRef(ref);
+    }
+  }
+
+};
+
+module.exports = ReactOwner;
+},{"140":140,"162":162}],82:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactPropTypeLocationNames
+ */
+
+'use strict';
+
+var ReactPropTypeLocationNames = {};
+
+if ("development" !== 'production') {
+  ReactPropTypeLocationNames = {
+    prop: 'prop',
+    context: 'context',
+    childContext: 'child context'
+  };
+}
+
+module.exports = ReactPropTypeLocationNames;
+},{}],83:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactPropTypeLocations
+ */
+
+'use strict';
+
+var keyMirror = _dereq_(165);
+
+var ReactPropTypeLocations = keyMirror({
+  prop: null,
+  context: null,
+  childContext: null
+});
+
+module.exports = ReactPropTypeLocations;
+},{"165":165}],84:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactPropTypes
+ */
+
+'use strict';
+
+var ReactElement = _dereq_(61);
+var ReactPropTypeLocationNames = _dereq_(82);
+var ReactPropTypesSecret = _dereq_(85);
+
+var emptyFunction = _dereq_(154);
+var getIteratorFn = _dereq_(131);
+var warning = _dereq_(171);
+
+/**
+ * Collection of methods that allow declaration and validation of props that are
+ * supplied to React components. Example usage:
+ *
+ *   var Props = require('ReactPropTypes');
+ *   var MyArticle = React.createClass({
+ *     propTypes: {
+ *       // An optional string prop named "description".
+ *       description: Props.string,
+ *
+ *       // A required enum prop named "category".
+ *       category: Props.oneOf(['News','Photos']).isRequired,
+ *
+ *       // A prop named "dialog" that requires an instance of Dialog.
+ *       dialog: Props.instanceOf(Dialog).isRequired
+ *     },
+ *     render: function() { ... }
+ *   });
+ *
+ * A more formal specification of how these methods are used:
+ *
+ *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
+ *   decl := ReactPropTypes.{type}(.isRequired)?
+ *
+ * Each and every declaration produces a function with the same signature. This
+ * allows the creation of custom validation functions. For example:
+ *
+ *  var MyLink = React.createClass({
+ *    propTypes: {
+ *      // An optional string or URI prop named "href".
+ *      href: function(props, propName, componentName) {
+ *        var propValue = props[propName];
+ *        if (propValue != null && typeof propValue !== 'string' &&
+ *            !(propValue instanceof URI)) {
+ *          return new Error(
+ *            'Expected a string or an URI for ' + propName + ' in ' +
+ *            componentName
+ *          );
+ *        }
+ *      }
+ *    },
+ *    render: function() {...}
+ *  });
+ *
+ * @internal
+ */
+
+var ANONYMOUS = '<<anonymous>>';
+
+var ReactPropTypes = {
+  array: createPrimitiveTypeChecker('array'),
+  bool: createPrimitiveTypeChecker('boolean'),
+  func: createPrimitiveTypeChecker('function'),
+  number: createPrimitiveTypeChecker('number'),
+  object: createPrimitiveTypeChecker('object'),
+  string: createPrimitiveTypeChecker('string'),
+  symbol: createPrimitiveTypeChecker('symbol'),
+
+  any: createAnyTypeChecker(),
+  arrayOf: createArrayOfTypeChecker,
+  element: createElementTypeChecker(),
+  instanceOf: createInstanceTypeChecker,
+  node: createNodeChecker(),
+  objectOf: createObjectOfTypeChecker,
+  oneOf: createEnumTypeChecker,
+  oneOfType: createUnionTypeChecker,
+  shape: createShapeTypeChecker
+};
+
+/**
+ * inlined Object.is polyfill to avoid requiring consumers ship their own
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+ */
+/*eslint-disable no-self-compare*/
+function is(x, y) {
+  // SameValue algorithm
+  if (x === y) {
+    // Steps 1-5, 7-10
+    // Steps 6.b-6.e: +0 != -0
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    // Step 6.a: NaN == NaN
+    return x !== x && y !== y;
+  }
+}
+/*eslint-enable no-self-compare*/
+
+/**
+ * We use an Error-like object for backward compatibility as people may call
+ * PropTypes directly and inspect their output. However we don't use real
+ * Errors anymore. We don't inspect their stack anyway, and creating them
+ * is prohibitively expensive if they are created too often, such as what
+ * happens in oneOfType() for any type before the one that matched.
+ */
+function PropTypeError(message) {
+  this.message = message;
+  this.stack = '';
+}
+// Make `instanceof Error` still work for returned errors.
+PropTypeError.prototype = Error.prototype;
+
+function createChainableTypeChecker(validate) {
+  if ("development" !== 'production') {
+    var manualPropTypeCallCache = {};
+  }
+  function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
+    componentName = componentName || ANONYMOUS;
+    propFullName = propFullName || propName;
+    if ("development" !== 'production') {
+      if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {
+        var cacheKey = componentName + ':' + propName;
+        if (!manualPropTypeCallCache[cacheKey]) {
+          "development" !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;
+          manualPropTypeCallCache[cacheKey] = true;
+        }
+      }
+    }
+    if (props[propName] == null) {
+      var locationName = ReactPropTypeLocationNames[location];
+      if (isRequired) {
+        return new PropTypeError('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
+      }
+      return null;
+    } else {
+      return validate(props, propName, componentName, location, propFullName);
+    }
+  }
+
+  var chainedCheckType = checkType.bind(null, false);
+  chainedCheckType.isRequired = checkType.bind(null, true);
+
+  return chainedCheckType;
+}
+
+function createPrimitiveTypeChecker(expectedType) {
+  function validate(props, propName, componentName, location, propFullName, secret) {
+    var propValue = props[propName];
+    var propType = getPropType(propValue);
+    if (propType !== expectedType) {
+      var locationName = ReactPropTypeLocationNames[location];
+      // `propValue` being instance of, say, date/regexp, pass the 'object'
+      // check, but we can offer a more precise error message here rather than
+      // 'of type `object`'.
+      var preciseType = getPreciseType(propValue);
+
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createAnyTypeChecker() {
+  return createChainableTypeChecker(emptyFunction.thatReturns(null));
+}
+
+function createArrayOfTypeChecker(typeChecker) {
+  function validate(props, propName, componentName, location, propFullName) {
+    if (typeof typeChecker !== 'function') {
+      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
+    }
+    var propValue = props[propName];
+    if (!Array.isArray(propValue)) {
+      var locationName = ReactPropTypeLocationNames[location];
+      var propType = getPropType(propValue);
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
+    }
+    for (var i = 0; i < propValue.length; i++) {
+      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
+      if (error instanceof Error) {
+        return error;
+      }
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createElementTypeChecker() {
+  function validate(props, propName, componentName, location, propFullName) {
+    var propValue = props[propName];
+    if (!ReactElement.isValidElement(propValue)) {
+      var locationName = ReactPropTypeLocationNames[location];
+      var propType = getPropType(propValue);
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createInstanceTypeChecker(expectedClass) {
+  function validate(props, propName, componentName, location, propFullName) {
+    if (!(props[propName] instanceof expectedClass)) {
+      var locationName = ReactPropTypeLocationNames[location];
+      var expectedClassName = expectedClass.name || ANONYMOUS;
+      var actualClassName = getClassName(props[propName]);
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createEnumTypeChecker(expectedValues) {
+  if (!Array.isArray(expectedValues)) {
+    "development" !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;
+    return emptyFunction.thatReturnsNull;
+  }
+
+  function validate(props, propName, componentName, location, propFullName) {
+    var propValue = props[propName];
+    for (var i = 0; i < expectedValues.length; i++) {
+      if (is(propValue, expectedValues[i])) {
+        return null;
+      }
+    }
+
+    var locationName = ReactPropTypeLocationNames[location];
+    var valuesString = JSON.stringify(expectedValues);
+    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createObjectOfTypeChecker(typeChecker) {
+  function validate(props, propName, componentName, location, propFullName) {
+    if (typeof typeChecker !== 'function') {
+      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
+    }
+    var propValue = props[propName];
+    var propType = getPropType(propValue);
+    if (propType !== 'object') {
+      var locationName = ReactPropTypeLocationNames[location];
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+    }
+    for (var key in propValue) {
+      if (propValue.hasOwnProperty(key)) {
+        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+        if (error instanceof Error) {
+          return error;
+        }
+      }
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createUnionTypeChecker(arrayOfTypeCheckers) {
+  if (!Array.isArray(arrayOfTypeCheckers)) {
+    "development" !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
+    return emptyFunction.thatReturnsNull;
+  }
+
+  function validate(props, propName, componentName, location, propFullName) {
+    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+      var checker = arrayOfTypeCheckers[i];
+      if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
+        return null;
+      }
+    }
+
+    var locationName = ReactPropTypeLocationNames[location];
+    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createNodeChecker() {
+  function validate(props, propName, componentName, location, propFullName) {
+    if (!isNode(props[propName])) {
+      var locationName = ReactPropTypeLocationNames[location];
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function createShapeTypeChecker(shapeTypes) {
+  function validate(props, propName, componentName, location, propFullName) {
+    var propValue = props[propName];
+    var propType = getPropType(propValue);
+    if (propType !== 'object') {
+      var locationName = ReactPropTypeLocationNames[location];
+      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+    }
+    for (var key in shapeTypes) {
+      var checker = shapeTypes[key];
+      if (!checker) {
+        continue;
+      }
+      var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+      if (error) {
+        return error;
+      }
+    }
+    return null;
+  }
+  return createChainableTypeChecker(validate);
+}
+
+function isNode(propValue) {
+  switch (typeof propValue) {
+    case 'number':
+    case 'string':
+    case 'undefined':
+      return true;
+    case 'boolean':
+      return !propValue;
+    case 'object':
+      if (Array.isArray(propValue)) {
+        return propValue.every(isNode);
+      }
+      if (propValue === null || ReactElement.isValidElement(propValue)) {
+        return true;
+      }
+
+      var iteratorFn = getIteratorFn(propValue);
+      if (iteratorFn) {
+        var iterator = iteratorFn.call(propValue);
+        var step;
+        if (iteratorFn !== propValue.entries) {
+          while (!(step = iterator.next()).done) {
+            if (!isNode(step.value)) {
+              return false;
+            }
+          }
+        } else {
+          // Iterator will provide entry [k,v] tuples rather than values.
+          while (!(step = iterator.next()).done) {
+            var entry = step.value;
+            if (entry) {
+              if (!isNode(entry[1])) {
+                return false;
+              }
+            }
+          }
+        }
+      } else {
+        return false;
+      }
+
+      return true;
+    default:
+      return false;
+  }
+}
+
+function isSymbol(propType, propValue) {
+  // Native Symbol.
+  if (propType === 'symbol') {
+    return true;
+  }
+
+  // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+  if (propValue['@@toStringTag'] === 'Symbol') {
+    return true;
+  }
+
+  // Fallback for non-spec compliant Symbols which are polyfilled.
+  if (typeof Symbol === 'function' && propValue instanceof Symbol) {
+    return true;
+  }
+
+  return false;
+}
+
+// Equivalent of `typeof` but with special handling for array and regexp.
+function getPropType(propValue) {
+  var propType = typeof propValue;
+  if (Array.isArray(propValue)) {
+    return 'array';
+  }
+  if (propValue instanceof RegExp) {
+    // Old webkits (at least until Android 4.0) return 'function' rather than
+    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+    // passes PropTypes.object.
+    return 'object';
+  }
+  if (isSymbol(propType, propValue)) {
+    return 'symbol';
+  }
+  return propType;
+}
+
+// This handles more types than `getPropType`. Only used for error messages.
+// See `createPrimitiveTypeChecker`.
+function getPreciseType(propValue) {
+  var propType = getPropType(propValue);
+  if (propType === 'object') {
+    if (propValue instanceof Date) {
+      return 'date';
+    } else if (propValue instanceof RegExp) {
+      return 'regexp';
+    }
+  }
+  return propType;
+}
+
+// Returns class name of the object, if any.
+function getClassName(propValue) {
+  if (!propValue.constructor || !propValue.constructor.name) {
+    return ANONYMOUS;
+  }
+  return propValue.constructor.name;
+}
+
+module.exports = ReactPropTypes;
+},{"131":131,"154":154,"171":171,"61":61,"82":82,"85":85}],85:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactPropTypesSecret
+ */
+
+'use strict';
+
+var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
+
+module.exports = ReactPropTypesSecret;
+},{}],86:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactPureComponent
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactComponent = _dereq_(32);
+var ReactNoopUpdateQueue = _dereq_(80);
+
+var emptyObject = _dereq_(155);
+
+/**
+ * Base class helpers for the updating state of a component.
+ */
+function ReactPureComponent(props, context, updater) {
+  // Duplicated from ReactComponent.
+  this.props = props;
+  this.context = context;
+  this.refs = emptyObject;
+  // We initialize the default updater but the real one gets injected by the
+  // renderer.
+  this.updater = updater || ReactNoopUpdateQueue;
+}
+
+function ComponentDummy() {}
+ComponentDummy.prototype = ReactComponent.prototype;
+ReactPureComponent.prototype = new ComponentDummy();
+ReactPureComponent.prototype.constructor = ReactPureComponent;
+// Avoid an extra prototype jump for these methods.
+_assign(ReactPureComponent.prototype, ReactComponent.prototype);
+ReactPureComponent.prototype.isPureReactComponent = true;
+
+module.exports = ReactPureComponent;
+},{"155":155,"172":172,"32":32,"80":80}],87:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactReconcileTransaction
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var CallbackQueue = _dereq_(5);
+var PooledClass = _dereq_(25);
+var ReactBrowserEventEmitter = _dereq_(27);
+var ReactInputSelection = _dereq_(71);
+var ReactInstrumentation = _dereq_(73);
+var Transaction = _dereq_(114);
+var ReactUpdateQueue = _dereq_(95);
+
+/**
+ * Ensures that, when possible, the selection range (currently selected text
+ * input) is not disturbed by performing the transaction.
+ */
+var SELECTION_RESTORATION = {
+  /**
+   * @return {Selection} Selection information.
+   */
+  initialize: ReactInputSelection.getSelectionInformation,
+  /**
+   * @param {Selection} sel Selection information returned from `initialize`.
+   */
+  close: ReactInputSelection.restoreSelection
+};
+
+/**
+ * Suppresses events (blur/focus) that could be inadvertently dispatched due to
+ * high level DOM manipulations (like temporarily removing a text input from the
+ * DOM).
+ */
+var EVENT_SUPPRESSION = {
+  /**
+   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
+   * the reconciliation.
+   */
+  initialize: function () {
+    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
+    ReactBrowserEventEmitter.setEnabled(false);
+    return currentlyEnabled;
+  },
+
+  /**
+   * @param {boolean} previouslyEnabled Enabled status of
+   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`
+   *   restores the previous value.
+   */
+  close: function (previouslyEnabled) {
+    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
+  }
+};
+
+/**
+ * Provides a queue for collecting `componentDidMount` and
+ * `componentDidUpdate` callbacks during the transaction.
+ */
+var ON_DOM_READY_QUEUEING = {
+  /**
+   * Initializes the internal `onDOMReady` queue.
+   */
+  initialize: function () {
+    this.reactMountReady.reset();
+  },
+
+  /**
+   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
+   */
+  close: function () {
+    this.reactMountReady.notifyAll();
+  }
+};
+
+/**
+ * Executed within the scope of the `Transaction` instance. Consider these as
+ * being member methods, but with an implied ordering while being isolated from
+ * each other.
+ */
+var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];
+
+if ("development" !== 'production') {
+  TRANSACTION_WRAPPERS.push({
+    initialize: ReactInstrumentation.debugTool.onBeginFlush,
+    close: ReactInstrumentation.debugTool.onEndFlush
+  });
+}
+
+/**
+ * Currently:
+ * - The order that these are listed in the transaction is critical:
+ * - Suppresses events.
+ * - Restores selection range.
+ *
+ * Future:
+ * - Restore document/overflow scroll positions that were unintentionally
+ *   modified via DOM insertions above the top viewport boundary.
+ * - Implement/integrate with customized constraint based layout system and keep
+ *   track of which dimensions must be remeasured.
+ *
+ * @class ReactReconcileTransaction
+ */
+function ReactReconcileTransaction(useCreateElement) {
+  this.reinitializeTransaction();
+  // Only server-side rendering really needs this option (see
+  // `ReactServerRendering`), but server-side uses
+  // `ReactServerRenderingTransaction` instead. This option is here so that it's
+  // accessible and defaults to false when `ReactDOMComponent` and
+  // `ReactDOMTextComponent` checks it in `mountComponent`.`
+  this.renderToStaticMarkup = false;
+  this.reactMountReady = CallbackQueue.getPooled(null);
+  this.useCreateElement = useCreateElement;
+}
+
+var Mixin = {
+  /**
+   * @see Transaction
+   * @abstract
+   * @final
+   * @return {array<object>} List of operation wrap procedures.
+   *   TODO: convert to array<TransactionWrapper>
+   */
+  getTransactionWrappers: function () {
+    return TRANSACTION_WRAPPERS;
+  },
+
+  /**
+   * @return {object} The queue to collect `onDOMReady` callbacks with.
+   */
+  getReactMountReady: function () {
+    return this.reactMountReady;
+  },
+
+  /**
+   * @return {object} The queue to collect React async events.
+   */
+  getUpdateQueue: function () {
+    return ReactUpdateQueue;
+  },
+
+  /**
+   * Save current transaction state -- if the return value from this method is
+   * passed to `rollback`, the transaction will be reset to that state.
+   */
+  checkpoint: function () {
+    // reactMountReady is the our only stateful wrapper
+    return this.reactMountReady.checkpoint();
+  },
+
+  rollback: function (checkpoint) {
+    this.reactMountReady.rollback(checkpoint);
+  },
+
+  /**
+   * `PooledClass` looks for this, and will invoke this before allowing this
+   * instance to be reused.
+   */
+  destructor: function () {
+    CallbackQueue.release(this.reactMountReady);
+    this.reactMountReady = null;
+  }
+};
+
+_assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
+
+PooledClass.addPoolingTo(ReactReconcileTransaction);
+
+module.exports = ReactReconcileTransaction;
+},{"114":114,"172":172,"25":25,"27":27,"5":5,"71":71,"73":73,"95":95}],88:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactReconciler
+ */
+
+'use strict';
+
+var ReactRef = _dereq_(89);
+var ReactInstrumentation = _dereq_(73);
+
+var warning = _dereq_(171);
+
+/**
+ * Helper to call ReactRef.attachRefs with this composite component, split out
+ * to avoid allocations in the transaction mount-ready queue.
+ */
+function attachRefs() {
+  ReactRef.attachRefs(this, this._currentElement);
+}
+
+var ReactReconciler = {
+
+  /**
+   * Initializes the component, renders markup, and registers event listeners.
+   *
+   * @param {ReactComponent} internalInstance
+   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+   * @param {?object} the containing host component instance
+   * @param {?object} info about the host container
+   * @return {?string} Rendered markup to be inserted into the DOM.
+   * @final
+   * @internal
+   */
+  mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots
+  ) {
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);
+      }
+    }
+    var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);
+    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
+      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
+    }
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);
+      }
+    }
+    return markup;
+  },
+
+  /**
+   * Returns a value that can be passed to
+   * ReactComponentEnvironment.replaceNodeWithMarkup.
+   */
+  getHostNode: function (internalInstance) {
+    return internalInstance.getHostNode();
+  },
+
+  /**
+   * Releases any resources allocated by `mountComponent`.
+   *
+   * @final
+   * @internal
+   */
+  unmountComponent: function (internalInstance, safely) {
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);
+      }
+    }
+    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
+    internalInstance.unmountComponent(safely);
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);
+      }
+    }
+  },
+
+  /**
+   * Update a component using a new element.
+   *
+   * @param {ReactComponent} internalInstance
+   * @param {ReactElement} nextElement
+   * @param {ReactReconcileTransaction} transaction
+   * @param {object} context
+   * @internal
+   */
+  receiveComponent: function (internalInstance, nextElement, transaction, context) {
+    var prevElement = internalInstance._currentElement;
+
+    if (nextElement === prevElement && context === internalInstance._context) {
+      // Since elements are immutable after the owner is rendered,
+      // we can do a cheap identity compare here to determine if this is a
+      // superfluous reconcile. It's possible for state to be mutable but such
+      // change should trigger an update of the owner which would recreate
+      // the element. We explicitly check for the existence of an owner since
+      // it's possible for an element created outside a composite to be
+      // deeply mutated and reused.
+
+      // TODO: Bailing out early is just a perf optimization right?
+      // TODO: Removing the return statement should affect correctness?
+      return;
+    }
+
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);
+      }
+    }
+
+    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
+
+    if (refsChanged) {
+      ReactRef.detachRefs(internalInstance, prevElement);
+    }
+
+    internalInstance.receiveComponent(nextElement, transaction, context);
+
+    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {
+      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
+    }
+
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
+      }
+    }
+  },
+
+  /**
+   * Flush any dirty changes in a component.
+   *
+   * @param {ReactComponent} internalInstance
+   * @param {ReactReconcileTransaction} transaction
+   * @internal
+   */
+  performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {
+    if (internalInstance._updateBatchNumber !== updateBatchNumber) {
+      // The component's enqueued batch number should always be the current
+      // batch or the following one.
+      "development" !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;
+      return;
+    }
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);
+      }
+    }
+    internalInstance.performUpdateIfNecessary(transaction);
+    if ("development" !== 'production') {
+      if (internalInstance._debugID !== 0) {
+        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
+      }
+    }
+  }
+
+};
+
+module.exports = ReactReconciler;
+},{"171":171,"73":73,"89":89}],89:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactRef
+ */
+
+'use strict';
+
+var ReactOwner = _dereq_(81);
+
+var ReactRef = {};
+
+function attachRef(ref, component, owner) {
+  if (typeof ref === 'function') {
+    ref(component.getPublicInstance());
+  } else {
+    // Legacy ref
+    ReactOwner.addComponentAsRefTo(component, ref, owner);
+  }
+}
+
+function detachRef(ref, component, owner) {
+  if (typeof ref === 'function') {
+    ref(null);
+  } else {
+    // Legacy ref
+    ReactOwner.removeComponentAsRefFrom(component, ref, owner);
+  }
+}
+
+ReactRef.attachRefs = function (instance, element) {
+  if (element === null || element === false) {
+    return;
+  }
+  var ref = element.ref;
+  if (ref != null) {
+    attachRef(ref, instance, element._owner);
+  }
+};
+
+ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
+  // If either the owner or a `ref` has changed, make sure the newest owner
+  // has stored a reference to `this`, and the previous owner (if different)
+  // has forgotten the reference to `this`. We use the element instead
+  // of the public this.props because the post processing cannot determine
+  // a ref. The ref conceptually lives on the element.
+
+  // TODO: Should this even be possible? The owner cannot change because
+  // it's forbidden by shouldUpdateReactComponent. The ref can change
+  // if you swap the keys of but not the refs. Reconsider where this check
+  // is made. It probably belongs where the key checking and
+  // instantiateReactComponent is done.
+
+  var prevEmpty = prevElement === null || prevElement === false;
+  var nextEmpty = nextElement === null || nextElement === false;
+
+  return (
+    // This has a few false positives w/r/t empty components.
+    prevEmpty || nextEmpty || nextElement.ref !== prevElement.ref ||
+    // If owner changes but we have an unchanged function ref, don't update refs
+    typeof nextElement.ref === 'string' && nextElement._owner !== prevElement._owner
+  );
+};
+
+ReactRef.detachRefs = function (instance, element) {
+  if (element === null || element === false) {
+    return;
+  }
+  var ref = element.ref;
+  if (ref != null) {
+    detachRef(ref, instance, element._owner);
+  }
+};
+
+module.exports = ReactRef;
+},{"81":81}],90:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactServerBatchingStrategy
+ */
+
+'use strict';
+
+var ReactServerBatchingStrategy = {
+  isBatchingUpdates: false,
+  batchedUpdates: function (callback) {
+    // Don't do anything here. During the server rendering we don't want to
+    // schedule any updates. We will simply ignore them.
+  }
+};
+
+module.exports = ReactServerBatchingStrategy;
+},{}],91:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactServerRendering
+ */
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactDOMContainerInfo = _dereq_(43);
+var ReactDefaultBatchingStrategy = _dereq_(59);
+var ReactElement = _dereq_(61);
+var ReactInstrumentation = _dereq_(73);
+var ReactMarkupChecksum = _dereq_(75);
+var ReactReconciler = _dereq_(88);
+var ReactServerBatchingStrategy = _dereq_(90);
+var ReactServerRenderingTransaction = _dereq_(92);
+var ReactUpdates = _dereq_(96);
+
+var emptyObject = _dereq_(155);
+var instantiateReactComponent = _dereq_(135);
+var invariant = _dereq_(162);
+
+var pendingTransactions = 0;
+
+/**
+ * @param {ReactElement} element
+ * @return {string} the HTML markup
+ */
+function renderToStringImpl(element, makeStaticMarkup) {
+  var transaction;
+  try {
+    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);
+
+    transaction = ReactServerRenderingTransaction.getPooled(makeStaticMarkup);
+
+    pendingTransactions++;
+
+    return transaction.perform(function () {
+      var componentInstance = instantiateReactComponent(element, true);
+      var markup = ReactReconciler.mountComponent(componentInstance, transaction, null, ReactDOMContainerInfo(), emptyObject, 0 /* parentDebugID */
+      );
+      if ("development" !== 'production') {
+        ReactInstrumentation.debugTool.onUnmountComponent(componentInstance._debugID);
+      }
+      if (!makeStaticMarkup) {
+        markup = ReactMarkupChecksum.addChecksumToMarkup(markup);
+      }
+      return markup;
+    }, null);
+  } finally {
+    pendingTransactions--;
+    ReactServerRenderingTransaction.release(transaction);
+    // Revert to the DOM batching strategy since these two renderers
+    // currently share these stateful modules.
+    if (!pendingTransactions) {
+      ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
+    }
+  }
+}
+
+/**
+ * Render a ReactElement to its initial HTML. This should only be used on the
+ * server.
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdomserver.rendertostring
+ */
+function renderToString(element) {
+  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : _prodInvariant('46') : void 0;
+  return renderToStringImpl(element, false);
+}
+
+/**
+ * Similar to renderToString, except this doesn't create extra DOM attributes
+ * such as data-react-id that React uses internally.
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdomserver.rendertostaticmarkup
+ */
+function renderToStaticMarkup(element) {
+  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : _prodInvariant('47') : void 0;
+  return renderToStringImpl(element, true);
+}
+
+module.exports = {
+  renderToString: renderToString,
+  renderToStaticMarkup: renderToStaticMarkup
+};
+},{"135":135,"140":140,"155":155,"162":162,"43":43,"59":59,"61":61,"73":73,"75":75,"88":88,"90":90,"92":92,"96":96}],92:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactServerRenderingTransaction
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var PooledClass = _dereq_(25);
+var Transaction = _dereq_(114);
+var ReactInstrumentation = _dereq_(73);
+var ReactServerUpdateQueue = _dereq_(93);
+
+/**
+ * Executed within the scope of the `Transaction` instance. Consider these as
+ * being member methods, but with an implied ordering while being isolated from
+ * each other.
+ */
+var TRANSACTION_WRAPPERS = [];
+
+if ("development" !== 'production') {
+  TRANSACTION_WRAPPERS.push({
+    initialize: ReactInstrumentation.debugTool.onBeginFlush,
+    close: ReactInstrumentation.debugTool.onEndFlush
+  });
+}
+
+var noopCallbackQueue = {
+  enqueue: function () {}
+};
+
+/**
+ * @class ReactServerRenderingTransaction
+ * @param {boolean} renderToStaticMarkup
+ */
+function ReactServerRenderingTransaction(renderToStaticMarkup) {
+  this.reinitializeTransaction();
+  this.renderToStaticMarkup = renderToStaticMarkup;
+  this.useCreateElement = false;
+  this.updateQueue = new ReactServerUpdateQueue(this);
+}
+
+var Mixin = {
+  /**
+   * @see Transaction
+   * @abstract
+   * @final
+   * @return {array} Empty list of operation wrap procedures.
+   */
+  getTransactionWrappers: function () {
+    return TRANSACTION_WRAPPERS;
+  },
+
+  /**
+   * @return {object} The queue to collect `onDOMReady` callbacks with.
+   */
+  getReactMountReady: function () {
+    return noopCallbackQueue;
+  },
+
+  /**
+   * @return {object} The queue to collect React async events.
+   */
+  getUpdateQueue: function () {
+    return this.updateQueue;
+  },
+
+  /**
+   * `PooledClass` looks for this, and will invoke this before allowing this
+   * instance to be reused.
+   */
+  destructor: function () {},
+
+  checkpoint: function () {},
+
+  rollback: function () {}
+};
+
+_assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
+
+PooledClass.addPoolingTo(ReactServerRenderingTransaction);
+
+module.exports = ReactServerRenderingTransaction;
+},{"114":114,"172":172,"25":25,"73":73,"93":93}],93:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactServerUpdateQueue
+ * 
+ */
+
+'use strict';
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var ReactUpdateQueue = _dereq_(95);
+var Transaction = _dereq_(114);
+var warning = _dereq_(171);
+
+function warnNoop(publicInstance, callerName) {
+  if ("development" !== 'production') {
+    var constructor = publicInstance.constructor;
+    "development" !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
+  }
+}
+
+/**
+ * This is the update queue used for server rendering.
+ * It delegates to ReactUpdateQueue while server rendering is in progress and
+ * switches to ReactNoopUpdateQueue after the transaction has completed.
+ * @class ReactServerUpdateQueue
+ * @param {Transaction} transaction
+ */
+
+var ReactServerUpdateQueue = function () {
+  /* :: transaction: Transaction; */
+
+  function ReactServerUpdateQueue(transaction) {
+    _classCallCheck(this, ReactServerUpdateQueue);
+
+    this.transaction = transaction;
+  }
+
+  /**
+   * Checks whether or not this composite component is mounted.
+   * @param {ReactClass} publicInstance The instance we want to test.
+   * @return {boolean} True if mounted, false otherwise.
+   * @protected
+   * @final
+   */
+
+
+  ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {
+    return false;
+  };
+
+  /**
+   * Enqueue a callback that will be executed after all the pending updates
+   * have processed.
+   *
+   * @param {ReactClass} publicInstance The instance to use as `this` context.
+   * @param {?function} callback Called after state is updated.
+   * @internal
+   */
+
+
+  ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {
+    if (this.transaction.isInTransaction()) {
+      ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);
+    }
+  };
+
+  /**
+   * Forces an update. This should only be invoked when it is known with
+   * certainty that we are **not** in a DOM transaction.
+   *
+   * You may want to call this when you know that some deeper aspect of the
+   * component's state has changed but `setState` was not called.
+   *
+   * This will not invoke `shouldComponentUpdate`, but it will invoke
+   * `componentWillUpdate` and `componentDidUpdate`.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @internal
+   */
+
+
+  ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {
+    if (this.transaction.isInTransaction()) {
+      ReactUpdateQueue.enqueueForceUpdate(publicInstance);
+    } else {
+      warnNoop(publicInstance, 'forceUpdate');
+    }
+  };
+
+  /**
+   * Replaces all of the state. Always use this or `setState` to mutate state.
+   * You should treat `this.state` as immutable.
+   *
+   * There is no guarantee that `this.state` will be immediately updated, so
+   * accessing `this.state` after calling this method may return the old value.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object|function} completeState Next state.
+   * @internal
+   */
+
+
+  ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {
+    if (this.transaction.isInTransaction()) {
+      ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);
+    } else {
+      warnNoop(publicInstance, 'replaceState');
+    }
+  };
+
+  /**
+   * Sets a subset of the state. This only exists because _pendingState is
+   * internal. This provides a merging strategy that is not available to deep
+   * properties which is confusing. TODO: Expose pendingState or don't use it
+   * during the merge.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object|function} partialState Next partial state to be merged with state.
+   * @internal
+   */
+
+
+  ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {
+    if (this.transaction.isInTransaction()) {
+      ReactUpdateQueue.enqueueSetState(publicInstance, partialState);
+    } else {
+      warnNoop(publicInstance, 'setState');
+    }
+  };
+
+  return ReactServerUpdateQueue;
+}();
+
+module.exports = ReactServerUpdateQueue;
+},{"114":114,"171":171,"95":95}],94:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactUMDEntry
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var ReactDOM = _dereq_(38);
+var ReactDOMServer = _dereq_(53);
+var React = _dereq_(26);
+
+// `version` will be added here by ReactIsomorphic.
+var ReactUMDEntry = _assign({
+  __SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactDOM,
+  __SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactDOMServer
+}, React);
+
+module.exports = ReactUMDEntry;
+},{"172":172,"26":26,"38":38,"53":53}],95:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactUpdateQueue
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactCurrentOwner = _dereq_(37);
+var ReactInstanceMap = _dereq_(72);
+var ReactInstrumentation = _dereq_(73);
+var ReactUpdates = _dereq_(96);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+function enqueueUpdate(internalInstance) {
+  ReactUpdates.enqueueUpdate(internalInstance);
+}
+
+function formatUnexpectedArgument(arg) {
+  var type = typeof arg;
+  if (type !== 'object') {
+    return type;
+  }
+  var displayName = arg.constructor && arg.constructor.name || type;
+  var keys = Object.keys(arg);
+  if (keys.length > 0 && keys.length < 20) {
+    return displayName + ' (keys: ' + keys.join(', ') + ')';
+  }
+  return displayName;
+}
+
+function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
+  var internalInstance = ReactInstanceMap.get(publicInstance);
+  if (!internalInstance) {
+    if ("development" !== 'production') {
+      var ctor = publicInstance.constructor;
+      // Only warn when we have a callerName. Otherwise we should be silent.
+      // We're probably calling from enqueueCallback. We don't want to warn
+      // there because we already warned for the corresponding lifecycle method.
+      "development" !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;
+    }
+    return null;
+  }
+
+  if ("development" !== 'production') {
+    "development" !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;
+  }
+
+  return internalInstance;
+}
+
+/**
+ * ReactUpdateQueue allows for state updates to be scheduled into a later
+ * reconciliation step.
+ */
+var ReactUpdateQueue = {
+
+  /**
+   * Checks whether or not this composite component is mounted.
+   * @param {ReactClass} publicInstance The instance we want to test.
+   * @return {boolean} True if mounted, false otherwise.
+   * @protected
+   * @final
+   */
+  isMounted: function (publicInstance) {
+    if ("development" !== 'production') {
+      var owner = ReactCurrentOwner.current;
+      if (owner !== null) {
+        "development" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
+        owner._warnedAboutRefsInRender = true;
+      }
+    }
+    var internalInstance = ReactInstanceMap.get(publicInstance);
+    if (internalInstance) {
+      // During componentWillMount and render this will still be null but after
+      // that will always render to something. At least for now. So we can use
+      // this hack.
+      return !!internalInstance._renderedComponent;
+    } else {
+      return false;
+    }
+  },
+
+  /**
+   * Enqueue a callback that will be executed after all the pending updates
+   * have processed.
+   *
+   * @param {ReactClass} publicInstance The instance to use as `this` context.
+   * @param {?function} callback Called after state is updated.
+   * @param {string} callerName Name of the calling function in the public API.
+   * @internal
+   */
+  enqueueCallback: function (publicInstance, callback, callerName) {
+    ReactUpdateQueue.validateCallback(callback, callerName);
+    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
+
+    // Previously we would throw an error if we didn't have an internal
+    // instance. Since we want to make it a no-op instead, we mirror the same
+    // behavior we have in other enqueue* methods.
+    // We also need to ignore callbacks in componentWillMount. See
+    // enqueueUpdates.
+    if (!internalInstance) {
+      return null;
+    }
+
+    if (internalInstance._pendingCallbacks) {
+      internalInstance._pendingCallbacks.push(callback);
+    } else {
+      internalInstance._pendingCallbacks = [callback];
+    }
+    // TODO: The callback here is ignored when setState is called from
+    // componentWillMount. Either fix it or disallow doing so completely in
+    // favor of getInitialState. Alternatively, we can disallow
+    // componentWillMount during server-side rendering.
+    enqueueUpdate(internalInstance);
+  },
+
+  enqueueCallbackInternal: function (internalInstance, callback) {
+    if (internalInstance._pendingCallbacks) {
+      internalInstance._pendingCallbacks.push(callback);
+    } else {
+      internalInstance._pendingCallbacks = [callback];
+    }
+    enqueueUpdate(internalInstance);
+  },
+
+  /**
+   * Forces an update. This should only be invoked when it is known with
+   * certainty that we are **not** in a DOM transaction.
+   *
+   * You may want to call this when you know that some deeper aspect of the
+   * component's state has changed but `setState` was not called.
+   *
+   * This will not invoke `shouldComponentUpdate`, but it will invoke
+   * `componentWillUpdate` and `componentDidUpdate`.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @internal
+   */
+  enqueueForceUpdate: function (publicInstance) {
+    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');
+
+    if (!internalInstance) {
+      return;
+    }
+
+    internalInstance._pendingForceUpdate = true;
+
+    enqueueUpdate(internalInstance);
+  },
+
+  /**
+   * Replaces all of the state. Always use this or `setState` to mutate state.
+   * You should treat `this.state` as immutable.
+   *
+   * There is no guarantee that `this.state` will be immediately updated, so
+   * accessing `this.state` after calling this method may return the old value.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object} completeState Next state.
+   * @internal
+   */
+  enqueueReplaceState: function (publicInstance, completeState) {
+    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');
+
+    if (!internalInstance) {
+      return;
+    }
+
+    internalInstance._pendingStateQueue = [completeState];
+    internalInstance._pendingReplaceState = true;
+
+    enqueueUpdate(internalInstance);
+  },
+
+  /**
+   * Sets a subset of the state. This only exists because _pendingState is
+   * internal. This provides a merging strategy that is not available to deep
+   * properties which is confusing. TODO: Expose pendingState or don't use it
+   * during the merge.
+   *
+   * @param {ReactClass} publicInstance The instance that should rerender.
+   * @param {object} partialState Next partial state to be merged with state.
+   * @internal
+   */
+  enqueueSetState: function (publicInstance, partialState) {
+    if ("development" !== 'production') {
+      ReactInstrumentation.debugTool.onSetState();
+      "development" !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;
+    }
+
+    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');
+
+    if (!internalInstance) {
+      return;
+    }
+
+    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
+    queue.push(partialState);
+
+    enqueueUpdate(internalInstance);
+  },
+
+  enqueueElementInternal: function (internalInstance, nextElement, nextContext) {
+    internalInstance._pendingElement = nextElement;
+    // TODO: introduce _pendingContext instead of setting it directly.
+    internalInstance._context = nextContext;
+    enqueueUpdate(internalInstance);
+  },
+
+  validateCallback: function (callback, callerName) {
+    !(!callback || typeof callback === 'function') ? "development" !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;
+  }
+
+};
+
+module.exports = ReactUpdateQueue;
+},{"140":140,"162":162,"171":171,"37":37,"72":72,"73":73,"96":96}],96:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactUpdates
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var CallbackQueue = _dereq_(5);
+var PooledClass = _dereq_(25);
+var ReactFeatureFlags = _dereq_(67);
+var ReactReconciler = _dereq_(88);
+var Transaction = _dereq_(114);
+
+var invariant = _dereq_(162);
+
+var dirtyComponents = [];
+var updateBatchNumber = 0;
+var asapCallbackQueue = CallbackQueue.getPooled();
+var asapEnqueued = false;
+
+var batchingStrategy = null;
+
+function ensureInjected() {
+  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? "development" !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;
+}
+
+var NESTED_UPDATES = {
+  initialize: function () {
+    this.dirtyComponentsLength = dirtyComponents.length;
+  },
+  close: function () {
+    if (this.dirtyComponentsLength !== dirtyComponents.length) {
+      // Additional updates were enqueued by componentDidUpdate handlers or
+      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
+      // these new updates so that if A's componentDidUpdate calls setState on
+      // B, B will update before the callback A's updater provided when calling
+      // setState.
+      dirtyComponents.splice(0, this.dirtyComponentsLength);
+      flushBatchedUpdates();
+    } else {
+      dirtyComponents.length = 0;
+    }
+  }
+};
+
+var UPDATE_QUEUEING = {
+  initialize: function () {
+    this.callbackQueue.reset();
+  },
+  close: function () {
+    this.callbackQueue.notifyAll();
+  }
+};
+
+var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];
+
+function ReactUpdatesFlushTransaction() {
+  this.reinitializeTransaction();
+  this.dirtyComponentsLength = null;
+  this.callbackQueue = CallbackQueue.getPooled();
+  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(
+  /* useCreateElement */true);
+}
+
+_assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
+  getTransactionWrappers: function () {
+    return TRANSACTION_WRAPPERS;
+  },
+
+  destructor: function () {
+    this.dirtyComponentsLength = null;
+    CallbackQueue.release(this.callbackQueue);
+    this.callbackQueue = null;
+    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
+    this.reconcileTransaction = null;
+  },
+
+  perform: function (method, scope, a) {
+    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
+    // with this transaction's wrappers around it.
+    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
+  }
+});
+
+PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
+
+function batchedUpdates(callback, a, b, c, d, e) {
+  ensureInjected();
+  batchingStrategy.batchedUpdates(callback, a, b, c, d, e);
+}
+
+/**
+ * Array comparator for ReactComponents by mount ordering.
+ *
+ * @param {ReactComponent} c1 first component you're comparing
+ * @param {ReactComponent} c2 second component you're comparing
+ * @return {number} Return value usable by Array.prototype.sort().
+ */
+function mountOrderComparator(c1, c2) {
+  return c1._mountOrder - c2._mountOrder;
+}
+
+function runBatchedUpdates(transaction) {
+  var len = transaction.dirtyComponentsLength;
+  !(len === dirtyComponents.length) ? "development" !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;
+
+  // Since reconciling a component higher in the owner hierarchy usually (not
+  // always -- see shouldComponentUpdate()) will reconcile children, reconcile
+  // them before their children by sorting the array.
+  dirtyComponents.sort(mountOrderComparator);
+
+  // Any updates enqueued while reconciling must be performed after this entire
+  // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and
+  // C, B could update twice in a single batch if C's render enqueues an update
+  // to B (since B would have already updated, we should skip it, and the only
+  // way we can know to do so is by checking the batch counter).
+  updateBatchNumber++;
+
+  for (var i = 0; i < len; i++) {
+    // If a component is unmounted before pending changes apply, it will still
+    // be here, but we assume that it has cleared its _pendingCallbacks and
+    // that performUpdateIfNecessary is a noop.
+    var component = dirtyComponents[i];
+
+    // If performUpdateIfNecessary happens to enqueue any new updates, we
+    // shouldn't execute the callbacks until the next render happens, so
+    // stash the callbacks first
+    var callbacks = component._pendingCallbacks;
+    component._pendingCallbacks = null;
+
+    var markerName;
+    if (ReactFeatureFlags.logTopLevelRenders) {
+      var namedComponent = component;
+      // Duck type TopLevelWrapper. This is probably always true.
+      if (component._currentElement.props === component._renderedComponent._currentElement) {
+        namedComponent = component._renderedComponent;
+      }
+      markerName = 'React update: ' + namedComponent.getName();
+      console.time(markerName);
+    }
+
+    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);
+
+    if (markerName) {
+      console.timeEnd(markerName);
+    }
+
+    if (callbacks) {
+      for (var j = 0; j < callbacks.length; j++) {
+        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
+      }
+    }
+  }
+}
+
+var flushBatchedUpdates = function () {
+  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
+  // array and perform any updates enqueued by mount-ready handlers (i.e.,
+  // componentDidUpdate) but we need to check here too in order to catch
+  // updates enqueued by setState callbacks and asap calls.
+  while (dirtyComponents.length || asapEnqueued) {
+    if (dirtyComponents.length) {
+      var transaction = ReactUpdatesFlushTransaction.getPooled();
+      transaction.perform(runBatchedUpdates, null, transaction);
+      ReactUpdatesFlushTransaction.release(transaction);
+    }
+
+    if (asapEnqueued) {
+      asapEnqueued = false;
+      var queue = asapCallbackQueue;
+      asapCallbackQueue = CallbackQueue.getPooled();
+      queue.notifyAll();
+      CallbackQueue.release(queue);
+    }
+  }
+};
+
+/**
+ * Mark a component as needing a rerender, adding an optional callback to a
+ * list of functions which will be executed once the rerender occurs.
+ */
+function enqueueUpdate(component) {
+  ensureInjected();
+
+  // Various parts of our code (such as ReactCompositeComponent's
+  // _renderValidatedComponent) assume that calls to render aren't nested;
+  // verify that that's the case. (This is called by each top-level update
+  // function, like setState, forceUpdate, etc.; creation and
+  // destruction of top-level components is guarded in ReactMount.)
+
+  if (!batchingStrategy.isBatchingUpdates) {
+    batchingStrategy.batchedUpdates(enqueueUpdate, component);
+    return;
+  }
+
+  dirtyComponents.push(component);
+  if (component._updateBatchNumber == null) {
+    component._updateBatchNumber = updateBatchNumber + 1;
+  }
+}
+
+/**
+ * Enqueue a callback to be run at the end of the current batching cycle. Throws
+ * if no updates are currently being performed.
+ */
+function asap(callback, context) {
+  !batchingStrategy.isBatchingUpdates ? "development" !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;
+  asapCallbackQueue.enqueue(callback, context);
+  asapEnqueued = true;
+}
+
+var ReactUpdatesInjection = {
+  injectReconcileTransaction: function (ReconcileTransaction) {
+    !ReconcileTransaction ? "development" !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;
+    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
+  },
+
+  injectBatchingStrategy: function (_batchingStrategy) {
+    !_batchingStrategy ? "development" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;
+    !(typeof _batchingStrategy.batchedUpdates === 'function') ? "development" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;
+    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? "development" !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;
+    batchingStrategy = _batchingStrategy;
+  }
+};
+
+var ReactUpdates = {
+  /**
+   * React references `ReactReconcileTransaction` using this property in order
+   * to allow dependency injection.
+   *
+   * @internal
+   */
+  ReactReconcileTransaction: null,
+
+  batchedUpdates: batchedUpdates,
+  enqueueUpdate: enqueueUpdate,
+  flushBatchedUpdates: flushBatchedUpdates,
+  injection: ReactUpdatesInjection,
+  asap: asap
+};
+
+module.exports = ReactUpdates;
+},{"114":114,"140":140,"162":162,"172":172,"25":25,"5":5,"67":67,"88":88}],97:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ReactVersion
+ */
+
+'use strict';
+
+module.exports = '15.3.2';
+},{}],98:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SVGDOMPropertyConfig
+ */
+
+'use strict';
+
+var NS = {
+  xlink: 'http://www.w3.org/1999/xlink',
+  xml: 'http://www.w3.org/XML/1998/namespace'
+};
+
+// We use attributes for everything SVG so let's avoid some duplication and run
+// code instead.
+// The following are all specified in the HTML config already so we exclude here.
+// - class (as className)
+// - color
+// - height
+// - id
+// - lang
+// - max
+// - media
+// - method
+// - min
+// - name
+// - style
+// - target
+// - type
+// - width
+var ATTRS = {
+  accentHeight: 'accent-height',
+  accumulate: 0,
+  additive: 0,
+  alignmentBaseline: 'alignment-baseline',
+  allowReorder: 'allowReorder',
+  alphabetic: 0,
+  amplitude: 0,
+  arabicForm: 'arabic-form',
+  ascent: 0,
+  attributeName: 'attributeName',
+  attributeType: 'attributeType',
+  autoReverse: 'autoReverse',
+  azimuth: 0,
+  baseFrequency: 'baseFrequency',
+  baseProfile: 'baseProfile',
+  baselineShift: 'baseline-shift',
+  bbox: 0,
+  begin: 0,
+  bias: 0,
+  by: 0,
+  calcMode: 'calcMode',
+  capHeight: 'cap-height',
+  clip: 0,
+  clipPath: 'clip-path',
+  clipRule: 'clip-rule',
+  clipPathUnits: 'clipPathUnits',
+  colorInterpolation: 'color-interpolation',
+  colorInterpolationFilters: 'color-interpolation-filters',
+  colorProfile: 'color-profile',
+  colorRendering: 'color-rendering',
+  contentScriptType: 'contentScriptType',
+  contentStyleType: 'contentStyleType',
+  cursor: 0,
+  cx: 0,
+  cy: 0,
+  d: 0,
+  decelerate: 0,
+  descent: 0,
+  diffuseConstant: 'diffuseConstant',
+  direction: 0,
+  display: 0,
+  divisor: 0,
+  dominantBaseline: 'dominant-baseline',
+  dur: 0,
+  dx: 0,
+  dy: 0,
+  edgeMode: 'edgeMode',
+  elevation: 0,
+  enableBackground: 'enable-background',
+  end: 0,
+  exponent: 0,
+  externalResourcesRequired: 'externalResourcesRequired',
+  fill: 0,
+  fillOpacity: 'fill-opacity',
+  fillRule: 'fill-rule',
+  filter: 0,
+  filterRes: 'filterRes',
+  filterUnits: 'filterUnits',
+  floodColor: 'flood-color',
+  floodOpacity: 'flood-opacity',
+  focusable: 0,
+  fontFamily: 'font-family',
+  fontSize: 'font-size',
+  fontSizeAdjust: 'font-size-adjust',
+  fontStretch: 'font-stretch',
+  fontStyle: 'font-style',
+  fontVariant: 'font-variant',
+  fontWeight: 'font-weight',
+  format: 0,
+  from: 0,
+  fx: 0,
+  fy: 0,
+  g1: 0,
+  g2: 0,
+  glyphName: 'glyph-name',
+  glyphOrientationHorizontal: 'glyph-orientation-horizontal',
+  glyphOrientationVertical: 'glyph-orientation-vertical',
+  glyphRef: 'glyphRef',
+  gradientTransform: 'gradientTransform',
+  gradientUnits: 'gradientUnits',
+  hanging: 0,
+  horizAdvX: 'horiz-adv-x',
+  horizOriginX: 'horiz-origin-x',
+  ideographic: 0,
+  imageRendering: 'image-rendering',
+  'in': 0,
+  in2: 0,
+  intercept: 0,
+  k: 0,
+  k1: 0,
+  k2: 0,
+  k3: 0,
+  k4: 0,
+  kernelMatrix: 'kernelMatrix',
+  kernelUnitLength: 'kernelUnitLength',
+  kerning: 0,
+  keyPoints: 'keyPoints',
+  keySplines: 'keySplines',
+  keyTimes: 'keyTimes',
+  lengthAdjust: 'lengthAdjust',
+  letterSpacing: 'letter-spacing',
+  lightingColor: 'lighting-color',
+  limitingConeAngle: 'limitingConeAngle',
+  local: 0,
+  markerEnd: 'marker-end',
+  markerMid: 'marker-mid',
+  markerStart: 'marker-start',
+  markerHeight: 'markerHeight',
+  markerUnits: 'markerUnits',
+  markerWidth: 'markerWidth',
+  mask: 0,
+  maskContentUnits: 'maskContentUnits',
+  maskUnits: 'maskUnits',
+  mathematical: 0,
+  mode: 0,
+  numOctaves: 'numOctaves',
+  offset: 0,
+  opacity: 0,
+  operator: 0,
+  order: 0,
+  orient: 0,
+  orientation: 0,
+  origin: 0,
+  overflow: 0,
+  overlinePosition: 'overline-position',
+  overlineThickness: 'overline-thickness',
+  paintOrder: 'paint-order',
+  panose1: 'panose-1',
+  pathLength: 'pathLength',
+  patternContentUnits: 'patternContentUnits',
+  patternTransform: 'patternTransform',
+  patternUnits: 'patternUnits',
+  pointerEvents: 'pointer-events',
+  points: 0,
+  pointsAtX: 'pointsAtX',
+  pointsAtY: 'pointsAtY',
+  pointsAtZ: 'pointsAtZ',
+  preserveAlpha: 'preserveAlpha',
+  preserveAspectRatio: 'preserveAspectRatio',
+  primitiveUnits: 'primitiveUnits',
+  r: 0,
+  radius: 0,
+  refX: 'refX',
+  refY: 'refY',
+  renderingIntent: 'rendering-intent',
+  repeatCount: 'repeatCount',
+  repeatDur: 'repeatDur',
+  requiredExtensions: 'requiredExtensions',
+  requiredFeatures: 'requiredFeatures',
+  restart: 0,
+  result: 0,
+  rotate: 0,
+  rx: 0,
+  ry: 0,
+  scale: 0,
+  seed: 0,
+  shapeRendering: 'shape-rendering',
+  slope: 0,
+  spacing: 0,
+  specularConstant: 'specularConstant',
+  specularExponent: 'specularExponent',
+  speed: 0,
+  spreadMethod: 'spreadMethod',
+  startOffset: 'startOffset',
+  stdDeviation: 'stdDeviation',
+  stemh: 0,
+  stemv: 0,
+  stitchTiles: 'stitchTiles',
+  stopColor: 'stop-color',
+  stopOpacity: 'stop-opacity',
+  strikethroughPosition: 'strikethrough-position',
+  strikethroughThickness: 'strikethrough-thickness',
+  string: 0,
+  stroke: 0,
+  strokeDasharray: 'stroke-dasharray',
+  strokeDashoffset: 'stroke-dashoffset',
+  strokeLinecap: 'stroke-linecap',
+  strokeLinejoin: 'stroke-linejoin',
+  strokeMiterlimit: 'stroke-miterlimit',
+  strokeOpacity: 'stroke-opacity',
+  strokeWidth: 'stroke-width',
+  surfaceScale: 'surfaceScale',
+  systemLanguage: 'systemLanguage',
+  tableValues: 'tableValues',
+  targetX: 'targetX',
+  targetY: 'targetY',
+  textAnchor: 'text-anchor',
+  textDecoration: 'text-decoration',
+  textRendering: 'text-rendering',
+  textLength: 'textLength',
+  to: 0,
+  transform: 0,
+  u1: 0,
+  u2: 0,
+  underlinePosition: 'underline-position',
+  underlineThickness: 'underline-thickness',
+  unicode: 0,
+  unicodeBidi: 'unicode-bidi',
+  unicodeRange: 'unicode-range',
+  unitsPerEm: 'units-per-em',
+  vAlphabetic: 'v-alphabetic',
+  vHanging: 'v-hanging',
+  vIdeographic: 'v-ideographic',
+  vMathematical: 'v-mathematical',
+  values: 0,
+  vectorEffect: 'vector-effect',
+  version: 0,
+  vertAdvY: 'vert-adv-y',
+  vertOriginX: 'vert-origin-x',
+  vertOriginY: 'vert-origin-y',
+  viewBox: 'viewBox',
+  viewTarget: 'viewTarget',
+  visibility: 0,
+  widths: 0,
+  wordSpacing: 'word-spacing',
+  writingMode: 'writing-mode',
+  x: 0,
+  xHeight: 'x-height',
+  x1: 0,
+  x2: 0,
+  xChannelSelector: 'xChannelSelector',
+  xlinkActuate: 'xlink:actuate',
+  xlinkArcrole: 'xlink:arcrole',
+  xlinkHref: 'xlink:href',
+  xlinkRole: 'xlink:role',
+  xlinkShow: 'xlink:show',
+  xlinkTitle: 'xlink:title',
+  xlinkType: 'xlink:type',
+  xmlBase: 'xml:base',
+  xmlns: 0,
+  xmlnsXlink: 'xmlns:xlink',
+  xmlLang: 'xml:lang',
+  xmlSpace: 'xml:space',
+  y: 0,
+  y1: 0,
+  y2: 0,
+  yChannelSelector: 'yChannelSelector',
+  z: 0,
+  zoomAndPan: 'zoomAndPan'
+};
+
+var SVGDOMPropertyConfig = {
+  Properties: {},
+  DOMAttributeNamespaces: {
+    xlinkActuate: NS.xlink,
+    xlinkArcrole: NS.xlink,
+    xlinkHref: NS.xlink,
+    xlinkRole: NS.xlink,
+    xlinkShow: NS.xlink,
+    xlinkTitle: NS.xlink,
+    xlinkType: NS.xlink,
+    xmlBase: NS.xml,
+    xmlLang: NS.xml,
+    xmlSpace: NS.xml
+  },
+  DOMAttributeNames: {}
+};
+
+Object.keys(ATTRS).forEach(function (key) {
+  SVGDOMPropertyConfig.Properties[key] = 0;
+  if (ATTRS[key]) {
+    SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];
+  }
+});
+
+module.exports = SVGDOMPropertyConfig;
+},{}],99:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SelectEventPlugin
+ */
+
+'use strict';
+
+var EventConstants = _dereq_(16);
+var EventPropagators = _dereq_(20);
+var ExecutionEnvironment = _dereq_(148);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactInputSelection = _dereq_(71);
+var SyntheticEvent = _dereq_(105);
+
+var getActiveElement = _dereq_(157);
+var isTextInputElement = _dereq_(137);
+var keyOf = _dereq_(166);
+var shallowEqual = _dereq_(170);
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
+
+var eventTypes = {
+  select: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onSelect: null }),
+      captured: keyOf({ onSelectCapture: null })
+    },
+    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
+  }
+};
+
+var activeElement = null;
+var activeElementInst = null;
+var lastSelection = null;
+var mouseDown = false;
+
+// Track whether a listener exists for this plugin. If none exist, we do
+// not extract events. See #3639.
+var hasListener = false;
+var ON_SELECT_KEY = keyOf({ onSelect: null });
+
+/**
+ * Get an object which is a unique representation of the current selection.
+ *
+ * The return value will not be consistent across nodes or browsers, but
+ * two identical selections on the same node will return identical objects.
+ *
+ * @param {DOMElement} node
+ * @return {object}
+ */
+function getSelection(node) {
+  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
+    return {
+      start: node.selectionStart,
+      end: node.selectionEnd
+    };
+  } else if (window.getSelection) {
+    var selection = window.getSelection();
+    return {
+      anchorNode: selection.anchorNode,
+      anchorOffset: selection.anchorOffset,
+      focusNode: selection.focusNode,
+      focusOffset: selection.focusOffset
+    };
+  } else if (document.selection) {
+    var range = document.selection.createRange();
+    return {
+      parentElement: range.parentElement(),
+      text: range.text,
+      top: range.boundingTop,
+      left: range.boundingLeft
+    };
+  }
+}
+
+/**
+ * Poll selection to see whether it's changed.
+ *
+ * @param {object} nativeEvent
+ * @return {?SyntheticEvent}
+ */
+function constructSelectEvent(nativeEvent, nativeEventTarget) {
+  // Ensure we have the right element, and that the user is not dragging a
+  // selection (this matches native `select` event behavior). In HTML5, select
+  // fires only on input and textarea thus if there's no focused element we
+  // won't dispatch.
+  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
+    return null;
+  }
+
+  // Only fire when selection has actually changed.
+  var currentSelection = getSelection(activeElement);
+  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
+    lastSelection = currentSelection;
+
+    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);
+
+    syntheticEvent.type = 'select';
+    syntheticEvent.target = activeElement;
+
+    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
+
+    return syntheticEvent;
+  }
+
+  return null;
+}
+
+/**
+ * This plugin creates an `onSelect` event that normalizes select events
+ * across form elements.
+ *
+ * Supported elements are:
+ * - input (see `isTextInputElement`)
+ * - textarea
+ * - contentEditable
+ *
+ * This differs from native browser implementations in the following ways:
+ * - Fires on contentEditable fields as well as inputs.
+ * - Fires for collapsed selection.
+ * - Fires after user input.
+ */
+var SelectEventPlugin = {
+
+  eventTypes: eventTypes,
+
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    if (!hasListener) {
+      return null;
+    }
+
+    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
+
+    switch (topLevelType) {
+      // Track the input node that has focus.
+      case topLevelTypes.topFocus:
+        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
+          activeElement = targetNode;
+          activeElementInst = targetInst;
+          lastSelection = null;
+        }
+        break;
+      case topLevelTypes.topBlur:
+        activeElement = null;
+        activeElementInst = null;
+        lastSelection = null;
+        break;
+
+      // Don't fire the event while the user is dragging. This matches the
+      // semantics of the native select event.
+      case topLevelTypes.topMouseDown:
+        mouseDown = true;
+        break;
+      case topLevelTypes.topContextMenu:
+      case topLevelTypes.topMouseUp:
+        mouseDown = false;
+        return constructSelectEvent(nativeEvent, nativeEventTarget);
+
+      // Chrome and IE fire non-standard event when selection is changed (and
+      // sometimes when it hasn't). IE's event fires out of order with respect
+      // to key and input events on deletion, so we discard it.
+      //
+      // Firefox doesn't support selectionchange, so check selection status
+      // after each key entry. The selection changes after keydown and before
+      // keyup, but we check on keydown as well in the case of holding down a
+      // key, when multiple keydown events are fired but only one keyup is.
+      // This is also our approach for IE handling, for the reason above.
+      case topLevelTypes.topSelectionChange:
+        if (skipSelectionChangeEvent) {
+          break;
+        }
+      // falls through
+      case topLevelTypes.topKeyDown:
+      case topLevelTypes.topKeyUp:
+        return constructSelectEvent(nativeEvent, nativeEventTarget);
+    }
+
+    return null;
+  },
+
+  didPutListener: function (inst, registrationName, listener) {
+    if (registrationName === ON_SELECT_KEY) {
+      hasListener = true;
+    }
+  }
+};
+
+module.exports = SelectEventPlugin;
+},{"105":105,"137":137,"148":148,"157":157,"16":16,"166":166,"170":170,"20":20,"42":42,"71":71}],100:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SimpleEventPlugin
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var EventConstants = _dereq_(16);
+var EventListener = _dereq_(147);
+var EventPropagators = _dereq_(20);
+var ReactDOMComponentTree = _dereq_(42);
+var SyntheticAnimationEvent = _dereq_(101);
+var SyntheticClipboardEvent = _dereq_(102);
+var SyntheticEvent = _dereq_(105);
+var SyntheticFocusEvent = _dereq_(106);
+var SyntheticKeyboardEvent = _dereq_(108);
+var SyntheticMouseEvent = _dereq_(109);
+var SyntheticDragEvent = _dereq_(104);
+var SyntheticTouchEvent = _dereq_(110);
+var SyntheticTransitionEvent = _dereq_(111);
+var SyntheticUIEvent = _dereq_(112);
+var SyntheticWheelEvent = _dereq_(113);
+
+var emptyFunction = _dereq_(154);
+var getEventCharCode = _dereq_(126);
+var invariant = _dereq_(162);
+var keyOf = _dereq_(166);
+
+var topLevelTypes = EventConstants.topLevelTypes;
+
+var eventTypes = {
+  abort: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onAbort: true }),
+      captured: keyOf({ onAbortCapture: true })
+    }
+  },
+  animationEnd: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onAnimationEnd: true }),
+      captured: keyOf({ onAnimationEndCapture: true })
+    }
+  },
+  animationIteration: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onAnimationIteration: true }),
+      captured: keyOf({ onAnimationIterationCapture: true })
+    }
+  },
+  animationStart: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onAnimationStart: true }),
+      captured: keyOf({ onAnimationStartCapture: true })
+    }
+  },
+  blur: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onBlur: true }),
+      captured: keyOf({ onBlurCapture: true })
+    }
+  },
+  canPlay: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCanPlay: true }),
+      captured: keyOf({ onCanPlayCapture: true })
+    }
+  },
+  canPlayThrough: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCanPlayThrough: true }),
+      captured: keyOf({ onCanPlayThroughCapture: true })
+    }
+  },
+  click: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onClick: true }),
+      captured: keyOf({ onClickCapture: true })
+    }
+  },
+  contextMenu: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onContextMenu: true }),
+      captured: keyOf({ onContextMenuCapture: true })
+    }
+  },
+  copy: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCopy: true }),
+      captured: keyOf({ onCopyCapture: true })
+    }
+  },
+  cut: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onCut: true }),
+      captured: keyOf({ onCutCapture: true })
+    }
+  },
+  doubleClick: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDoubleClick: true }),
+      captured: keyOf({ onDoubleClickCapture: true })
+    }
+  },
+  drag: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDrag: true }),
+      captured: keyOf({ onDragCapture: true })
+    }
+  },
+  dragEnd: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragEnd: true }),
+      captured: keyOf({ onDragEndCapture: true })
+    }
+  },
+  dragEnter: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragEnter: true }),
+      captured: keyOf({ onDragEnterCapture: true })
+    }
+  },
+  dragExit: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragExit: true }),
+      captured: keyOf({ onDragExitCapture: true })
+    }
+  },
+  dragLeave: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragLeave: true }),
+      captured: keyOf({ onDragLeaveCapture: true })
+    }
+  },
+  dragOver: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragOver: true }),
+      captured: keyOf({ onDragOverCapture: true })
+    }
+  },
+  dragStart: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDragStart: true }),
+      captured: keyOf({ onDragStartCapture: true })
+    }
+  },
+  drop: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDrop: true }),
+      captured: keyOf({ onDropCapture: true })
+    }
+  },
+  durationChange: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onDurationChange: true }),
+      captured: keyOf({ onDurationChangeCapture: true })
+    }
+  },
+  emptied: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onEmptied: true }),
+      captured: keyOf({ onEmptiedCapture: true })
+    }
+  },
+  encrypted: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onEncrypted: true }),
+      captured: keyOf({ onEncryptedCapture: true })
+    }
+  },
+  ended: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onEnded: true }),
+      captured: keyOf({ onEndedCapture: true })
+    }
+  },
+  error: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onError: true }),
+      captured: keyOf({ onErrorCapture: true })
+    }
+  },
+  focus: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onFocus: true }),
+      captured: keyOf({ onFocusCapture: true })
+    }
+  },
+  input: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onInput: true }),
+      captured: keyOf({ onInputCapture: true })
+    }
+  },
+  invalid: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onInvalid: true }),
+      captured: keyOf({ onInvalidCapture: true })
+    }
+  },
+  keyDown: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onKeyDown: true }),
+      captured: keyOf({ onKeyDownCapture: true })
+    }
+  },
+  keyPress: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onKeyPress: true }),
+      captured: keyOf({ onKeyPressCapture: true })
+    }
+  },
+  keyUp: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onKeyUp: true }),
+      captured: keyOf({ onKeyUpCapture: true })
+    }
+  },
+  load: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onLoad: true }),
+      captured: keyOf({ onLoadCapture: true })
+    }
+  },
+  loadedData: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onLoadedData: true }),
+      captured: keyOf({ onLoadedDataCapture: true })
+    }
+  },
+  loadedMetadata: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onLoadedMetadata: true }),
+      captured: keyOf({ onLoadedMetadataCapture: true })
+    }
+  },
+  loadStart: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onLoadStart: true }),
+      captured: keyOf({ onLoadStartCapture: true })
+    }
+  },
+  // Note: We do not allow listening to mouseOver events. Instead, use the
+  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
+  mouseDown: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onMouseDown: true }),
+      captured: keyOf({ onMouseDownCapture: true })
+    }
+  },
+  mouseMove: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onMouseMove: true }),
+      captured: keyOf({ onMouseMoveCapture: true })
+    }
+  },
+  mouseOut: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onMouseOut: true }),
+      captured: keyOf({ onMouseOutCapture: true })
+    }
+  },
+  mouseOver: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onMouseOver: true }),
+      captured: keyOf({ onMouseOverCapture: true })
+    }
+  },
+  mouseUp: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onMouseUp: true }),
+      captured: keyOf({ onMouseUpCapture: true })
+    }
+  },
+  paste: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onPaste: true }),
+      captured: keyOf({ onPasteCapture: true })
+    }
+  },
+  pause: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onPause: true }),
+      captured: keyOf({ onPauseCapture: true })
+    }
+  },
+  play: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onPlay: true }),
+      captured: keyOf({ onPlayCapture: true })
+    }
+  },
+  playing: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onPlaying: true }),
+      captured: keyOf({ onPlayingCapture: true })
+    }
+  },
+  progress: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onProgress: true }),
+      captured: keyOf({ onProgressCapture: true })
+    }
+  },
+  rateChange: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onRateChange: true }),
+      captured: keyOf({ onRateChangeCapture: true })
+    }
+  },
+  reset: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onReset: true }),
+      captured: keyOf({ onResetCapture: true })
+    }
+  },
+  scroll: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onScroll: true }),
+      captured: keyOf({ onScrollCapture: true })
+    }
+  },
+  seeked: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onSeeked: true }),
+      captured: keyOf({ onSeekedCapture: true })
+    }
+  },
+  seeking: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onSeeking: true }),
+      captured: keyOf({ onSeekingCapture: true })
+    }
+  },
+  stalled: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onStalled: true }),
+      captured: keyOf({ onStalledCapture: true })
+    }
+  },
+  submit: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onSubmit: true }),
+      captured: keyOf({ onSubmitCapture: true })
+    }
+  },
+  suspend: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onSuspend: true }),
+      captured: keyOf({ onSuspendCapture: true })
+    }
+  },
+  timeUpdate: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTimeUpdate: true }),
+      captured: keyOf({ onTimeUpdateCapture: true })
+    }
+  },
+  touchCancel: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTouchCancel: true }),
+      captured: keyOf({ onTouchCancelCapture: true })
+    }
+  },
+  touchEnd: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTouchEnd: true }),
+      captured: keyOf({ onTouchEndCapture: true })
+    }
+  },
+  touchMove: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTouchMove: true }),
+      captured: keyOf({ onTouchMoveCapture: true })
+    }
+  },
+  touchStart: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTouchStart: true }),
+      captured: keyOf({ onTouchStartCapture: true })
+    }
+  },
+  transitionEnd: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onTransitionEnd: true }),
+      captured: keyOf({ onTransitionEndCapture: true })
+    }
+  },
+  volumeChange: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onVolumeChange: true }),
+      captured: keyOf({ onVolumeChangeCapture: true })
+    }
+  },
+  waiting: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onWaiting: true }),
+      captured: keyOf({ onWaitingCapture: true })
+    }
+  },
+  wheel: {
+    phasedRegistrationNames: {
+      bubbled: keyOf({ onWheel: true }),
+      captured: keyOf({ onWheelCapture: true })
+    }
+  }
+};
+
+var topLevelEventsToDispatchConfig = {
+  topAbort: eventTypes.abort,
+  topAnimationEnd: eventTypes.animationEnd,
+  topAnimationIteration: eventTypes.animationIteration,
+  topAnimationStart: eventTypes.animationStart,
+  topBlur: eventTypes.blur,
+  topCanPlay: eventTypes.canPlay,
+  topCanPlayThrough: eventTypes.canPlayThrough,
+  topClick: eventTypes.click,
+  topContextMenu: eventTypes.contextMenu,
+  topCopy: eventTypes.copy,
+  topCut: eventTypes.cut,
+  topDoubleClick: eventTypes.doubleClick,
+  topDrag: eventTypes.drag,
+  topDragEnd: eventTypes.dragEnd,
+  topDragEnter: eventTypes.dragEnter,
+  topDragExit: eventTypes.dragExit,
+  topDragLeave: eventTypes.dragLeave,
+  topDragOver: eventTypes.dragOver,
+  topDragStart: eventTypes.dragStart,
+  topDrop: eventTypes.drop,
+  topDurationChange: eventTypes.durationChange,
+  topEmptied: eventTypes.emptied,
+  topEncrypted: eventTypes.encrypted,
+  topEnded: eventTypes.ended,
+  topError: eventTypes.error,
+  topFocus: eventTypes.focus,
+  topInput: eventTypes.input,
+  topInvalid: eventTypes.invalid,
+  topKeyDown: eventTypes.keyDown,
+  topKeyPress: eventTypes.keyPress,
+  topKeyUp: eventTypes.keyUp,
+  topLoad: eventTypes.load,
+  topLoadedData: eventTypes.loadedData,
+  topLoadedMetadata: eventTypes.loadedMetadata,
+  topLoadStart: eventTypes.loadStart,
+  topMouseDown: eventTypes.mouseDown,
+  topMouseMove: eventTypes.mouseMove,
+  topMouseOut: eventTypes.mouseOut,
+  topMouseOver: eventTypes.mouseOver,
+  topMouseUp: eventTypes.mouseUp,
+  topPaste: eventTypes.paste,
+  topPause: eventTypes.pause,
+  topPlay: eventTypes.play,
+  topPlaying: eventTypes.playing,
+  topProgress: eventTypes.progress,
+  topRateChange: eventTypes.rateChange,
+  topReset: eventTypes.reset,
+  topScroll: eventTypes.scroll,
+  topSeeked: eventTypes.seeked,
+  topSeeking: eventTypes.seeking,
+  topStalled: eventTypes.stalled,
+  topSubmit: eventTypes.submit,
+  topSuspend: eventTypes.suspend,
+  topTimeUpdate: eventTypes.timeUpdate,
+  topTouchCancel: eventTypes.touchCancel,
+  topTouchEnd: eventTypes.touchEnd,
+  topTouchMove: eventTypes.touchMove,
+  topTouchStart: eventTypes.touchStart,
+  topTransitionEnd: eventTypes.transitionEnd,
+  topVolumeChange: eventTypes.volumeChange,
+  topWaiting: eventTypes.waiting,
+  topWheel: eventTypes.wheel
+};
+
+for (var type in topLevelEventsToDispatchConfig) {
+  topLevelEventsToDispatchConfig[type].dependencies = [type];
+}
+
+var ON_CLICK_KEY = keyOf({ onClick: null });
+var onClickListeners = {};
+
+function getDictionaryKey(inst) {
+  // Prevents V8 performance issue:
+  // https://github.com/facebook/react/pull/7232
+  return '.' + inst._rootNodeID;
+}
+
+var SimpleEventPlugin = {
+
+  eventTypes: eventTypes,
+
+  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
+    if (!dispatchConfig) {
+      return null;
+    }
+    var EventConstructor;
+    switch (topLevelType) {
+      case topLevelTypes.topAbort:
+      case topLevelTypes.topCanPlay:
+      case topLevelTypes.topCanPlayThrough:
+      case topLevelTypes.topDurationChange:
+      case topLevelTypes.topEmptied:
+      case topLevelTypes.topEncrypted:
+      case topLevelTypes.topEnded:
+      case topLevelTypes.topError:
+      case topLevelTypes.topInput:
+      case topLevelTypes.topInvalid:
+      case topLevelTypes.topLoad:
+      case topLevelTypes.topLoadedData:
+      case topLevelTypes.topLoadedMetadata:
+      case topLevelTypes.topLoadStart:
+      case topLevelTypes.topPause:
+      case topLevelTypes.topPlay:
+      case topLevelTypes.topPlaying:
+      case topLevelTypes.topProgress:
+      case topLevelTypes.topRateChange:
+      case topLevelTypes.topReset:
+      case topLevelTypes.topSeeked:
+      case topLevelTypes.topSeeking:
+      case topLevelTypes.topStalled:
+      case topLevelTypes.topSubmit:
+      case topLevelTypes.topSuspend:
+      case topLevelTypes.topTimeUpdate:
+      case topLevelTypes.topVolumeChange:
+      case topLevelTypes.topWaiting:
+        // HTML Events
+        // @see http://www.w3.org/TR/html5/index.html#events-0
+        EventConstructor = SyntheticEvent;
+        break;
+      case topLevelTypes.topKeyPress:
+        // Firefox creates a keypress event for function keys too. This removes
+        // the unwanted keypress events. Enter is however both printable and
+        // non-printable. One would expect Tab to be as well (but it isn't).
+        if (getEventCharCode(nativeEvent) === 0) {
+          return null;
+        }
+      /* falls through */
+      case topLevelTypes.topKeyDown:
+      case topLevelTypes.topKeyUp:
+        EventConstructor = SyntheticKeyboardEvent;
+        break;
+      case topLevelTypes.topBlur:
+      case topLevelTypes.topFocus:
+        EventConstructor = SyntheticFocusEvent;
+        break;
+      case topLevelTypes.topClick:
+        // Firefox creates a click event on right mouse clicks. This removes the
+        // unwanted click events.
+        if (nativeEvent.button === 2) {
+          return null;
+        }
+      /* falls through */
+      case topLevelTypes.topContextMenu:
+      case topLevelTypes.topDoubleClick:
+      case topLevelTypes.topMouseDown:
+      case topLevelTypes.topMouseMove:
+      case topLevelTypes.topMouseOut:
+      case topLevelTypes.topMouseOver:
+      case topLevelTypes.topMouseUp:
+        EventConstructor = SyntheticMouseEvent;
+        break;
+      case topLevelTypes.topDrag:
+      case topLevelTypes.topDragEnd:
+      case topLevelTypes.topDragEnter:
+      case topLevelTypes.topDragExit:
+      case topLevelTypes.topDragLeave:
+      case topLevelTypes.topDragOver:
+      case topLevelTypes.topDragStart:
+      case topLevelTypes.topDrop:
+        EventConstructor = SyntheticDragEvent;
+        break;
+      case topLevelTypes.topTouchCancel:
+      case topLevelTypes.topTouchEnd:
+      case topLevelTypes.topTouchMove:
+      case topLevelTypes.topTouchStart:
+        EventConstructor = SyntheticTouchEvent;
+        break;
+      case topLevelTypes.topAnimationEnd:
+      case topLevelTypes.topAnimationIteration:
+      case topLevelTypes.topAnimationStart:
+        EventConstructor = SyntheticAnimationEvent;
+        break;
+      case topLevelTypes.topTransitionEnd:
+        EventConstructor = SyntheticTransitionEvent;
+        break;
+      case topLevelTypes.topScroll:
+        EventConstructor = SyntheticUIEvent;
+        break;
+      case topLevelTypes.topWheel:
+        EventConstructor = SyntheticWheelEvent;
+        break;
+      case topLevelTypes.topCopy:
+      case topLevelTypes.topCut:
+      case topLevelTypes.topPaste:
+        EventConstructor = SyntheticClipboardEvent;
+        break;
+    }
+    !EventConstructor ? "development" !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;
+    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);
+    EventPropagators.accumulateTwoPhaseDispatches(event);
+    return event;
+  },
+
+  didPutListener: function (inst, registrationName, listener) {
+    // Mobile Safari does not fire properly bubble click events on
+    // non-interactive elements, which means delegated click listeners do not
+    // fire. The workaround for this bug involves attaching an empty click
+    // listener on the target node.
+    if (registrationName === ON_CLICK_KEY) {
+      var key = getDictionaryKey(inst);
+      var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+      if (!onClickListeners[key]) {
+        onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);
+      }
+    }
+  },
+
+  willDeleteListener: function (inst, registrationName) {
+    if (registrationName === ON_CLICK_KEY) {
+      var key = getDictionaryKey(inst);
+      onClickListeners[key].remove();
+      delete onClickListeners[key];
+    }
+  }
+
+};
+
+module.exports = SimpleEventPlugin;
+},{"101":101,"102":102,"104":104,"105":105,"106":106,"108":108,"109":109,"110":110,"111":111,"112":112,"113":113,"126":126,"140":140,"147":147,"154":154,"16":16,"162":162,"166":166,"20":20,"42":42}],101:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticAnimationEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
+ */
+var AnimationEventInterface = {
+  animationName: null,
+  elapsedTime: null,
+  pseudoElement: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticEvent}
+ */
+function SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);
+
+module.exports = SyntheticAnimationEvent;
+},{"105":105}],102:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticClipboardEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/clipboard-apis/
+ */
+var ClipboardEventInterface = {
+  clipboardData: function (event) {
+    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
+  }
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
+
+module.exports = SyntheticClipboardEvent;
+},{"105":105}],103:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticCompositionEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
+ */
+var CompositionEventInterface = {
+  data: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
+
+module.exports = SyntheticCompositionEvent;
+},{"105":105}],104:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticDragEvent
+ */
+
+'use strict';
+
+var SyntheticMouseEvent = _dereq_(109);
+
+/**
+ * @interface DragEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var DragEventInterface = {
+  dataTransfer: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
+
+module.exports = SyntheticDragEvent;
+},{"109":109}],105:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticEvent
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var PooledClass = _dereq_(25);
+
+var emptyFunction = _dereq_(154);
+var warning = _dereq_(171);
+
+var didWarnForAddedNewProperty = false;
+var isProxySupported = typeof Proxy === 'function';
+
+var shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var EventInterface = {
+  type: null,
+  target: null,
+  // currentTarget is set when dispatching; no use in copying it here
+  currentTarget: emptyFunction.thatReturnsNull,
+  eventPhase: null,
+  bubbles: null,
+  cancelable: null,
+  timeStamp: function (event) {
+    return event.timeStamp || Date.now();
+  },
+  defaultPrevented: null,
+  isTrusted: null
+};
+
+/**
+ * Synthetic events are dispatched by event plugins, typically in response to a
+ * top-level event delegation handler.
+ *
+ * These systems should generally use pooling to reduce the frequency of garbage
+ * collection. The system should check `isPersistent` to determine whether the
+ * event should be released into the pool after being dispatched. Users that
+ * need a persisted event should invoke `persist`.
+ *
+ * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
+ * normalizing browser quirks. Subclasses do not necessarily have to implement a
+ * DOM interface; custom application-specific events can also subclass this.
+ *
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {*} targetInst Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @param {DOMEventTarget} nativeEventTarget Target node.
+ */
+function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {
+  if ("development" !== 'production') {
+    // these have a getter/setter for warnings
+    delete this.nativeEvent;
+    delete this.preventDefault;
+    delete this.stopPropagation;
+  }
+
+  this.dispatchConfig = dispatchConfig;
+  this._targetInst = targetInst;
+  this.nativeEvent = nativeEvent;
+
+  var Interface = this.constructor.Interface;
+  for (var propName in Interface) {
+    if (!Interface.hasOwnProperty(propName)) {
+      continue;
+    }
+    if ("development" !== 'production') {
+      delete this[propName]; // this has a getter/setter for warnings
+    }
+    var normalize = Interface[propName];
+    if (normalize) {
+      this[propName] = normalize(nativeEvent);
+    } else {
+      if (propName === 'target') {
+        this.target = nativeEventTarget;
+      } else {
+        this[propName] = nativeEvent[propName];
+      }
+    }
+  }
+
+  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
+  if (defaultPrevented) {
+    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
+  } else {
+    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
+  }
+  this.isPropagationStopped = emptyFunction.thatReturnsFalse;
+  return this;
+}
+
+_assign(SyntheticEvent.prototype, {
+
+  preventDefault: function () {
+    this.defaultPrevented = true;
+    var event = this.nativeEvent;
+    if (!event) {
+      return;
+    }
+
+    if (event.preventDefault) {
+      event.preventDefault();
+    } else if (typeof event.returnValue !== 'unknown') {
+      // eslint-disable-line valid-typeof
+      event.returnValue = false;
+    }
+    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
+  },
+
+  stopPropagation: function () {
+    var event = this.nativeEvent;
+    if (!event) {
+      return;
+    }
+
+    if (event.stopPropagation) {
+      event.stopPropagation();
+    } else if (typeof event.cancelBubble !== 'unknown') {
+      // eslint-disable-line valid-typeof
+      // The ChangeEventPlugin registers a "propertychange" event for
+      // IE. This event does not support bubbling or cancelling, and
+      // any references to cancelBubble throw "Member not found".  A
+      // typeof check of "unknown" circumvents this issue (and is also
+      // IE specific).
+      event.cancelBubble = true;
+    }
+
+    this.isPropagationStopped = emptyFunction.thatReturnsTrue;
+  },
+
+  /**
+   * We release all dispatched `SyntheticEvent`s after each event loop, adding
+   * them back into the pool. This allows a way to hold onto a reference that
+   * won't be added back into the pool.
+   */
+  persist: function () {
+    this.isPersistent = emptyFunction.thatReturnsTrue;
+  },
+
+  /**
+   * Checks if this event should be released back into the pool.
+   *
+   * @return {boolean} True if this should not be released, false otherwise.
+   */
+  isPersistent: emptyFunction.thatReturnsFalse,
+
+  /**
+   * `PooledClass` looks for `destructor` on each instance it releases.
+   */
+  destructor: function () {
+    var Interface = this.constructor.Interface;
+    for (var propName in Interface) {
+      if ("development" !== 'production') {
+        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));
+      } else {
+        this[propName] = null;
+      }
+    }
+    for (var i = 0; i < shouldBeReleasedProperties.length; i++) {
+      this[shouldBeReleasedProperties[i]] = null;
+    }
+    if ("development" !== 'production') {
+      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));
+      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));
+      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));
+    }
+  }
+
+});
+
+SyntheticEvent.Interface = EventInterface;
+
+if ("development" !== 'production') {
+  if (isProxySupported) {
+    /*eslint-disable no-func-assign */
+    SyntheticEvent = new Proxy(SyntheticEvent, {
+      construct: function (target, args) {
+        return this.apply(target, Object.create(target.prototype), args);
+      },
+      apply: function (constructor, that, args) {
+        return new Proxy(constructor.apply(that, args), {
+          set: function (target, prop, value) {
+            if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {
+              "development" !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;
+              didWarnForAddedNewProperty = true;
+            }
+            target[prop] = value;
+            return true;
+          }
+        });
+      }
+    });
+    /*eslint-enable no-func-assign */
+  }
+}
+/**
+ * Helper to reduce boilerplate when creating subclasses.
+ *
+ * @param {function} Class
+ * @param {?object} Interface
+ */
+SyntheticEvent.augmentClass = function (Class, Interface) {
+  var Super = this;
+
+  var E = function () {};
+  E.prototype = Super.prototype;
+  var prototype = new E();
+
+  _assign(prototype, Class.prototype);
+  Class.prototype = prototype;
+  Class.prototype.constructor = Class;
+
+  Class.Interface = _assign({}, Super.Interface, Interface);
+  Class.augmentClass = Super.augmentClass;
+
+  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
+};
+
+PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
+
+module.exports = SyntheticEvent;
+
+/**
+  * Helper to nullify syntheticEvent instance properties when destructing
+  *
+  * @param {object} SyntheticEvent
+  * @param {String} propName
+  * @return {object} defineProperty object
+  */
+function getPooledWarningPropertyDefinition(propName, getVal) {
+  var isFunction = typeof getVal === 'function';
+  return {
+    configurable: true,
+    set: set,
+    get: get
+  };
+
+  function set(val) {
+    var action = isFunction ? 'setting the method' : 'setting the property';
+    warn(action, 'This is effectively a no-op');
+    return val;
+  }
+
+  function get() {
+    var action = isFunction ? 'accessing the method' : 'accessing the property';
+    var result = isFunction ? 'This is a no-op function' : 'This is set to null';
+    warn(action, result);
+    return getVal;
+  }
+
+  function warn(action, result) {
+    var warningCondition = false;
+    "development" !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\'re seeing this, ' + 'you\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;
+  }
+}
+},{"154":154,"171":171,"172":172,"25":25}],106:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticFocusEvent
+ */
+
+'use strict';
+
+var SyntheticUIEvent = _dereq_(112);
+
+/**
+ * @interface FocusEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var FocusEventInterface = {
+  relatedTarget: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
+
+module.exports = SyntheticFocusEvent;
+},{"112":112}],107:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticInputEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
+ *      /#events-inputevents
+ */
+var InputEventInterface = {
+  data: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
+
+module.exports = SyntheticInputEvent;
+},{"105":105}],108:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticKeyboardEvent
+ */
+
+'use strict';
+
+var SyntheticUIEvent = _dereq_(112);
+
+var getEventCharCode = _dereq_(126);
+var getEventKey = _dereq_(127);
+var getEventModifierState = _dereq_(128);
+
+/**
+ * @interface KeyboardEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var KeyboardEventInterface = {
+  key: getEventKey,
+  location: null,
+  ctrlKey: null,
+  shiftKey: null,
+  altKey: null,
+  metaKey: null,
+  repeat: null,
+  locale: null,
+  getModifierState: getEventModifierState,
+  // Legacy Interface
+  charCode: function (event) {
+    // `charCode` is the result of a KeyPress event and represents the value of
+    // the actual printable character.
+
+    // KeyPress is deprecated, but its replacement is not yet final and not
+    // implemented in any major browser. Only KeyPress has charCode.
+    if (event.type === 'keypress') {
+      return getEventCharCode(event);
+    }
+    return 0;
+  },
+  keyCode: function (event) {
+    // `keyCode` is the result of a KeyDown/Up event and represents the value of
+    // physical keyboard key.
+
+    // The actual meaning of the value depends on the users' keyboard layout
+    // which cannot be detected. Assuming that it is a US keyboard layout
+    // provides a surprisingly accurate mapping for US and European users.
+    // Due to this, it is left to the user to implement at this time.
+    if (event.type === 'keydown' || event.type === 'keyup') {
+      return event.keyCode;
+    }
+    return 0;
+  },
+  which: function (event) {
+    // `which` is an alias for either `keyCode` or `charCode` depending on the
+    // type of the event.
+    if (event.type === 'keypress') {
+      return getEventCharCode(event);
+    }
+    if (event.type === 'keydown' || event.type === 'keyup') {
+      return event.keyCode;
+    }
+    return 0;
+  }
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
+
+module.exports = SyntheticKeyboardEvent;
+},{"112":112,"126":126,"127":127,"128":128}],109:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticMouseEvent
+ */
+
+'use strict';
+
+var SyntheticUIEvent = _dereq_(112);
+var ViewportMetrics = _dereq_(115);
+
+var getEventModifierState = _dereq_(128);
+
+/**
+ * @interface MouseEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var MouseEventInterface = {
+  screenX: null,
+  screenY: null,
+  clientX: null,
+  clientY: null,
+  ctrlKey: null,
+  shiftKey: null,
+  altKey: null,
+  metaKey: null,
+  getModifierState: getEventModifierState,
+  button: function (event) {
+    // Webkit, Firefox, IE9+
+    // which:  1 2 3
+    // button: 0 1 2 (standard)
+    var button = event.button;
+    if ('which' in event) {
+      return button;
+    }
+    // IE<9
+    // which:  undefined
+    // button: 0 0 0
+    // button: 1 4 2 (onmouseup)
+    return button === 2 ? 2 : button === 4 ? 1 : 0;
+  },
+  buttons: null,
+  relatedTarget: function (event) {
+    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
+  },
+  // "Proprietary" Interface.
+  pageX: function (event) {
+    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
+  },
+  pageY: function (event) {
+    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
+  }
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
+
+module.exports = SyntheticMouseEvent;
+},{"112":112,"115":115,"128":128}],110:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticTouchEvent
+ */
+
+'use strict';
+
+var SyntheticUIEvent = _dereq_(112);
+
+var getEventModifierState = _dereq_(128);
+
+/**
+ * @interface TouchEvent
+ * @see http://www.w3.org/TR/touch-events/
+ */
+var TouchEventInterface = {
+  touches: null,
+  targetTouches: null,
+  changedTouches: null,
+  altKey: null,
+  metaKey: null,
+  ctrlKey: null,
+  shiftKey: null,
+  getModifierState: getEventModifierState
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticUIEvent}
+ */
+function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
+
+module.exports = SyntheticTouchEvent;
+},{"112":112,"128":128}],111:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticTransitionEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+/**
+ * @interface Event
+ * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
+ */
+var TransitionEventInterface = {
+  propertyName: null,
+  elapsedTime: null,
+  pseudoElement: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticEvent}
+ */
+function SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);
+
+module.exports = SyntheticTransitionEvent;
+},{"105":105}],112:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticUIEvent
+ */
+
+'use strict';
+
+var SyntheticEvent = _dereq_(105);
+
+var getEventTarget = _dereq_(129);
+
+/**
+ * @interface UIEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var UIEventInterface = {
+  view: function (event) {
+    if (event.view) {
+      return event.view;
+    }
+
+    var target = getEventTarget(event);
+    if (target.window === target) {
+      // target is a window object
+      return target;
+    }
+
+    var doc = target.ownerDocument;
+    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
+    if (doc) {
+      return doc.defaultView || doc.parentWindow;
+    } else {
+      return window;
+    }
+  },
+  detail: function (event) {
+    return event.detail || 0;
+  }
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticEvent}
+ */
+function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
+
+module.exports = SyntheticUIEvent;
+},{"105":105,"129":129}],113:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule SyntheticWheelEvent
+ */
+
+'use strict';
+
+var SyntheticMouseEvent = _dereq_(109);
+
+/**
+ * @interface WheelEvent
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
+ */
+var WheelEventInterface = {
+  deltaX: function (event) {
+    return 'deltaX' in event ? event.deltaX :
+    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
+    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
+  },
+  deltaY: function (event) {
+    return 'deltaY' in event ? event.deltaY :
+    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
+    'wheelDeltaY' in event ? -event.wheelDeltaY :
+    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
+    'wheelDelta' in event ? -event.wheelDelta : 0;
+  },
+  deltaZ: null,
+
+  // Browsers without "deltaMode" is reporting in raw wheel delta where one
+  // notch on the scroll is always +/- 120, roughly equivalent to pixels.
+  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
+  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
+  deltaMode: null
+};
+
+/**
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
+ * @param {string} dispatchMarker Marker identifying the event target.
+ * @param {object} nativeEvent Native browser event.
+ * @extends {SyntheticMouseEvent}
+ */
+function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+}
+
+SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
+
+module.exports = SyntheticWheelEvent;
+},{"109":109}],114:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule Transaction
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * `Transaction` creates a black box that is able to wrap any method such that
+ * certain invariants are maintained before and after the method is invoked
+ * (Even if an exception is thrown while invoking the wrapped method). Whoever
+ * instantiates a transaction can provide enforcers of the invariants at
+ * creation time. The `Transaction` class itself will supply one additional
+ * automatic invariant for you - the invariant that any transaction instance
+ * should not be run while it is already being run. You would typically create a
+ * single instance of a `Transaction` for reuse multiple times, that potentially
+ * is used to wrap several different methods. Wrappers are extremely simple -
+ * they only require implementing two methods.
+ *
+ * <pre>
+ *                       wrappers (injected at creation time)
+ *                                      +        +
+ *                                      |        |
+ *                    +-----------------|--------|--------------+
+ *                    |                 v        |              |
+ *                    |      +---------------+   |              |
+ *                    |   +--|    wrapper1   |---|----+         |
+ *                    |   |  +---------------+   v    |         |
+ *                    |   |          +-------------+  |         |
+ *                    |   |     +----|   wrapper2  |--------+   |
+ *                    |   |     |    +-------------+  |     |   |
+ *                    |   |     |                     |     |   |
+ *                    |   v     v                     v     v   | wrapper
+ *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
+ * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
+ * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
+ *                    | |   | |   |   |         |   |   | |   | |
+ *                    | |   | |   |   |         |   |   | |   | |
+ *                    | |   | |   |   |         |   |   | |   | |
+ *                    | +---+ +---+   +---------+   +---+ +---+ |
+ *                    |  initialize                    close    |
+ *                    +-----------------------------------------+
+ * </pre>
+ *
+ * Use cases:
+ * - Preserving the input selection ranges before/after reconciliation.
+ *   Restoring selection even in the event of an unexpected error.
+ * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
+ *   while guaranteeing that afterwards, the event system is reactivated.
+ * - Flushing a queue of collected DOM mutations to the main UI thread after a
+ *   reconciliation takes place in a worker thread.
+ * - Invoking any collected `componentDidUpdate` callbacks after rendering new
+ *   content.
+ * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
+ *   to preserve the `scrollTop` (an automatic scroll aware DOM).
+ * - (Future use case): Layout calculations before and after DOM updates.
+ *
+ * Transactional plugin API:
+ * - A module that has an `initialize` method that returns any precomputation.
+ * - and a `close` method that accepts the precomputation. `close` is invoked
+ *   when the wrapped process is completed, or has failed.
+ *
+ * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
+ * that implement `initialize` and `close`.
+ * @return {Transaction} Single transaction for reuse in thread.
+ *
+ * @class Transaction
+ */
+var Mixin = {
+  /**
+   * Sets up this instance so that it is prepared for collecting metrics. Does
+   * so such that this setup method may be used on an instance that is already
+   * initialized, in a way that does not consume additional memory upon reuse.
+   * That can be useful if you decide to make your subclass of this mixin a
+   * "PooledClass".
+   */
+  reinitializeTransaction: function () {
+    this.transactionWrappers = this.getTransactionWrappers();
+    if (this.wrapperInitData) {
+      this.wrapperInitData.length = 0;
+    } else {
+      this.wrapperInitData = [];
+    }
+    this._isInTransaction = false;
+  },
+
+  _isInTransaction: false,
+
+  /**
+   * @abstract
+   * @return {Array<TransactionWrapper>} Array of transaction wrappers.
+   */
+  getTransactionWrappers: null,
+
+  isInTransaction: function () {
+    return !!this._isInTransaction;
+  },
+
+  /**
+   * Executes the function within a safety window. Use this for the top level
+   * methods that result in large amounts of computation/mutations that would
+   * need to be safety checked. The optional arguments helps prevent the need
+   * to bind in many cases.
+   *
+   * @param {function} method Member of scope to call.
+   * @param {Object} scope Scope to invoke from.
+   * @param {Object?=} a Argument to pass to the method.
+   * @param {Object?=} b Argument to pass to the method.
+   * @param {Object?=} c Argument to pass to the method.
+   * @param {Object?=} d Argument to pass to the method.
+   * @param {Object?=} e Argument to pass to the method.
+   * @param {Object?=} f Argument to pass to the method.
+   *
+   * @return {*} Return value from `method`.
+   */
+  perform: function (method, scope, a, b, c, d, e, f) {
+    !!this.isInTransaction() ? "development" !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;
+    var errorThrown;
+    var ret;
+    try {
+      this._isInTransaction = true;
+      // Catching errors makes debugging more difficult, so we start with
+      // errorThrown set to true before setting it to false after calling
+      // close -- if it's still set to true in the finally block, it means
+      // one of these calls threw.
+      errorThrown = true;
+      this.initializeAll(0);
+      ret = method.call(scope, a, b, c, d, e, f);
+      errorThrown = false;
+    } finally {
+      try {
+        if (errorThrown) {
+          // If `method` throws, prefer to show that stack trace over any thrown
+          // by invoking `closeAll`.
+          try {
+            this.closeAll(0);
+          } catch (err) {}
+        } else {
+          // Since `method` didn't throw, we don't want to silence the exception
+          // here.
+          this.closeAll(0);
+        }
+      } finally {
+        this._isInTransaction = false;
+      }
+    }
+    return ret;
+  },
+
+  initializeAll: function (startIndex) {
+    var transactionWrappers = this.transactionWrappers;
+    for (var i = startIndex; i < transactionWrappers.length; i++) {
+      var wrapper = transactionWrappers[i];
+      try {
+        // Catching errors makes debugging more difficult, so we start with the
+        // OBSERVED_ERROR state before overwriting it with the real return value
+        // of initialize -- if it's still set to OBSERVED_ERROR in the finally
+        // block, it means wrapper.initialize threw.
+        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
+        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
+      } finally {
+        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
+          // The initializer for wrapper i threw an error; initialize the
+          // remaining wrappers but silence any exceptions from them to ensure
+          // that the first error is the one to bubble up.
+          try {
+            this.initializeAll(i + 1);
+          } catch (err) {}
+        }
+      }
+    }
+  },
+
+  /**
+   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
+   * them the respective return values of `this.transactionWrappers.init[i]`
+   * (`close`rs that correspond to initializers that failed will not be
+   * invoked).
+   */
+  closeAll: function (startIndex) {
+    !this.isInTransaction() ? "development" !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;
+    var transactionWrappers = this.transactionWrappers;
+    for (var i = startIndex; i < transactionWrappers.length; i++) {
+      var wrapper = transactionWrappers[i];
+      var initData = this.wrapperInitData[i];
+      var errorThrown;
+      try {
+        // Catching errors makes debugging more difficult, so we start with
+        // errorThrown set to true before setting it to false after calling
+        // close -- if it's still set to true in the finally block, it means
+        // wrapper.close threw.
+        errorThrown = true;
+        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
+          wrapper.close.call(this, initData);
+        }
+        errorThrown = false;
+      } finally {
+        if (errorThrown) {
+          // The closer for wrapper i threw an error; close the remaining
+          // wrappers but silence any exceptions from them to ensure that the
+          // first error is the one to bubble up.
+          try {
+            this.closeAll(i + 1);
+          } catch (e) {}
+        }
+      }
+    }
+    this.wrapperInitData.length = 0;
+  }
+};
+
+var Transaction = {
+
+  Mixin: Mixin,
+
+  /**
+   * Token to look for to determine if an error occurred.
+   */
+  OBSERVED_ERROR: {}
+
+};
+
+module.exports = Transaction;
+},{"140":140,"162":162}],115:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ViewportMetrics
+ */
+
+'use strict';
+
+var ViewportMetrics = {
+
+  currentScrollLeft: 0,
+
+  currentScrollTop: 0,
+
+  refreshScrollValues: function (scrollPosition) {
+    ViewportMetrics.currentScrollLeft = scrollPosition.x;
+    ViewportMetrics.currentScrollTop = scrollPosition.y;
+  }
+
+};
+
+module.exports = ViewportMetrics;
+},{}],116:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule accumulateInto
+ * 
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var invariant = _dereq_(162);
+
+/**
+ * Accumulates items that must not be null or undefined into the first one. This
+ * is used to conserve memory by avoiding array allocations, and thus sacrifices
+ * API cleanness. Since `current` can be null before being passed in and not
+ * null after this function, make sure to assign it back to `current`:
+ *
+ * `a = accumulateInto(a, b);`
+ *
+ * This API should be sparingly used. Try `accumulate` for something cleaner.
+ *
+ * @return {*|array<*>} An accumulation of items.
+ */
+
+function accumulateInto(current, next) {
+  !(next != null) ? "development" !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;
+
+  if (current == null) {
+    return next;
+  }
+
+  // Both are not empty. Warning: Never call x.concat(y) when you are not
+  // certain that x is an Array (x could be a string with concat method).
+  if (Array.isArray(current)) {
+    if (Array.isArray(next)) {
+      current.push.apply(current, next);
+      return current;
+    }
+    current.push(next);
+    return current;
+  }
+
+  if (Array.isArray(next)) {
+    // A bit too dangerous to mutate `next`.
+    return [current].concat(next);
+  }
+
+  return [current, next];
+}
+
+module.exports = accumulateInto;
+},{"140":140,"162":162}],117:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule adler32
+ * 
+ */
+
+'use strict';
+
+var MOD = 65521;
+
+// adler32 is not cryptographically strong, and is only used to sanity check that
+// markup generated on the server matches the markup generated on the client.
+// This implementation (a modified version of the SheetJS version) has been optimized
+// for our use case, at the expense of conforming to the adler32 specification
+// for non-ascii inputs.
+function adler32(data) {
+  var a = 1;
+  var b = 0;
+  var i = 0;
+  var l = data.length;
+  var m = l & ~0x3;
+  while (i < m) {
+    var n = Math.min(i + 4096, m);
+    for (; i < n; i += 4) {
+      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));
+    }
+    a %= MOD;
+    b %= MOD;
+  }
+  for (; i < l; i++) {
+    b += a += data.charCodeAt(i);
+  }
+  a %= MOD;
+  b %= MOD;
+  return a | b << 16;
+}
+
+module.exports = adler32;
+},{}],118:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule canDefineProperty
+ */
+
+'use strict';
+
+var canDefineProperty = false;
+if ("development" !== 'production') {
+  try {
+    Object.defineProperty({}, 'x', { get: function () {} });
+    canDefineProperty = true;
+  } catch (x) {
+    // IE will fail on defineProperty
+  }
+}
+
+module.exports = canDefineProperty;
+},{}],119:[function(_dereq_,module,exports){
+(function (process){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule checkReactTypeSpec
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactPropTypeLocationNames = _dereq_(82);
+var ReactPropTypesSecret = _dereq_(85);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+var ReactComponentTreeHook;
+
+if (typeof process !== 'undefined' && process.env && "development" === 'test') {
+  // Temporary hack.
+  // Inline requires don't work well with Jest:
+  // https://github.com/facebook/react/issues/7240
+  // Remove the inline requires when we don't need them anymore:
+  // https://github.com/facebook/react/pull/7178
+  ReactComponentTreeHook = _dereq_(35);
+}
+
+var loggedTypeFailures = {};
+
+/**
+ * Assert that the values match with the type specs.
+ * Error messages are memorized and will only be shown once.
+ *
+ * @param {object} typeSpecs Map of name to a ReactPropType
+ * @param {object} values Runtime values that need to be type-checked
+ * @param {string} location e.g. "prop", "context", "child context"
+ * @param {string} componentName Name of the component for error messages.
+ * @param {?object} element The React element that is being type-checked
+ * @param {?number} debugID The React component instance that is being type-checked
+ * @private
+ */
+function checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {
+  for (var typeSpecName in typeSpecs) {
+    if (typeSpecs.hasOwnProperty(typeSpecName)) {
+      var error;
+      // Prop type validation may throw. In case they do, we don't want to
+      // fail the render phase where it didn't fail before. So we log it.
+      // After these have been cleaned up, we'll let them throw.
+      try {
+        // This is intentionally an invariant that gets caught. It's the same
+        // behavior as without this statement except with a better message.
+        !(typeof typeSpecs[typeSpecName] === 'function') ? "development" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;
+        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
+      } catch (ex) {
+        error = ex;
+      }
+      "development" !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;
+      if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+        // Only monitor this failure once because there tends to be a lot of the
+        // same error.
+        loggedTypeFailures[error.message] = true;
+
+        var componentStackInfo = '';
+
+        if ("development" !== 'production') {
+          if (!ReactComponentTreeHook) {
+            ReactComponentTreeHook = _dereq_(35);
+          }
+          if (debugID !== null) {
+            componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);
+          } else if (element !== null) {
+            componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);
+          }
+        }
+
+        "development" !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;
+      }
+    }
+  }
+}
+
+module.exports = checkReactTypeSpec;
+}).call(this,undefined)
+},{"140":140,"162":162,"171":171,"35":35,"82":82,"85":85}],120:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule createMicrosoftUnsafeLocalFunction
+ */
+
+/* globals MSApp */
+
+'use strict';
+
+/**
+ * Create a function which has 'unsafe' privileges (required by windows8 apps)
+ */
+
+var createMicrosoftUnsafeLocalFunction = function (func) {
+  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
+    return function (arg0, arg1, arg2, arg3) {
+      MSApp.execUnsafeLocalFunction(function () {
+        return func(arg0, arg1, arg2, arg3);
+      });
+    };
+  } else {
+    return func;
+  }
+};
+
+module.exports = createMicrosoftUnsafeLocalFunction;
+},{}],121:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule dangerousStyleValue
+ */
+
+'use strict';
+
+var CSSProperty = _dereq_(3);
+var warning = _dereq_(171);
+
+var isUnitlessNumber = CSSProperty.isUnitlessNumber;
+var styleWarnings = {};
+
+/**
+ * Convert a value into the proper css writable value. The style name `name`
+ * should be logical (no hyphens), as specified
+ * in `CSSProperty.isUnitlessNumber`.
+ *
+ * @param {string} name CSS property name such as `topMargin`.
+ * @param {*} value CSS property value such as `10px`.
+ * @param {ReactDOMComponent} component
+ * @return {string} Normalized style value with dimensions applied.
+ */
+function dangerousStyleValue(name, value, component) {
+  // Note that we've removed escapeTextForBrowser() calls here since the
+  // whole string will be escaped when the attribute is injected into
+  // the markup. If you provide unsafe user data here they can inject
+  // arbitrary CSS which may be problematic (I couldn't repro this):
+  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
+  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
+  // This is not an XSS hole but instead a potential CSS injection issue
+  // which has lead to a greater discussion about how we're going to
+  // trust URLs moving forward. See #2115901
+
+  var isEmpty = value == null || typeof value === 'boolean' || value === '';
+  if (isEmpty) {
+    return '';
+  }
+
+  var isNonNumeric = isNaN(value);
+  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
+    return '' + value; // cast to string
+  }
+
+  if (typeof value === 'string') {
+    if ("development" !== 'production') {
+      // Allow '0' to pass through without warning. 0 is already special and
+      // doesn't require units, so we don't need to warn about it.
+      if (component && value !== '0') {
+        var owner = component._currentElement._owner;
+        var ownerName = owner ? owner.getName() : null;
+        if (ownerName && !styleWarnings[ownerName]) {
+          styleWarnings[ownerName] = {};
+        }
+        var warned = false;
+        if (ownerName) {
+          var warnings = styleWarnings[ownerName];
+          warned = warnings[name];
+          if (!warned) {
+            warnings[name] = true;
+          }
+        }
+        if (!warned) {
+          "development" !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;
+        }
+      }
+    }
+    value = value.trim();
+  }
+  return value + 'px';
+}
+
+module.exports = dangerousStyleValue;
+},{"171":171,"3":3}],122:[function(_dereq_,module,exports){
+/**
+ * Copyright 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * Based on the escape-html library, which is used under the MIT License below:
+ *
+ * Copyright (c) 2012-2013 TJ Holowaychuk
+ * Copyright (c) 2015 Andreas Lubbe
+ * Copyright (c) 2015 Tiancheng "Timothy" Gu
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * 'Software'), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * @providesModule escapeTextContentForBrowser
+ */
+
+'use strict';
+
+// code copied and modified from escape-html
+/**
+ * Module variables.
+ * @private
+ */
+
+var matchHtmlRegExp = /["'&<>]/;
+
+/**
+ * Escape special characters in the given string of html.
+ *
+ * @param  {string} string The string to escape for inserting into HTML
+ * @return {string}
+ * @public
+ */
+
+function escapeHtml(string) {
+  var str = '' + string;
+  var match = matchHtmlRegExp.exec(str);
+
+  if (!match) {
+    return str;
+  }
+
+  var escape;
+  var html = '';
+  var index = 0;
+  var lastIndex = 0;
+
+  for (index = match.index; index < str.length; index++) {
+    switch (str.charCodeAt(index)) {
+      case 34:
+        // "
+        escape = '&quot;';
+        break;
+      case 38:
+        // &
+        escape = '&amp;';
+        break;
+      case 39:
+        // '
+        escape = '&#x27;'; // modified from escape-html; used to be '&#39'
+        break;
+      case 60:
+        // <
+        escape = '&lt;';
+        break;
+      case 62:
+        // >
+        escape = '&gt;';
+        break;
+      default:
+        continue;
+    }
+
+    if (lastIndex !== index) {
+      html += str.substring(lastIndex, index);
+    }
+
+    lastIndex = index + 1;
+    html += escape;
+  }
+
+  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
+}
+// end code copied and modified from escape-html
+
+
+/**
+ * Escapes text to prevent scripting attacks.
+ *
+ * @param {*} text Text value to escape.
+ * @return {string} An escaped string.
+ */
+function escapeTextContentForBrowser(text) {
+  if (typeof text === 'boolean' || typeof text === 'number') {
+    // this shortcircuit helps perf for types that we know will never have
+    // special characters, especially given that this function is used often
+    // for numeric dom ids.
+    return '' + text;
+  }
+  return escapeHtml(text);
+}
+
+module.exports = escapeTextContentForBrowser;
+},{}],123:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule findDOMNode
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactCurrentOwner = _dereq_(37);
+var ReactDOMComponentTree = _dereq_(42);
+var ReactInstanceMap = _dereq_(72);
+
+var getHostComponentFromComposite = _dereq_(130);
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+/**
+ * Returns the DOM node rendered by this element.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
+ *
+ * @param {ReactComponent|DOMElement} componentOrElement
+ * @return {?DOMElement} The root node of this element.
+ */
+function findDOMNode(componentOrElement) {
+  if ("development" !== 'production') {
+    var owner = ReactCurrentOwner.current;
+    if (owner !== null) {
+      "development" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
+      owner._warnedAboutRefsInRender = true;
+    }
+  }
+  if (componentOrElement == null) {
+    return null;
+  }
+  if (componentOrElement.nodeType === 1) {
+    return componentOrElement;
+  }
+
+  var inst = ReactInstanceMap.get(componentOrElement);
+  if (inst) {
+    inst = getHostComponentFromComposite(inst);
+    return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;
+  }
+
+  if (typeof componentOrElement.render === 'function') {
+    !false ? "development" !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;
+  } else {
+    !false ? "development" !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;
+  }
+}
+
+module.exports = findDOMNode;
+},{"130":130,"140":140,"162":162,"171":171,"37":37,"42":42,"72":72}],124:[function(_dereq_,module,exports){
+(function (process){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule flattenChildren
+ * 
+ */
+
+'use strict';
+
+var KeyEscapeUtils = _dereq_(23);
+var traverseAllChildren = _dereq_(145);
+var warning = _dereq_(171);
+
+var ReactComponentTreeHook;
+
+if (typeof process !== 'undefined' && process.env && "development" === 'test') {
+  // Temporary hack.
+  // Inline requires don't work well with Jest:
+  // https://github.com/facebook/react/issues/7240
+  // Remove the inline requires when we don't need them anymore:
+  // https://github.com/facebook/react/pull/7178
+  ReactComponentTreeHook = _dereq_(35);
+}
+
+/**
+ * @param {function} traverseContext Context passed through traversal.
+ * @param {?ReactComponent} child React child component.
+ * @param {!string} name String name of key path to child.
+ * @param {number=} selfDebugID Optional debugID of the current internal instance.
+ */
+function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {
+  // We found a component instance.
+  if (traverseContext && typeof traverseContext === 'object') {
+    var result = traverseContext;
+    var keyUnique = result[name] === undefined;
+    if ("development" !== 'production') {
+      if (!ReactComponentTreeHook) {
+        ReactComponentTreeHook = _dereq_(35);
+      }
+      if (!keyUnique) {
+        "development" !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
+      }
+    }
+    if (keyUnique && child != null) {
+      result[name] = child;
+    }
+  }
+}
+
+/**
+ * Flattens children that are typically specified as `props.children`. Any null
+ * children will not be included in the resulting object.
+ * @return {!object} flattened children keyed by name.
+ */
+function flattenChildren(children, selfDebugID) {
+  if (children == null) {
+    return children;
+  }
+  var result = {};
+
+  if ("development" !== 'production') {
+    traverseAllChildren(children, function (traverseContext, child, name) {
+      return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);
+    }, result);
+  } else {
+    traverseAllChildren(children, flattenSingleChildIntoContext, result);
+  }
+  return result;
+}
+
+module.exports = flattenChildren;
+}).call(this,undefined)
+},{"145":145,"171":171,"23":23,"35":35}],125:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule forEachAccumulated
+ * 
+ */
+
+'use strict';
+
+/**
+ * @param {array} arr an "accumulation" of items which is either an Array or
+ * a single item. Useful when paired with the `accumulate` module. This is a
+ * simple utility that allows us to reason about a collection of items, but
+ * handling the case when there is exactly one item (and we do not need to
+ * allocate an array).
+ */
+
+function forEachAccumulated(arr, cb, scope) {
+  if (Array.isArray(arr)) {
+    arr.forEach(cb, scope);
+  } else if (arr) {
+    cb.call(scope, arr);
+  }
+}
+
+module.exports = forEachAccumulated;
+},{}],126:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getEventCharCode
+ */
+
+'use strict';
+
+/**
+ * `charCode` represents the actual "character code" and is safe to use with
+ * `String.fromCharCode`. As such, only keys that correspond to printable
+ * characters produce a valid `charCode`, the only exception to this is Enter.
+ * The Tab-key is considered non-printable and does not have a `charCode`,
+ * presumably because it does not produce a tab-character in browsers.
+ *
+ * @param {object} nativeEvent Native browser event.
+ * @return {number} Normalized `charCode` property.
+ */
+
+function getEventCharCode(nativeEvent) {
+  var charCode;
+  var keyCode = nativeEvent.keyCode;
+
+  if ('charCode' in nativeEvent) {
+    charCode = nativeEvent.charCode;
+
+    // FF does not set `charCode` for the Enter-key, check against `keyCode`.
+    if (charCode === 0 && keyCode === 13) {
+      charCode = 13;
+    }
+  } else {
+    // IE8 does not implement `charCode`, but `keyCode` has the correct value.
+    charCode = keyCode;
+  }
+
+  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
+  // Must not discard the (non-)printable Enter-key.
+  if (charCode >= 32 || charCode === 13) {
+    return charCode;
+  }
+
+  return 0;
+}
+
+module.exports = getEventCharCode;
+},{}],127:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getEventKey
+ */
+
+'use strict';
+
+var getEventCharCode = _dereq_(126);
+
+/**
+ * Normalization of deprecated HTML5 `key` values
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
+ */
+var normalizeKey = {
+  'Esc': 'Escape',
+  'Spacebar': ' ',
+  'Left': 'ArrowLeft',
+  'Up': 'ArrowUp',
+  'Right': 'ArrowRight',
+  'Down': 'ArrowDown',
+  'Del': 'Delete',
+  'Win': 'OS',
+  'Menu': 'ContextMenu',
+  'Apps': 'ContextMenu',
+  'Scroll': 'ScrollLock',
+  'MozPrintableKey': 'Unidentified'
+};
+
+/**
+ * Translation from legacy `keyCode` to HTML5 `key`
+ * Only special keys supported, all others depend on keyboard layout or browser
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
+ */
+var translateToKey = {
+  8: 'Backspace',
+  9: 'Tab',
+  12: 'Clear',
+  13: 'Enter',
+  16: 'Shift',
+  17: 'Control',
+  18: 'Alt',
+  19: 'Pause',
+  20: 'CapsLock',
+  27: 'Escape',
+  32: ' ',
+  33: 'PageUp',
+  34: 'PageDown',
+  35: 'End',
+  36: 'Home',
+  37: 'ArrowLeft',
+  38: 'ArrowUp',
+  39: 'ArrowRight',
+  40: 'ArrowDown',
+  45: 'Insert',
+  46: 'Delete',
+  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
+  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
+  144: 'NumLock',
+  145: 'ScrollLock',
+  224: 'Meta'
+};
+
+/**
+ * @param {object} nativeEvent Native browser event.
+ * @return {string} Normalized `key` property.
+ */
+function getEventKey(nativeEvent) {
+  if (nativeEvent.key) {
+    // Normalize inconsistent values reported by browsers due to
+    // implementations of a working draft specification.
+
+    // FireFox implements `key` but returns `MozPrintableKey` for all
+    // printable characters (normalized to `Unidentified`), ignore it.
+    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+    if (key !== 'Unidentified') {
+      return key;
+    }
+  }
+
+  // Browser does not implement `key`, polyfill as much of it as we can.
+  if (nativeEvent.type === 'keypress') {
+    var charCode = getEventCharCode(nativeEvent);
+
+    // The enter-key is technically both printable and non-printable and can
+    // thus be captured by `keypress`, no other non-printable key should.
+    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
+  }
+  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
+    // While user keyboard layout determines the actual meaning of each
+    // `keyCode` value, almost all function keys have a universal value.
+    return translateToKey[nativeEvent.keyCode] || 'Unidentified';
+  }
+  return '';
+}
+
+module.exports = getEventKey;
+},{"126":126}],128:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getEventModifierState
+ */
+
+'use strict';
+
+/**
+ * Translation from modifier key to the associated property in the event.
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
+ */
+
+var modifierKeyToProp = {
+  'Alt': 'altKey',
+  'Control': 'ctrlKey',
+  'Meta': 'metaKey',
+  'Shift': 'shiftKey'
+};
+
+// IE8 does not implement getModifierState so we simply map it to the only
+// modifier keys exposed by the event itself, does not support Lock-keys.
+// Currently, all major browsers except Chrome seems to support Lock-keys.
+function modifierStateGetter(keyArg) {
+  var syntheticEvent = this;
+  var nativeEvent = syntheticEvent.nativeEvent;
+  if (nativeEvent.getModifierState) {
+    return nativeEvent.getModifierState(keyArg);
+  }
+  var keyProp = modifierKeyToProp[keyArg];
+  return keyProp ? !!nativeEvent[keyProp] : false;
+}
+
+function getEventModifierState(nativeEvent) {
+  return modifierStateGetter;
+}
+
+module.exports = getEventModifierState;
+},{}],129:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getEventTarget
+ */
+
+'use strict';
+
+/**
+ * Gets the target node from a native browser event by accounting for
+ * inconsistencies in browser DOM APIs.
+ *
+ * @param {object} nativeEvent Native browser event.
+ * @return {DOMEventTarget} Target node.
+ */
+
+function getEventTarget(nativeEvent) {
+  var target = nativeEvent.target || nativeEvent.srcElement || window;
+
+  // Normalize SVG <use> element events #4963
+  if (target.correspondingUseElement) {
+    target = target.correspondingUseElement;
+  }
+
+  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
+  // @see http://www.quirksmode.org/js/events_properties.html
+  return target.nodeType === 3 ? target.parentNode : target;
+}
+
+module.exports = getEventTarget;
+},{}],130:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getHostComponentFromComposite
+ */
+
+'use strict';
+
+var ReactNodeTypes = _dereq_(79);
+
+function getHostComponentFromComposite(inst) {
+  var type;
+
+  while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {
+    inst = inst._renderedComponent;
+  }
+
+  if (type === ReactNodeTypes.HOST) {
+    return inst._renderedComponent;
+  } else if (type === ReactNodeTypes.EMPTY) {
+    return null;
+  }
+}
+
+module.exports = getHostComponentFromComposite;
+},{"79":79}],131:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getIteratorFn
+ * 
+ */
+
+'use strict';
+
+/* global Symbol */
+
+var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
+var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
+
+/**
+ * Returns the iterator method function contained on the iterable object.
+ *
+ * Be sure to invoke the function with the iterable as context:
+ *
+ *     var iteratorFn = getIteratorFn(myIterable);
+ *     if (iteratorFn) {
+ *       var iterator = iteratorFn.call(myIterable);
+ *       ...
+ *     }
+ *
+ * @param {?object} maybeIterable
+ * @return {?function}
+ */
+function getIteratorFn(maybeIterable) {
+  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
+  if (typeof iteratorFn === 'function') {
+    return iteratorFn;
+  }
+}
+
+module.exports = getIteratorFn;
+},{}],132:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getNodeForCharacterOffset
+ */
+
+'use strict';
+
+/**
+ * Given any node return the first leaf node without children.
+ *
+ * @param {DOMElement|DOMTextNode} node
+ * @return {DOMElement|DOMTextNode}
+ */
+
+function getLeafNode(node) {
+  while (node && node.firstChild) {
+    node = node.firstChild;
+  }
+  return node;
+}
+
+/**
+ * Get the next sibling within a container. This will walk up the
+ * DOM if a node's siblings have been exhausted.
+ *
+ * @param {DOMElement|DOMTextNode} node
+ * @return {?DOMElement|DOMTextNode}
+ */
+function getSiblingNode(node) {
+  while (node) {
+    if (node.nextSibling) {
+      return node.nextSibling;
+    }
+    node = node.parentNode;
+  }
+}
+
+/**
+ * Get object describing the nodes which contain characters at offset.
+ *
+ * @param {DOMElement|DOMTextNode} root
+ * @param {number} offset
+ * @return {?object}
+ */
+function getNodeForCharacterOffset(root, offset) {
+  var node = getLeafNode(root);
+  var nodeStart = 0;
+  var nodeEnd = 0;
+
+  while (node) {
+    if (node.nodeType === 3) {
+      nodeEnd = nodeStart + node.textContent.length;
+
+      if (nodeStart <= offset && nodeEnd >= offset) {
+        return {
+          node: node,
+          offset: offset - nodeStart
+        };
+      }
+
+      nodeStart = nodeEnd;
+    }
+
+    node = getLeafNode(getSiblingNode(node));
+  }
+}
+
+module.exports = getNodeForCharacterOffset;
+},{}],133:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getTextContentAccessor
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+
+var contentKey = null;
+
+/**
+ * Gets the key used to access text content on a DOM node.
+ *
+ * @return {?string} Key used to access text content.
+ * @internal
+ */
+function getTextContentAccessor() {
+  if (!contentKey && ExecutionEnvironment.canUseDOM) {
+    // Prefer textContent to innerText because many browsers support both but
+    // SVG <text> elements don't support innerText even when <div> does.
+    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
+  }
+  return contentKey;
+}
+
+module.exports = getTextContentAccessor;
+},{"148":148}],134:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule getVendorPrefixedEventName
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+
+/**
+ * Generate a mapping of standard vendor prefixes using the defined style property and event name.
+ *
+ * @param {string} styleProp
+ * @param {string} eventName
+ * @returns {object}
+ */
+function makePrefixMap(styleProp, eventName) {
+  var prefixes = {};
+
+  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+  prefixes['Webkit' + styleProp] = 'webkit' + eventName;
+  prefixes['Moz' + styleProp] = 'moz' + eventName;
+  prefixes['ms' + styleProp] = 'MS' + eventName;
+  prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();
+
+  return prefixes;
+}
+
+/**
+ * A list of event names to a configurable list of vendor prefixes.
+ */
+var vendorPrefixes = {
+  animationend: makePrefixMap('Animation', 'AnimationEnd'),
+  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
+  animationstart: makePrefixMap('Animation', 'AnimationStart'),
+  transitionend: makePrefixMap('Transition', 'TransitionEnd')
+};
+
+/**
+ * Event names that have already been detected and prefixed (if applicable).
+ */
+var prefixedEventNames = {};
+
+/**
+ * Element to check for prefixes on.
+ */
+var style = {};
+
+/**
+ * Bootstrap if a DOM exists.
+ */
+if (ExecutionEnvironment.canUseDOM) {
+  style = document.createElement('div').style;
+
+  // On some platforms, in particular some releases of Android 4.x,
+  // the un-prefixed "animation" and "transition" properties are defined on the
+  // style object but the events that fire will still be prefixed, so we need
+  // to check if the un-prefixed events are usable, and if not remove them from the map.
+  if (!('AnimationEvent' in window)) {
+    delete vendorPrefixes.animationend.animation;
+    delete vendorPrefixes.animationiteration.animation;
+    delete vendorPrefixes.animationstart.animation;
+  }
+
+  // Same as above
+  if (!('TransitionEvent' in window)) {
+    delete vendorPrefixes.transitionend.transition;
+  }
+}
+
+/**
+ * Attempts to determine the correct vendor prefixed event name.
+ *
+ * @param {string} eventName
+ * @returns {string}
+ */
+function getVendorPrefixedEventName(eventName) {
+  if (prefixedEventNames[eventName]) {
+    return prefixedEventNames[eventName];
+  } else if (!vendorPrefixes[eventName]) {
+    return eventName;
+  }
+
+  var prefixMap = vendorPrefixes[eventName];
+
+  for (var styleProp in prefixMap) {
+    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
+      return prefixedEventNames[eventName] = prefixMap[styleProp];
+    }
+  }
+
+  return '';
+}
+
+module.exports = getVendorPrefixedEventName;
+},{"148":148}],135:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule instantiateReactComponent
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140),
+    _assign = _dereq_(172);
+
+var ReactCompositeComponent = _dereq_(36);
+var ReactEmptyComponent = _dereq_(63);
+var ReactHostComponent = _dereq_(68);
+
+var invariant = _dereq_(162);
+var warning = _dereq_(171);
+
+// To avoid a cyclic dependency, we create the final class in this module
+var ReactCompositeComponentWrapper = function (element) {
+  this.construct(element);
+};
+_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
+  _instantiateReactComponent: instantiateReactComponent
+});
+
+function getDeclarationErrorAddendum(owner) {
+  if (owner) {
+    var name = owner.getName();
+    if (name) {
+      return ' Check the render method of `' + name + '`.';
+    }
+  }
+  return '';
+}
+
+/**
+ * Check if the type reference is a known internal type. I.e. not a user
+ * provided composite type.
+ *
+ * @param {function} type
+ * @return {boolean} Returns true if this is a valid internal type.
+ */
+function isInternalComponentType(type) {
+  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
+}
+
+var nextDebugID = 1;
+
+/**
+ * Given a ReactNode, create an instance that will actually be mounted.
+ *
+ * @param {ReactNode} node
+ * @param {boolean} shouldHaveDebugID
+ * @return {object} A new instance of the element's constructor.
+ * @protected
+ */
+function instantiateReactComponent(node, shouldHaveDebugID) {
+  var instance;
+
+  if (node === null || node === false) {
+    instance = ReactEmptyComponent.create(instantiateReactComponent);
+  } else if (typeof node === 'object') {
+    var element = node;
+    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? "development" !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
+
+    // Special case string values
+    if (typeof element.type === 'string') {
+      instance = ReactHostComponent.createInternalComponent(element);
+    } else if (isInternalComponentType(element.type)) {
+      // This is temporarily available for custom components that are not string
+      // representations. I.e. ART. Once those are updated to use the string
+      // representation, we can drop this code path.
+      instance = new element.type(element);
+
+      // We renamed this. Allow the old name for compat. :(
+      if (!instance.getHostNode) {
+        instance.getHostNode = instance.getNativeNode;
+      }
+    } else {
+      instance = new ReactCompositeComponentWrapper(element);
+    }
+  } else if (typeof node === 'string' || typeof node === 'number') {
+    instance = ReactHostComponent.createInstanceForText(node);
+  } else {
+    !false ? "development" !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;
+  }
+
+  if ("development" !== 'production') {
+    "development" !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
+  }
+
+  // These two fields are used by the DOM and ART diffing algorithms
+  // respectively. Instead of using expandos on components, we should be
+  // storing the state needed by the diffing algorithms elsewhere.
+  instance._mountIndex = 0;
+  instance._mountImage = null;
+
+  if ("development" !== 'production') {
+    instance._debugID = shouldHaveDebugID ? nextDebugID++ : 0;
+  }
+
+  // Internal instances should fully constructed at this point, so they should
+  // not get any new fields added to them at this point.
+  if ("development" !== 'production') {
+    if (Object.preventExtensions) {
+      Object.preventExtensions(instance);
+    }
+  }
+
+  return instance;
+}
+
+module.exports = instantiateReactComponent;
+},{"140":140,"162":162,"171":171,"172":172,"36":36,"63":63,"68":68}],136:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule isEventSupported
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+
+var useHasFeature;
+if (ExecutionEnvironment.canUseDOM) {
+  useHasFeature = document.implementation && document.implementation.hasFeature &&
+  // always returns true in newer browsers as per the standard.
+  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
+  document.implementation.hasFeature('', '') !== true;
+}
+
+/**
+ * Checks if an event is supported in the current execution environment.
+ *
+ * NOTE: This will not work correctly for non-generic events such as `change`,
+ * `reset`, `load`, `error`, and `select`.
+ *
+ * Borrows from Modernizr.
+ *
+ * @param {string} eventNameSuffix Event name, e.g. "click".
+ * @param {?boolean} capture Check if the capture phase is supported.
+ * @return {boolean} True if the event is supported.
+ * @internal
+ * @license Modernizr 3.0.0pre (Custom Build) | MIT
+ */
+function isEventSupported(eventNameSuffix, capture) {
+  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
+    return false;
+  }
+
+  var eventName = 'on' + eventNameSuffix;
+  var isSupported = eventName in document;
+
+  if (!isSupported) {
+    var element = document.createElement('div');
+    element.setAttribute(eventName, 'return;');
+    isSupported = typeof element[eventName] === 'function';
+  }
+
+  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
+    // This is the only way to test support for the `wheel` event in IE9+.
+    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
+  }
+
+  return isSupported;
+}
+
+module.exports = isEventSupported;
+},{"148":148}],137:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule isTextInputElement
+ * 
+ */
+
+'use strict';
+
+/**
+ * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
+ */
+
+var supportedInputTypes = {
+  'color': true,
+  'date': true,
+  'datetime': true,
+  'datetime-local': true,
+  'email': true,
+  'month': true,
+  'number': true,
+  'password': true,
+  'range': true,
+  'search': true,
+  'tel': true,
+  'text': true,
+  'time': true,
+  'url': true,
+  'week': true
+};
+
+function isTextInputElement(elem) {
+  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+
+  if (nodeName === 'input') {
+    return !!supportedInputTypes[elem.type];
+  }
+
+  if (nodeName === 'textarea') {
+    return true;
+  }
+
+  return false;
+}
+
+module.exports = isTextInputElement;
+},{}],138:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule onlyChild
+ */
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactElement = _dereq_(61);
+
+var invariant = _dereq_(162);
+
+/**
+ * Returns the first child in a collection of children and verifies that there
+ * is only one child in the collection.
+ *
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only
+ *
+ * The current implementation of this function assumes that a single child gets
+ * passed without a wrapper, but the purpose of this helper function is to
+ * abstract away the particular structure of children.
+ *
+ * @param {?object} children Child collection structure.
+ * @return {ReactElement} The first and only `ReactElement` contained in the
+ * structure.
+ */
+function onlyChild(children) {
+  !ReactElement.isValidElement(children) ? "development" !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;
+  return children;
+}
+
+module.exports = onlyChild;
+},{"140":140,"162":162,"61":61}],139:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule quoteAttributeValueForBrowser
+ */
+
+'use strict';
+
+var escapeTextContentForBrowser = _dereq_(122);
+
+/**
+ * Escapes attribute value to prevent scripting attacks.
+ *
+ * @param {*} value Value to escape.
+ * @return {string} An escaped string.
+ */
+function quoteAttributeValueForBrowser(value) {
+  return '"' + escapeTextContentForBrowser(value) + '"';
+}
+
+module.exports = quoteAttributeValueForBrowser;
+},{"122":122}],140:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule reactProdInvariant
+ * 
+ */
+'use strict';
+
+/**
+ * WARNING: DO NOT manually require this module.
+ * This is a replacement for `invariant(...)` used by the error code system
+ * and will _only_ be required by the corresponding babel pass.
+ * It always throws.
+ */
+
+function reactProdInvariant(code) {
+  var argCount = arguments.length - 1;
+
+  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;
+
+  for (var argIdx = 0; argIdx < argCount; argIdx++) {
+    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);
+  }
+
+  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';
+
+  var error = new Error(message);
+  error.name = 'Invariant Violation';
+  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame
+
+  throw error;
+}
+
+module.exports = reactProdInvariant;
+},{}],141:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+* @providesModule renderSubtreeIntoContainer
+*/
+
+'use strict';
+
+var ReactMount = _dereq_(76);
+
+module.exports = ReactMount.renderSubtreeIntoContainer;
+},{"76":76}],142:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule setInnerHTML
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+var DOMNamespaces = _dereq_(9);
+
+var WHITESPACE_TEST = /^[ \r\n\t\f]/;
+var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
+
+var createMicrosoftUnsafeLocalFunction = _dereq_(120);
+
+// SVG temp container for IE lacking innerHTML
+var reusableSVGContainer;
+
+/**
+ * Set the innerHTML property of a node, ensuring that whitespace is preserved
+ * even in IE8.
+ *
+ * @param {DOMElement} node
+ * @param {string} html
+ * @internal
+ */
+var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
+  // IE does not have innerHTML for SVG nodes, so instead we inject the
+  // new markup in a temp node and then move the child nodes across into
+  // the target node
+  if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {
+    reusableSVGContainer = reusableSVGContainer || document.createElement('div');
+    reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';
+    var svgNode = reusableSVGContainer.firstChild;
+    while (svgNode.firstChild) {
+      node.appendChild(svgNode.firstChild);
+    }
+  } else {
+    node.innerHTML = html;
+  }
+});
+
+if (ExecutionEnvironment.canUseDOM) {
+  // IE8: When updating a just created node with innerHTML only leading
+  // whitespace is removed. When updating an existing node with innerHTML
+  // whitespace in root TextNodes is also collapsed.
+  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
+
+  // Feature detection; only IE8 is known to behave improperly like this.
+  var testElement = document.createElement('div');
+  testElement.innerHTML = ' ';
+  if (testElement.innerHTML === '') {
+    setInnerHTML = function (node, html) {
+      // Magic theory: IE8 supposedly differentiates between added and updated
+      // nodes when processing innerHTML, innerHTML on updated nodes suffers
+      // from worse whitespace behavior. Re-adding a node like this triggers
+      // the initial and more favorable whitespace behavior.
+      // TODO: What to do on a detached node?
+      if (node.parentNode) {
+        node.parentNode.replaceChild(node, node);
+      }
+
+      // We also implement a workaround for non-visible tags disappearing into
+      // thin air on IE8, this only happens if there is no visible text
+      // in-front of the non-visible tags. Piggyback on the whitespace fix
+      // and simply check if any non-visible tags appear in the source.
+      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
+        // Recover leading whitespace by temporarily prepending any character.
+        // \uFEFF has the potential advantage of being zero-width/invisible.
+        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode
+        // in hopes that this is preserved even if "\uFEFF" is transformed to
+        // the actual Unicode character (by Babel, for example).
+        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216
+        node.innerHTML = String.fromCharCode(0xFEFF) + html;
+
+        // deleteData leaves an empty `TextNode` which offsets the index of all
+        // children. Definitely want to avoid this.
+        var textNode = node.firstChild;
+        if (textNode.data.length === 1) {
+          node.removeChild(textNode);
+        } else {
+          textNode.deleteData(0, 1);
+        }
+      } else {
+        node.innerHTML = html;
+      }
+    };
+  }
+  testElement = null;
+}
+
+module.exports = setInnerHTML;
+},{"120":120,"148":148,"9":9}],143:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule setTextContent
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+var escapeTextContentForBrowser = _dereq_(122);
+var setInnerHTML = _dereq_(142);
+
+/**
+ * Set the textContent property of a node, ensuring that whitespace is preserved
+ * even in IE8. innerText is a poor substitute for textContent and, among many
+ * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
+ * as it should.
+ *
+ * @param {DOMElement} node
+ * @param {string} text
+ * @internal
+ */
+var setTextContent = function (node, text) {
+  if (text) {
+    var firstChild = node.firstChild;
+
+    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {
+      firstChild.nodeValue = text;
+      return;
+    }
+  }
+  node.textContent = text;
+};
+
+if (ExecutionEnvironment.canUseDOM) {
+  if (!('textContent' in document.documentElement)) {
+    setTextContent = function (node, text) {
+      setInnerHTML(node, escapeTextContentForBrowser(text));
+    };
+  }
+}
+
+module.exports = setTextContent;
+},{"122":122,"142":142,"148":148}],144:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule shouldUpdateReactComponent
+ */
+
+'use strict';
+
+/**
+ * Given a `prevElement` and `nextElement`, determines if the existing
+ * instance should be updated as opposed to being destroyed or replaced by a new
+ * instance. Both arguments are elements. This ensures that this logic can
+ * operate on stateless trees without any backing instance.
+ *
+ * @param {?object} prevElement
+ * @param {?object} nextElement
+ * @return {boolean} True if the existing instance should be updated.
+ * @protected
+ */
+
+function shouldUpdateReactComponent(prevElement, nextElement) {
+  var prevEmpty = prevElement === null || prevElement === false;
+  var nextEmpty = nextElement === null || nextElement === false;
+  if (prevEmpty || nextEmpty) {
+    return prevEmpty === nextEmpty;
+  }
+
+  var prevType = typeof prevElement;
+  var nextType = typeof nextElement;
+  if (prevType === 'string' || prevType === 'number') {
+    return nextType === 'string' || nextType === 'number';
+  } else {
+    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
+  }
+}
+
+module.exports = shouldUpdateReactComponent;
+},{}],145:[function(_dereq_,module,exports){
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule traverseAllChildren
+ */
+
+'use strict';
+
+var _prodInvariant = _dereq_(140);
+
+var ReactCurrentOwner = _dereq_(37);
+var ReactElement = _dereq_(61);
+
+var getIteratorFn = _dereq_(131);
+var invariant = _dereq_(162);
+var KeyEscapeUtils = _dereq_(23);
+var warning = _dereq_(171);
+
+var SEPARATOR = '.';
+var SUBSEPARATOR = ':';
+
+/**
+ * TODO: Test that a single child and an array with one item have the same key
+ * pattern.
+ */
+
+var didWarnAboutMaps = false;
+
+/**
+ * Generate a key string that identifies a component within a set.
+ *
+ * @param {*} component A component that could contain a manual key.
+ * @param {number} index Index that is used if a manual key is not provided.
+ * @return {string}
+ */
+function getComponentKey(component, index) {
+  // Do some typechecking here since we call this blindly. We want to ensure
+  // that we don't block potential future ES APIs.
+  if (component && typeof component === 'object' && component.key != null) {
+    // Explicit key
+    return KeyEscapeUtils.escape(component.key);
+  }
+  // Implicit key determined by the index in the set
+  return index.toString(36);
+}
+
+/**
+ * @param {?*} children Children tree container.
+ * @param {!string} nameSoFar Name of the key path so far.
+ * @param {!function} callback Callback to invoke with each child found.
+ * @param {?*} traverseContext Used to pass information throughout the traversal
+ * process.
+ * @return {!number} The number of children in this subtree.
+ */
+function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
+  var type = typeof children;
+
+  if (type === 'undefined' || type === 'boolean') {
+    // All of the above are perceived as null.
+    children = null;
+  }
+
+  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
+    callback(traverseContext, children,
+    // If it's the only child, treat the name as if it was wrapped in an array
+    // so that it's consistent if the number of children grows.
+    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
+    return 1;
+  }
+
+  var child;
+  var nextName;
+  var subtreeCount = 0; // Count of children found in the current subtree.
+  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
+
+  if (Array.isArray(children)) {
+    for (var i = 0; i < children.length; i++) {
+      child = children[i];
+      nextName = nextNamePrefix + getComponentKey(child, i);
+      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+    }
+  } else {
+    var iteratorFn = getIteratorFn(children);
+    if (iteratorFn) {
+      var iterator = iteratorFn.call(children);
+      var step;
+      if (iteratorFn !== children.entries) {
+        var ii = 0;
+        while (!(step = iterator.next()).done) {
+          child = step.value;
+          nextName = nextNamePrefix + getComponentKey(child, ii++);
+          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+        }
+      } else {
+        if ("development" !== 'production') {
+          var mapsAsChildrenAddendum = '';
+          if (ReactCurrentOwner.current) {
+            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();
+            if (mapsAsChildrenOwnerName) {
+              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';
+            }
+          }
+          "development" !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;
+          didWarnAboutMaps = true;
+        }
+        // Iterator will provide entry [k,v] tuples rather than values.
+        while (!(step = iterator.next()).done) {
+          var entry = step.value;
+          if (entry) {
+            child = entry[1];
+            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
+            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+          }
+        }
+      }
+    } else if (type === 'object') {
+      var addendum = '';
+      if ("development" !== 'production') {
+        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
+        if (children._isReactElement) {
+          addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
+        }
+        if (ReactCurrentOwner.current) {
+          var name = ReactCurrentOwner.current.getName();
+          if (name) {
+            addendum += ' Check the render method of `' + name + '`.';
+          }
+        }
+      }
+      var childrenString = String(children);
+      !false ? "development" !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;
+    }
+  }
+
+  return subtreeCount;
+}
+
+/**
+ * Traverses children that are typically specified as `props.children`, but
+ * might also be specified through attributes:
+ *
+ * - `traverseAllChildren(this.props.children, ...)`
+ * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
+ *
+ * The `traverseContext` is an optional argument that is passed through the
+ * entire traversal. It can be used to store accumulations or anything else that
+ * the callback might find relevant.
+ *
+ * @param {?*} children Children tree object.
+ * @param {!function} callback To invoke upon traversing each child.
+ * @param {?*} traverseContext Context for traversal.
+ * @return {!number} The number of children in this subtree.
+ */
+function traverseAllChildren(children, callback, traverseContext) {
+  if (children == null) {
+    return 0;
+  }
+
+  return traverseAllChildrenImpl(children, '', callback, traverseContext);
+}
+
+module.exports = traverseAllChildren;
+},{"131":131,"140":140,"162":162,"171":171,"23":23,"37":37,"61":61}],146:[function(_dereq_,module,exports){
+/**
+ * Copyright 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule validateDOMNesting
+ */
+
+'use strict';
+
+var _assign = _dereq_(172);
+
+var emptyFunction = _dereq_(154);
+var warning = _dereq_(171);
+
+var validateDOMNesting = emptyFunction;
+
+if ("development" !== 'production') {
+  // This validation code was written based on the HTML5 parsing spec:
+  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
+  //
+  // Note: this does not catch all invalid nesting, nor does it try to (as it's
+  // not clear what practical benefit doing so provides); instead, we warn only
+  // for cases where the parser will give a parse tree differing from what React
+  // intended. For example, <b><div></div></b> is invalid but we don't warn
+  // because it still parses correctly; we do warn for other cases like nested
+  // <p> tags where the beginning of the second element implicitly closes the
+  // first, causing a confusing mess.
+
+  // https://html.spec.whatwg.org/multipage/syntax.html#special
+  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];
+
+  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
+  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',
+
+  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
+  // TODO: Distinguish by namespace here -- for <title>, including it here
+  // errs on the side of fewer warnings
+  'foreignObject', 'desc', 'title'];
+
+  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
+  var buttonScopeTags = inScopeTags.concat(['button']);
+
+  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
+  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
+
+  var emptyAncestorInfo = {
+    current: null,
+
+    formTag: null,
+    aTagInScope: null,
+    buttonTagInScope: null,
+    nobrTagInScope: null,
+    pTagInButtonScope: null,
+
+    listItemTagAutoclosing: null,
+    dlItemTagAutoclosing: null
+  };
+
+  var updatedAncestorInfo = function (oldInfo, tag, instance) {
+    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);
+    var info = { tag: tag, instance: instance };
+
+    if (inScopeTags.indexOf(tag) !== -1) {
+      ancestorInfo.aTagInScope = null;
+      ancestorInfo.buttonTagInScope = null;
+      ancestorInfo.nobrTagInScope = null;
+    }
+    if (buttonScopeTags.indexOf(tag) !== -1) {
+      ancestorInfo.pTagInButtonScope = null;
+    }
+
+    // See rules for 'li', 'dd', 'dt' start tags in
+    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
+    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
+      ancestorInfo.listItemTagAutoclosing = null;
+      ancestorInfo.dlItemTagAutoclosing = null;
+    }
+
+    ancestorInfo.current = info;
+
+    if (tag === 'form') {
+      ancestorInfo.formTag = info;
+    }
+    if (tag === 'a') {
+      ancestorInfo.aTagInScope = info;
+    }
+    if (tag === 'button') {
+      ancestorInfo.buttonTagInScope = info;
+    }
+    if (tag === 'nobr') {
+      ancestorInfo.nobrTagInScope = info;
+    }
+    if (tag === 'p') {
+      ancestorInfo.pTagInButtonScope = info;
+    }
+    if (tag === 'li') {
+      ancestorInfo.listItemTagAutoclosing = info;
+    }
+    if (tag === 'dd' || tag === 'dt') {
+      ancestorInfo.dlItemTagAutoclosing = info;
+    }
+
+    return ancestorInfo;
+  };
+
+  /**
+   * Returns whether
+   */
+  var isTagValidWithParent = function (tag, parentTag) {
+    // First, let's check if we're in an unusual parsing mode...
+    switch (parentTag) {
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
+      case 'select':
+        return tag === 'option' || tag === 'optgroup' || tag === '#text';
+      case 'optgroup':
+        return tag === 'option' || tag === '#text';
+      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
+      // but
+      case 'option':
+        return tag === '#text';
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
+      // No special behavior since these rules fall back to "in body" mode for
+      // all except special table nodes which cause bad parsing behavior anyway.
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
+      case 'tr':
+        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
+      case 'tbody':
+      case 'thead':
+      case 'tfoot':
+        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
+      case 'colgroup':
+        return tag === 'col' || tag === 'template';
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
+      case 'table':
+        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
+
+      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
+      case 'head':
+        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
+
+      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
+      case 'html':
+        return tag === 'head' || tag === 'body';
+      case '#document':
+        return tag === 'html';
+    }
+
+    // Probably in the "in body" parsing mode, so we outlaw only tag combos
+    // where the parsing rules cause implicit opens or closes to be added.
+    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
+    switch (tag) {
+      case 'h1':
+      case 'h2':
+      case 'h3':
+      case 'h4':
+      case 'h5':
+      case 'h6':
+        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
+
+      case 'rp':
+      case 'rt':
+        return impliedEndTags.indexOf(parentTag) === -1;
+
+      case 'body':
+      case 'caption':
+      case 'col':
+      case 'colgroup':
+      case 'frame':
+      case 'head':
+      case 'html':
+      case 'tbody':
+      case 'td':
+      case 'tfoot':
+      case 'th':
+      case 'thead':
+      case 'tr':
+        // These tags are only valid with a few parents that have special child
+        // parsing rules -- if we're down here, then none of those matched and
+        // so we allow it only if we don't know what the parent is, as all other
+        // cases are invalid.
+        return parentTag == null;
+    }
+
+    return true;
+  };
+
+  /**
+   * Returns whether
+   */
+  var findInvalidAncestorForTag = function (tag, ancestorInfo) {
+    switch (tag) {
+      case 'address':
+      case 'article':
+      case 'aside':
+      case 'blockquote':
+      case 'center':
+      case 'details':
+      case 'dialog':
+      case 'dir':
+      case 'div':
+      case 'dl':
+      case 'fieldset':
+      case 'figcaption':
+      case 'figure':
+      case 'footer':
+      case 'header':
+      case 'hgroup':
+      case 'main':
+      case 'menu':
+      case 'nav':
+      case 'ol':
+      case 'p':
+      case 'section':
+      case 'summary':
+      case 'ul':
+
+      case 'pre':
+      case 'listing':
+
+      case 'table':
+
+      case 'hr':
+
+      case 'xmp':
+
+      case 'h1':
+      case 'h2':
+      case 'h3':
+      case 'h4':
+      case 'h5':
+      case 'h6':
+        return ancestorInfo.pTagInButtonScope;
+
+      case 'form':
+        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
+
+      case 'li':
+        return ancestorInfo.listItemTagAutoclosing;
+
+      case 'dd':
+      case 'dt':
+        return ancestorInfo.dlItemTagAutoclosing;
+
+      case 'button':
+        return ancestorInfo.buttonTagInScope;
+
+      case 'a':
+        // Spec says something about storing a list of markers, but it sounds
+        // equivalent to this check.
+        return ancestorInfo.aTagInScope;
+
+      case 'nobr':
+        return ancestorInfo.nobrTagInScope;
+    }
+
+    return null;
+  };
+
+  /**
+   * Given a ReactCompositeComponent instance, return a list of its recursive
+   * owners, starting at the root and ending with the instance itself.
+   */
+  var findOwnerStack = function (instance) {
+    if (!instance) {
+      return [];
+    }
+
+    var stack = [];
+    do {
+      stack.push(instance);
+    } while (instance = instance._currentElement._owner);
+    stack.reverse();
+    return stack;
+  };
+
+  var didWarn = {};
+
+  validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {
+    ancestorInfo = ancestorInfo || emptyAncestorInfo;
+    var parentInfo = ancestorInfo.current;
+    var parentTag = parentInfo && parentInfo.tag;
+
+    if (childText != null) {
+      "development" !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;
+      childTag = '#text';
+    }
+
+    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
+    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
+    var problematic = invalidParent || invalidAncestor;
+
+    if (problematic) {
+      var ancestorTag = problematic.tag;
+      var ancestorInstance = problematic.instance;
+
+      var childOwner = childInstance && childInstance._currentElement._owner;
+      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;
+
+      var childOwners = findOwnerStack(childOwner);
+      var ancestorOwners = findOwnerStack(ancestorOwner);
+
+      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
+      var i;
+
+      var deepestCommon = -1;
+      for (i = 0; i < minStackLen; i++) {
+        if (childOwners[i] === ancestorOwners[i]) {
+          deepestCommon = i;
+        } else {
+          break;
+        }
+      }
+
+      var UNKNOWN = '(unknown)';
+      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {
+        return inst.getName() || UNKNOWN;
+      });
+      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {
+        return inst.getName() || UNKNOWN;
+      });
+      var ownerInfo = [].concat(
+      // If the parent and child instances have a common owner ancestor, start
+      // with that -- otherwise we just start with the parent's owners.
+      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,
+      // If we're warning about an invalid (non-parent) ancestry, add '...'
+      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');
+
+      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;
+      if (didWarn[warnKey]) {
+        return;
+      }
+      didWarn[warnKey] = true;
+
+      var tagDisplayName = childTag;
+      var whitespaceInfo = '';
+      if (childTag === '#text') {
+        if (/\S/.test(childText)) {
+          tagDisplayName = 'Text nodes';
+        } else {
+          tagDisplayName = 'Whitespace text nodes';
+          whitespaceInfo = ' Make sure you don\'t have any extra whitespace between tags on ' + 'each line of your source code.';
+        }
+      } else {
+        tagDisplayName = '<' + childTag + '>';
+      }
+
+      if (invalidParent) {
+        var info = '';
+        if (ancestorTag === 'table' && childTag === 'tr') {
+          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';
+        }
+        "development" !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;
+      } else {
+        "development" !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;
+      }
+    }
+  };
+
+  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;
+
+  // For testing
+  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {
+    ancestorInfo = ancestorInfo || emptyAncestorInfo;
+    var parentInfo = ancestorInfo.current;
+    var parentTag = parentInfo && parentInfo.tag;
+    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);
+  };
+}
+
+module.exports = validateDOMNesting;
+},{"154":154,"171":171,"172":172}],147:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * 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.
+ *
+ * @typechecks
+ */
+
+var emptyFunction = _dereq_(154);
+
+/**
+ * Upstream version of event listener. Does not take into account specific
+ * nature of platform.
+ */
+var EventListener = {
+  /**
+   * Listen to DOM events during the bubble phase.
+   *
+   * @param {DOMEventTarget} target DOM element to register listener on.
+   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
+   * @param {function} callback Callback function.
+   * @return {object} Object with a `remove` method.
+   */
+  listen: function listen(target, eventType, callback) {
+    if (target.addEventListener) {
+      target.addEventListener(eventType, callback, false);
+      return {
+        remove: function remove() {
+          target.removeEventListener(eventType, callback, false);
+        }
+      };
+    } else if (target.attachEvent) {
+      target.attachEvent('on' + eventType, callback);
+      return {
+        remove: function remove() {
+          target.detachEvent('on' + eventType, callback);
+        }
+      };
+    }
+  },
+
+  /**
+   * Listen to DOM events during the capture phase.
+   *
+   * @param {DOMEventTarget} target DOM element to register listener on.
+   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
+   * @param {function} callback Callback function.
+   * @return {object} Object with a `remove` method.
+   */
+  capture: function capture(target, eventType, callback) {
+    if (target.addEventListener) {
+      target.addEventListener(eventType, callback, true);
+      return {
+        remove: function remove() {
+          target.removeEventListener(eventType, callback, true);
+        }
+      };
+    } else {
+      if ("development" !== 'production') {
+        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
+      }
+      return {
+        remove: emptyFunction
+      };
+    }
+  },
+
+  registerDefault: function registerDefault() {}
+};
+
+module.exports = EventListener;
+},{"154":154}],148:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+
+/**
+ * Simple, lightweight module assisting with the detection and context of
+ * Worker. Helps avoid circular dependencies and allows code to reason about
+ * whether or not they are in a Worker, even if they never include the main
+ * `ReactWorker` dependency.
+ */
+var ExecutionEnvironment = {
+
+  canUseDOM: canUseDOM,
+
+  canUseWorkers: typeof Worker !== 'undefined',
+
+  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
+
+  canUseViewport: canUseDOM && !!window.screen,
+
+  isInWorker: !canUseDOM // For now, this is true - might change in the future.
+
+};
+
+module.exports = ExecutionEnvironment;
+},{}],149:[function(_dereq_,module,exports){
+"use strict";
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+var _hyphenPattern = /-(.)/g;
+
+/**
+ * Camelcases a hyphenated string, for example:
+ *
+ *   > camelize('background-color')
+ *   < "backgroundColor"
+ *
+ * @param {string} string
+ * @return {string}
+ */
+function camelize(string) {
+  return string.replace(_hyphenPattern, function (_, character) {
+    return character.toUpperCase();
+  });
+}
+
+module.exports = camelize;
+},{}],150:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+'use strict';
+
+var camelize = _dereq_(149);
+
+var msPattern = /^-ms-/;
+
+/**
+ * Camelcases a hyphenated CSS property name, for example:
+ *
+ *   > camelizeStyleName('background-color')
+ *   < "backgroundColor"
+ *   > camelizeStyleName('-moz-transition')
+ *   < "MozTransition"
+ *   > camelizeStyleName('-ms-transition')
+ *   < "msTransition"
+ *
+ * As Andi Smith suggests
+ * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
+ * is converted to lowercase `ms`.
+ *
+ * @param {string} string
+ * @return {string}
+ */
+function camelizeStyleName(string) {
+  return camelize(string.replace(msPattern, 'ms-'));
+}
+
+module.exports = camelizeStyleName;
+},{"149":149}],151:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * 
+ */
+
+var isTextNode = _dereq_(164);
+
+/*eslint-disable no-bitwise */
+
+/**
+ * Checks if a given DOM node contains or is another DOM node.
+ */
+function containsNode(outerNode, innerNode) {
+  if (!outerNode || !innerNode) {
+    return false;
+  } else if (outerNode === innerNode) {
+    return true;
+  } else if (isTextNode(outerNode)) {
+    return false;
+  } else if (isTextNode(innerNode)) {
+    return containsNode(outerNode, innerNode.parentNode);
+  } else if ('contains' in outerNode) {
+    return outerNode.contains(innerNode);
+  } else if (outerNode.compareDocumentPosition) {
+    return !!(outerNode.compareDocumentPosition(innerNode) & 16);
+  } else {
+    return false;
+  }
+}
+
+module.exports = containsNode;
+},{"164":164}],152:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+var invariant = _dereq_(162);
+
+/**
+ * Convert array-like objects to arrays.
+ *
+ * This API assumes the caller knows the contents of the data type. For less
+ * well defined inputs use createArrayFromMixed.
+ *
+ * @param {object|function|filelist} obj
+ * @return {array}
+ */
+function toArray(obj) {
+  var length = obj.length;
+
+  // Some browsers builtin objects can report typeof 'function' (e.g. NodeList
+  // in old versions of Safari).
+  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? "development" !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;
+
+  !(typeof length === 'number') ? "development" !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;
+
+  !(length === 0 || length - 1 in obj) ? "development" !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;
+
+  !(typeof obj.callee !== 'function') ? "development" !== 'production' ? invariant(false, 'toArray: Object can\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;
+
+  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
+  // without method will throw during the slice call and skip straight to the
+  // fallback.
+  if (obj.hasOwnProperty) {
+    try {
+      return Array.prototype.slice.call(obj);
+    } catch (e) {
+      // IE < 9 does not support Array#slice on collections objects
+    }
+  }
+
+  // Fall back to copying key by key. This assumes all keys have a value,
+  // so will not preserve sparsely populated inputs.
+  var ret = Array(length);
+  for (var ii = 0; ii < length; ii++) {
+    ret[ii] = obj[ii];
+  }
+  return ret;
+}
+
+/**
+ * Perform a heuristic test to determine if an object is "array-like".
+ *
+ *   A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
+ *   Joshu replied: "Mu."
+ *
+ * This function determines if its argument has "array nature": it returns
+ * true if the argument is an actual array, an `arguments' object, or an
+ * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
+ *
+ * It will return false for other array-like objects like Filelist.
+ *
+ * @param {*} obj
+ * @return {boolean}
+ */
+function hasArrayNature(obj) {
+  return (
+    // not null/false
+    !!obj && (
+    // arrays are objects, NodeLists are functions in Safari
+    typeof obj == 'object' || typeof obj == 'function') &&
+    // quacks like an array
+    'length' in obj &&
+    // not window
+    !('setInterval' in obj) &&
+    // no DOM node should be considered an array-like
+    // a 'select' element has 'length' and 'item' properties on IE8
+    typeof obj.nodeType != 'number' && (
+    // a real array
+    Array.isArray(obj) ||
+    // arguments
+    'callee' in obj ||
+    // HTMLCollection/NodeList
+    'item' in obj)
+  );
+}
+
+/**
+ * Ensure that the argument is an array by wrapping it in an array if it is not.
+ * Creates a copy of the argument if it is already an array.
+ *
+ * This is mostly useful idiomatically:
+ *
+ *   var createArrayFromMixed = require('createArrayFromMixed');
+ *
+ *   function takesOneOrMoreThings(things) {
+ *     things = createArrayFromMixed(things);
+ *     ...
+ *   }
+ *
+ * This allows you to treat `things' as an array, but accept scalars in the API.
+ *
+ * If you need to convert an array-like object, like `arguments`, into an array
+ * use toArray instead.
+ *
+ * @param {*} obj
+ * @return {array}
+ */
+function createArrayFromMixed(obj) {
+  if (!hasArrayNature(obj)) {
+    return [obj];
+  } else if (Array.isArray(obj)) {
+    return obj.slice();
+  } else {
+    return toArray(obj);
+  }
+}
+
+module.exports = createArrayFromMixed;
+},{"162":162}],153:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+/*eslint-disable fb-www/unsafe-html*/
+
+var ExecutionEnvironment = _dereq_(148);
+
+var createArrayFromMixed = _dereq_(152);
+var getMarkupWrap = _dereq_(158);
+var invariant = _dereq_(162);
+
+/**
+ * Dummy container used to render all markup.
+ */
+var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
+
+/**
+ * Pattern used by `getNodeName`.
+ */
+var nodeNamePattern = /^\s*<(\w+)/;
+
+/**
+ * Extracts the `nodeName` of the first element in a string of markup.
+ *
+ * @param {string} markup String of markup.
+ * @return {?string} Node name of the supplied markup.
+ */
+function getNodeName(markup) {
+  var nodeNameMatch = markup.match(nodeNamePattern);
+  return nodeNameMatch && nodeNameMatch[1].toLowerCase();
+}
+
+/**
+ * Creates an array containing the nodes rendered from the supplied markup. The
+ * optionally supplied `handleScript` function will be invoked once for each
+ * <script> element that is rendered. If no `handleScript` function is supplied,
+ * an exception is thrown if any <script> elements are rendered.
+ *
+ * @param {string} markup A string of valid HTML markup.
+ * @param {?function} handleScript Invoked once for each rendered <script>.
+ * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
+ */
+function createNodesFromMarkup(markup, handleScript) {
+  var node = dummyNode;
+  !!!dummyNode ? "development" !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;
+  var nodeName = getNodeName(markup);
+
+  var wrap = nodeName && getMarkupWrap(nodeName);
+  if (wrap) {
+    node.innerHTML = wrap[1] + markup + wrap[2];
+
+    var wrapDepth = wrap[0];
+    while (wrapDepth--) {
+      node = node.lastChild;
+    }
+  } else {
+    node.innerHTML = markup;
+  }
+
+  var scripts = node.getElementsByTagName('script');
+  if (scripts.length) {
+    !handleScript ? "development" !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;
+    createArrayFromMixed(scripts).forEach(handleScript);
+  }
+
+  var nodes = Array.from(node.childNodes);
+  while (node.lastChild) {
+    node.removeChild(node.lastChild);
+  }
+  return nodes;
+}
+
+module.exports = createNodesFromMarkup;
+},{"148":148,"152":152,"158":158,"162":162}],154:[function(_dereq_,module,exports){
+"use strict";
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * 
+ */
+
+function makeEmptyFunction(arg) {
+  return function () {
+    return arg;
+  };
+}
+
+/**
+ * This function accepts and discards inputs; it has no side effects. This is
+ * primarily useful idiomatically for overridable function endpoints which
+ * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
+ */
+var emptyFunction = function emptyFunction() {};
+
+emptyFunction.thatReturns = makeEmptyFunction;
+emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
+emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
+emptyFunction.thatReturnsNull = makeEmptyFunction(null);
+emptyFunction.thatReturnsThis = function () {
+  return this;
+};
+emptyFunction.thatReturnsArgument = function (arg) {
+  return arg;
+};
+
+module.exports = emptyFunction;
+},{}],155:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+var emptyObject = {};
+
+if ("development" !== 'production') {
+  Object.freeze(emptyObject);
+}
+
+module.exports = emptyObject;
+},{}],156:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+/**
+ * @param {DOMElement} node input/textarea to focus
+ */
+
+function focusNode(node) {
+  // IE8 can throw "Can't move focus to the control because it is invisible,
+  // not enabled, or of a type that does not accept the focus." for all kinds of
+  // reasons that are too expensive and fragile to test.
+  try {
+    node.focus();
+  } catch (e) {}
+}
+
+module.exports = focusNode;
+},{}],157:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+/* eslint-disable fb-www/typeof-undefined */
+
+/**
+ * Same as document.activeElement but wraps in a try-catch block. In IE it is
+ * not safe to call document.activeElement if there is nothing focused.
+ *
+ * The activeElement will be null only if the document or document body is not
+ * yet defined.
+ */
+function getActiveElement() /*?DOMElement*/{
+  if (typeof document === 'undefined') {
+    return null;
+  }
+  try {
+    return document.activeElement || document.body;
+  } catch (e) {
+    return document.body;
+  }
+}
+
+module.exports = getActiveElement;
+},{}],158:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+/*eslint-disable fb-www/unsafe-html */
+
+var ExecutionEnvironment = _dereq_(148);
+
+var invariant = _dereq_(162);
+
+/**
+ * Dummy container used to detect which wraps are necessary.
+ */
+var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
+
+/**
+ * Some browsers cannot use `innerHTML` to render certain elements standalone,
+ * so we wrap them, render the wrapped nodes, then extract the desired node.
+ *
+ * In IE8, certain elements cannot render alone, so wrap all elements ('*').
+ */
+
+var shouldWrap = {};
+
+var selectWrap = [1, '<select multiple="true">', '</select>'];
+var tableWrap = [1, '<table>', '</table>'];
+var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
+
+var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>'];
+
+var markupWrap = {
+  '*': [1, '?<div>', '</div>'],
+
+  'area': [1, '<map>', '</map>'],
+  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
+  'legend': [1, '<fieldset>', '</fieldset>'],
+  'param': [1, '<object>', '</object>'],
+  'tr': [2, '<table><tbody>', '</tbody></table>'],
+
+  'optgroup': selectWrap,
+  'option': selectWrap,
+
+  'caption': tableWrap,
+  'colgroup': tableWrap,
+  'tbody': tableWrap,
+  'tfoot': tableWrap,
+  'thead': tableWrap,
+
+  'td': trWrap,
+  'th': trWrap
+};
+
+// Initialize the SVG elements since we know they'll always need to be wrapped
+// consistently. If they are created inside a <div> they will be initialized in
+// the wrong namespace (and will not display).
+var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];
+svgElements.forEach(function (nodeName) {
+  markupWrap[nodeName] = svgWrap;
+  shouldWrap[nodeName] = true;
+});
+
+/**
+ * Gets the markup wrap configuration for the supplied `nodeName`.
+ *
+ * NOTE: This lazily detects which wraps are necessary for the current browser.
+ *
+ * @param {string} nodeName Lowercase `nodeName`.
+ * @return {?array} Markup wrap configuration, if applicable.
+ */
+function getMarkupWrap(nodeName) {
+  !!!dummyNode ? "development" !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;
+  if (!markupWrap.hasOwnProperty(nodeName)) {
+    nodeName = '*';
+  }
+  if (!shouldWrap.hasOwnProperty(nodeName)) {
+    if (nodeName === '*') {
+      dummyNode.innerHTML = '<link />';
+    } else {
+      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
+    }
+    shouldWrap[nodeName] = !dummyNode.firstChild;
+  }
+  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
+}
+
+module.exports = getMarkupWrap;
+},{"148":148,"162":162}],159:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+'use strict';
+
+/**
+ * Gets the scroll position of the supplied element or window.
+ *
+ * The return values are unbounded, unlike `getScrollPosition`. This means they
+ * may be negative or exceed the element boundaries (which is possible using
+ * inertial scrolling).
+ *
+ * @param {DOMWindow|DOMElement} scrollable
+ * @return {object} Map with `x` and `y` keys.
+ */
+
+function getUnboundedScrollPosition(scrollable) {
+  if (scrollable === window) {
+    return {
+      x: window.pageXOffset || document.documentElement.scrollLeft,
+      y: window.pageYOffset || document.documentElement.scrollTop
+    };
+  }
+  return {
+    x: scrollable.scrollLeft,
+    y: scrollable.scrollTop
+  };
+}
+
+module.exports = getUnboundedScrollPosition;
+},{}],160:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+var _uppercasePattern = /([A-Z])/g;
+
+/**
+ * Hyphenates a camelcased string, for example:
+ *
+ *   > hyphenate('backgroundColor')
+ *   < "background-color"
+ *
+ * For CSS style names, use `hyphenateStyleName` instead which works properly
+ * with all vendor prefixes, including `ms`.
+ *
+ * @param {string} string
+ * @return {string}
+ */
+function hyphenate(string) {
+  return string.replace(_uppercasePattern, '-$1').toLowerCase();
+}
+
+module.exports = hyphenate;
+},{}],161:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+'use strict';
+
+var hyphenate = _dereq_(160);
+
+var msPattern = /^ms-/;
+
+/**
+ * Hyphenates a camelcased CSS property name, for example:
+ *
+ *   > hyphenateStyleName('backgroundColor')
+ *   < "background-color"
+ *   > hyphenateStyleName('MozTransition')
+ *   < "-moz-transition"
+ *   > hyphenateStyleName('msTransition')
+ *   < "-ms-transition"
+ *
+ * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
+ * is converted to `-ms-`.
+ *
+ * @param {string} string
+ * @return {string}
+ */
+function hyphenateStyleName(string) {
+  return hyphenate(string).replace(msPattern, '-ms-');
+}
+
+module.exports = hyphenateStyleName;
+},{"160":160}],162:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+/**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+function invariant(condition, format, a, b, c, d, e, f) {
+  if ("development" !== 'production') {
+    if (format === undefined) {
+      throw new Error('invariant requires an error message argument');
+    }
+  }
+
+  if (!condition) {
+    var error;
+    if (format === undefined) {
+      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
+    } else {
+      var args = [a, b, c, d, e, f];
+      var argIndex = 0;
+      error = new Error(format.replace(/%s/g, function () {
+        return args[argIndex++];
+      }));
+      error.name = 'Invariant Violation';
+    }
+
+    error.framesToPop = 1; // we don't care about invariant's own frame
+    throw error;
+  }
+}
+
+module.exports = invariant;
+},{}],163:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+/**
+ * @param {*} object The object to check.
+ * @return {boolean} Whether or not the object is a DOM node.
+ */
+function isNode(object) {
+  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
+}
+
+module.exports = isNode;
+},{}],164:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+var isNode = _dereq_(163);
+
+/**
+ * @param {*} object The object to check.
+ * @return {boolean} Whether or not the object is a DOM text node.
+ */
+function isTextNode(object) {
+  return isNode(object) && object.nodeType == 3;
+}
+
+module.exports = isTextNode;
+},{"163":163}],165:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks static-only
+ */
+
+'use strict';
+
+var invariant = _dereq_(162);
+
+/**
+ * Constructs an enumeration with keys equal to their value.
+ *
+ * For example:
+ *
+ *   var COLORS = keyMirror({blue: null, red: null});
+ *   var myColor = COLORS.blue;
+ *   var isColorValid = !!COLORS[myColor];
+ *
+ * The last line could not be performed if the values of the generated enum were
+ * not equal to their keys.
+ *
+ *   Input:  {key1: val1, key2: val2}
+ *   Output: {key1: key1, key2: key2}
+ *
+ * @param {object} obj
+ * @return {object}
+ */
+var keyMirror = function keyMirror(obj) {
+  var ret = {};
+  var key;
+  !(obj instanceof Object && !Array.isArray(obj)) ? "development" !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;
+  for (key in obj) {
+    if (!obj.hasOwnProperty(key)) {
+      continue;
+    }
+    ret[key] = key;
+  }
+  return ret;
+};
+
+module.exports = keyMirror;
+},{"162":162}],166:[function(_dereq_,module,exports){
+"use strict";
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+/**
+ * Allows extraction of a minified key. Let's the build system minify keys
+ * without losing the ability to dynamically use key strings as values
+ * themselves. Pass in an object with a single key/val pair and it will return
+ * you the string key of that single record. Suppose you want to grab the
+ * value for a key 'className' inside of an object. Key/val minification may
+ * have aliased that key to be 'xa12'. keyOf({className: null}) will return
+ * 'xa12' in that case. Resolve keys you want to use once at startup time, then
+ * reuse those resolutions.
+ */
+var keyOf = function keyOf(oneKeyObj) {
+  var key;
+  for (key in oneKeyObj) {
+    if (!oneKeyObj.hasOwnProperty(key)) {
+      continue;
+    }
+    return key;
+  }
+  return null;
+};
+
+module.exports = keyOf;
+},{}],167:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * 
+ * @typechecks static-only
+ */
+
+'use strict';
+
+/**
+ * Memoizes the return value of a function that accepts one string argument.
+ */
+
+function memoizeStringOnly(callback) {
+  var cache = {};
+  return function (string) {
+    if (!cache.hasOwnProperty(string)) {
+      cache[string] = callback.call(this, string);
+    }
+    return cache[string];
+  };
+}
+
+module.exports = memoizeStringOnly;
+},{}],168:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+'use strict';
+
+var ExecutionEnvironment = _dereq_(148);
+
+var performance;
+
+if (ExecutionEnvironment.canUseDOM) {
+  performance = window.performance || window.msPerformance || window.webkitPerformance;
+}
+
+module.exports = performance || {};
+},{"148":148}],169:[function(_dereq_,module,exports){
+'use strict';
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ */
+
+var performance = _dereq_(168);
+
+var performanceNow;
+
+/**
+ * Detect if we can use `window.performance.now()` and gracefully fallback to
+ * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
+ * because of Facebook's testing infrastructure.
+ */
+if (performance.now) {
+  performanceNow = function performanceNow() {
+    return performance.now();
+  };
+} else {
+  performanceNow = function performanceNow() {
+    return Date.now();
+  };
+}
+
+module.exports = performanceNow;
+},{"168":168}],170:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @typechecks
+ * 
+ */
+
+/*eslint-disable no-self-compare */
+
+'use strict';
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+/**
+ * inlined Object.is polyfill to avoid requiring consumers ship their own
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+ */
+function is(x, y) {
+  // SameValue algorithm
+  if (x === y) {
+    // Steps 1-5, 7-10
+    // Steps 6.b-6.e: +0 != -0
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    // Step 6.a: NaN == NaN
+    return x !== x && y !== y;
+  }
+}
+
+/**
+ * Performs equality by iterating through keys on an object and returning false
+ * when any key has values which are not strictly equal between the arguments.
+ * Returns true when the values of all keys are strictly equal.
+ */
+function shallowEqual(objA, objB) {
+  if (is(objA, objB)) {
+    return true;
+  }
+
+  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
+    return false;
+  }
+
+  var keysA = Object.keys(objA);
+  var keysB = Object.keys(objB);
+
+  if (keysA.length !== keysB.length) {
+    return false;
+  }
+
+  // Test for A's keys different from B.
+  for (var i = 0; i < keysA.length; i++) {
+    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+module.exports = shallowEqual;
+},{}],171:[function(_dereq_,module,exports){
+/**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+var emptyFunction = _dereq_(154);
+
+/**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+var warning = emptyFunction;
+
+if ("development" !== 'production') {
+  (function () {
+    var printWarning = function printWarning(format) {
+      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        args[_key - 1] = arguments[_key];
+      }
+
+      var argIndex = 0;
+      var message = 'Warning: ' + format.replace(/%s/g, function () {
+        return args[argIndex++];
+      });
+      if (typeof console !== 'undefined') {
+        console.error(message);
+      }
+      try {
+        // --- Welcome to debugging React ---
+        // This error was thrown as a convenience so that you can use this stack
+        // to find the callsite that caused this warning to fire.
+        throw new Error(message);
+      } catch (x) {}
+    };
+
+    warning = function warning(condition, format) {
+      if (format === undefined) {
+        throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
+      }
+
+      if (format.indexOf('Failed Composite propType: ') === 0) {
+        return; // Ignore CompositeComponent proptype check.
+      }
+
+      if (!condition) {
+        for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
+          args[_key2 - 2] = arguments[_key2];
+        }
+
+        printWarning.apply(undefined, [format].concat(args));
+      }
+    };
+  })();
+}
+
+module.exports = warning;
+},{"154":154}],172:[function(_dereq_,module,exports){
+'use strict';
+/* eslint-disable no-unused-vars */
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+function toObject(val) {
+	if (val === null || val === undefined) {
+		throw new TypeError('Object.assign cannot be called with null or undefined');
+	}
+
+	return Object(val);
+}
+
+function shouldUseNative() {
+	try {
+		if (!Object.assign) {
+			return false;
+		}
+
+		// Detect buggy property enumeration order in older V8 versions.
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
+		var test1 = new String('abc');  // eslint-disable-line
+		test1[5] = 'de';
+		if (Object.getOwnPropertyNames(test1)[0] === '5') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test2 = {};
+		for (var i = 0; i < 10; i++) {
+			test2['_' + String.fromCharCode(i)] = i;
+		}
+		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+			return test2[n];
+		});
+		if (order2.join('') !== '0123456789') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test3 = {};
+		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+			test3[letter] = letter;
+		});
+		if (Object.keys(Object.assign({}, test3)).join('') !==
+				'abcdefghijklmnopqrst') {
+			return false;
+		}
+
+		return true;
+	} catch (e) {
+		// We don't expect any of the above to throw, but better to be safe.
+		return false;
+	}
+}
+
+module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+	var from;
+	var to = toObject(target);
+	var symbols;
+
+	for (var s = 1; s < arguments.length; s++) {
+		from = Object(arguments[s]);
+
+		for (var key in from) {
+			if (hasOwnProperty.call(from, key)) {
+				to[key] = from[key];
+			}
+		}
+
+		if (Object.getOwnPropertySymbols) {
+			symbols = Object.getOwnPropertySymbols(from);
+			for (var i = 0; i < symbols.length; i++) {
+				if (propIsEnumerable.call(from, symbols[i])) {
+					to[symbols[i]] = from[symbols[i]];
+				}
+			}
+		}
+	}
+
+	return to;
+};
+
+},{}]},{},[94])(94)
+});
\ No newline at end of file
diff --git a/test-html/react_test.html b/test-html/react_test.html
new file mode 100644
index 0000000..694ebbf
--- /dev/null
+++ b/test-html/react_test.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="UTF-8" />
+        <title>Hello React!</title>
+    </head>
+    <body>
+        <div id="example"></div>
+
+        <!-- Dependencies -->
+        <script src="lib/react.js"></script>
+        <script src="lib/react-dom.js"></script>
+
+        <!-- Main -->
+        <script src="test_build/reacttst.js"></script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/test-html/slider-test.html b/test-html/slider-test.html
index 64dc99e..9ce6615 100644
--- a/test-html/slider-test.html
+++ b/test-html/slider-test.html
@@ -6,25 +6,58 @@
     <link rel="stylesheet" href="../css/all-ol-style.css">
     <link rel="stylesheet" href="../css/layer-swipe.css">
     <style>
-        body, html{
-            height:100%;
+        body, html {
+            height: 100%;
             width: 100%;
             margin: 0;
             padding: 20px;
             background-color: gray;
         }
 
-        #map{
-            height:80%;
+        #map {
+            height: 80%;
             width: 100%;
         }
 
+        .percent-label{
+            margin-left: 20px;
+        }
+
     </style>
 </head>
 <body>
-<div id="slider-container"></div>
+<div style="display: flex; height: 100%">
+    <div id="slider-container"></div>
+    <div>
+        <ul>
+            <li>
+                <select id="preset-selector">
+                    <option value="0" disabled>Custom</option>
+                </select>
+            </li>
+            <li><select id="region-selector">
+                    <option value="all" selected="">Viewable Extent</option>
+                    <option value="SE">Southeast</option>
+                    <option value="SW">Southwest</option>
+                    <option value="NW">Northwest</option>
+                    <option value="NC">North Central</option>
+                    <option value="NE">Northeast</option>
+                </select></select></li>
+            <li>
+                <select id="version-selector">
+                <option value="May 2016">May 2016</option>
+                <option value="December 2015">December 2015</option>
+                <option value="April 2015">April 2015</option>
+                <option value="April 2014">April 2014</option>
+                <option value="April 2013">April 2013</option>
+            </select>
+            </li>
+        </ul>
+    </div>
+</div>
+
 <!--<button id="make-report">export</button>-->
-<script src="../test-build/slider-test.js"></script>
+<script src="test_build/slider-test.js"></script>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/test/jquery-test.js b/test/jquery-test.js
deleted file mode 100644
index 4081dcb..0000000
--- a/test/jquery-test.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Created by gavorhes on 5/23/2016.
- */
-
-
-import $ from '../src/jquery/jquery';
-import  '../src/jquery/jquery-ui';
-
-import '../src/jquery-plugin/day-range';
-//
-// // require('jquery-ui/accordion');
-//
-// // ui.requireAll();
-// // ui.requireComponent('accordion');
-//
-// console.log($);
-//
-//
-let acc = $("#accordion").accordion();
-$('#cat').dayRange(10);
-// glob.acc = acc;
-console.log(acc);
-
diff --git a/test/slider-test.js b/test/slider-test.js
deleted file mode 100644
index 05a7322..0000000
--- a/test/slider-test.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Created by gavorhes on 6/22/2016.
- */
-import Sliders from '../src/collections/Sliders';
-
-
-let sliderParamArray = [
-    ['AADT', [['aadtyr_1', '1']]],
-    ['AADT Future', [['aadtyr_5', '5'], ['aadtyr_10', '10'], ['aadtyr_15', '15'], ['aadtyr_20', '20']]],
-    ['Growth', [['growth_5', '5'], ['growth_10', '10'], ['growth_15', '15'], ['growth_20', '20']]],
-    ['Truck', [['trkdyr_1', '1'], ['trkdyr_20', '20']]],
-    ['LOS', [['losyr_1', '1']]],
-    ['LOS Future', [['losyr_5', '5'], ['losyr_10', '10'], ['losyr_15', '15'], ['losyr_20', '20']]],
-    ['Crash Rate', [['crash_rate', '1']]],
-    ['Severity', [['crash_severity', '1']]],
-    ['Weather', [['weather', '1']]],
-    ['Event', [['event', '1']]]
-];
-
-let presetArray =
-    [
-        ['Default TIP', [
-            [10.0, 'aadtyr_1'],
-            [7.0, 'aadtyr_20'],
-            [7.0, 'growth_20'],
-            [4.0, 'trkdyr_1'],
-            [12.0, 'losyr_1'],
-            [12.0, 'losyr_20'],
-            [15.0, 'crash_rate'],
-            [13.0, 'crash_severity'],
-            [9.0, 'weather'],
-            [11.0, 'event']]
-        ],
-        ['Safety', [
-            [20.0, 'aadtyr_1'],
-            [0.0, 'aadtyr_20'],
-            [0.0, 'growth_20'],
-            [0.0, 'trkdyr_1'],
-            [0.0, 'losyr_1'],
-            [0.0, 'losyr_20'],
-            [40.0, 'crash_rate'],
-            [40.0, 'crash_severity'],
-            [0.0, 'weather'],
-            [0.0, 'event']]
-        ],
-        ['Mobility Present', [
-            [25.0, 'aadtyr_1'],
-            [25.0, 'aadtyr_5'],
-            [0.0, 'growth_20'],
-            [25.0, 'trkdyr_1'],
-            [25.0, 'losyr_1'],
-            [0.0, 'losyr_20'],
-            [0.0, 'crash_rate'],
-            [0.0, 'crash_severity'],
-            [0.0, 'weather'],
-            [0.0, 'event']]
-        ],
-        ['Mobility Future', [
-            [0.0, 'aadtyr_1'],
-            [25.0, 'aadtyr_20'],
-            [25.0, 'growth_20'],
-            [25.0, 'trkdyr_20'],
-            [0.0, 'losyr_1'],
-            [25.0, 'losyr_20'],
-            [0.0, 'crash_rate'],
-            [0.0, 'crash_severity'],
-            [0.0, 'weather'],
-            [0.0, 'event']]
-        ],
-        ['Service', [
-            [30.0, 'aadtyr_1'],
-            [0.0, 'aadtyr_20'],
-            [10.0, 'growth_20'],
-            [0.0, 'trkdyr_1'],
-            [30.0, 'losyr_1'],
-            [30.0, 'losyr_20'],
-            [0.0, 'crash_rate'],
-            [0.0, 'crash_severity'],
-            [0.0, 'weather'],
-            [0.0, 'event']]
-        ],
-        ['Freight Performance', [
-            [20.0, 'aadtyr_1'],
-            [0.0, 'aadtyr_20'],
-            [0.0, 'growth_20'],
-            [60.0, 'trkdyr_1'],
-            [20.0, 'losyr_1'],
-            [0.0, 'losyr_20'],
-            [0.0, 'crash_rate'],
-            [0.0, 'crash_severity'],
-            [0.0, 'weather'],
-            [0.0, 'event']]
-        ]
-    ];
-
-for (var i = 0; i < sliderParamArray.length; i++) {
-    sliderParamArray[i].push(presetArray[0][1][i][0]);
-    sliderParamArray[i].push(presetArray[0][1][i][1]);
-}
-
-let sliders = new Sliders(sliderParamArray, 'slider-container');
-
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..5b8e487
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,14 @@
+{
+  "compileOnSave": true,
+  "version": "1.8.10",
+  "compilerOptions": {
+    "module": "commonjs",
+    "declaration": true,
+    "outDir": "lib-ts",
+    "target": "es5",
+    "rootDir": "src-ts",
+    "sourceMap": true,
+    "jsx": "react"
+  },
+  "exclude": ["node_modules", "ts-lib", "lib-ts", "definitions"]
+}
\ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 0000000..d98358b
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,149 @@
+"use strict";
+const path = require('path');
+const webpack = require('webpack');
+const fs = require('fs');
+
+const testAppDir = path.join(__dirname, 'lib-ts/_test');
+const files = fs.readdirSync(testAppDir);
+const entries = {};
+
+const exportItems = [];
+
+for (let e of files) {
+    if (e.match(/\.js$/) == null) {
+        continue;
+    }
+
+    entries[e.replace(/.js/, '')] = path.join(testAppDir, e);
+
+    exportItems.push({
+        entry: path.join(testAppDir, e),
+        devtool: 'source-map',
+        output: {
+            path: path.join(__dirname, 'test-html', 'test_build'),
+            filename: e
+        }
+    });
+}
+
+let otherConfig = {
+    entry: entries,
+    devtool: 'source-map',
+    output: {
+        path: path.join(__dirname, 'test-html', 'test_build'),
+        filename: "[name].js"
+    },
+    module: {
+        loaders: [
+            {test: /\.js$/, loader: "source-map-loader"}
+        ]
+    },
+    externals: {
+        "react": "React",
+        "react-dom": "ReactDOM"
+    },
+};
+
+
+// module.exports = exportItems;
+module.exports = otherConfig;
+
+
+//
+// var fileArray = [
+//     'api/new_file.js',
+//     'api/npmrds-request.js'
+// ];
+//
+// for (var i = 0; i < fileArray.length; i++) {
+//     fileArray[i] = './' + jsRoot + '/' + fileArray[i];
+// }
+//
+// console.log(fileArray);
+//
+// /**
+//  *
+//  * @param {string} entry
+//  * @returns {{entry: string, devtool: string, output: {path: string, filename: string}, module: {loaders: *[]}}}
+//  */
+// function makeConfig(entry) {
+//     "use strict";
+//
+//     var fileName = path.basename(entry);
+//     var directoryParts = path.dirname(entry).split('/');
+//     directoryParts = directoryParts.splice(directoryParts.indexOf(jsRoot) + 1);
+//
+//     var directoryPath = './flaskApp/static/js/' + directoryParts.join('/');
+//
+//     return {
+//         entry: entry,
+//         devtool: 'source-map',
+//         // output: { path: __dirname, filename: 'bundle.js' },
+//         output: {path: directoryPath, filename: fileName},
+//         module: {
+//             loaders: [
+//                 {
+//                     test: /.jsx?$/,
+//                     loader: 'babel-loader',
+//                     // include: /webmapsjs/
+//                     exclude: /dist/
+//                     // ,
+//                     // ignore: ['jquery.js'],
+//                     // // exclude: /node_modules/,
+//                     // query: {
+//                     //     // presets: ['es2015', 'react']
+//                     //     presets: ['es2015']
+//                     // }
+//                 }
+//             ]
+//         },
+//     };
+// }
+//
+// var exportArray = [];
+//
+// for (i = 0; i < fileArray.length; i++){
+//     exportArray.push(makeConfig(fileArray[i]))
+// }
+//
+// module.exports = exportArray;
+// console.log('here');
+//
+// module.exports = [{
+//     entry: './app_code_js/api/npmrds-request.js',
+//     devtool: 'source-map',
+//     // output: { path: __dirname, filename: 'bundle.js' },
+//     output: {path: '.', filename: 'bundle.js'},
+//     module: {
+//         loaders: [
+//             {
+//                 test: /.jsx?$/,
+//                 loader: 'babel-loader',
+//                 exclude: /node_modules/,
+//                 query: {
+//                     // presets: ['es2015', 'react']
+//                     presets: ['es2015']
+//                 }
+//             }
+//         ]
+//     },
+// },
+//     {
+//         entry: './app_code_js/api/new_file.js',
+//         devtool: 'source-map',
+//         // output: { path: __dirname, filename: 'bundle.js' },
+//         output: {path: '.', filename: 'bundle2.js'},
+//         module: {
+//             loaders: [
+//                 {
+//                     test: /.jsx?$/,
+//                     loader: 'babel-loader',
+//                     exclude: /node_modules/,
+//                     query: {
+//                         // presets: ['es2015', 'react']
+//                         presets: ['es2015']
+//                     }
+//                 }
+//             ]
+//         },
+//     }];
\ No newline at end of file
-- 
GitLab